diff -Nru sudo-1.8.12/ABOUT-NLS sudo-1.8.16/ABOUT-NLS --- sudo-1.8.12/ABOUT-NLS 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.16/ABOUT-NLS 2015-10-31 23:35:24.000000000 +0000 @@ -0,0 +1,1406 @@ +1 Notes on the Free Translation Project +*************************************** + +Free software is going international! The Free Translation Project is a +way to get maintainers of free software, translators, and users all +together, so that free software will gradually become able to speak many +languages. A few packages already provide translations for their +messages. + + If you found this 'ABOUT-NLS' file inside a distribution, you may +assume that the distributed package does use GNU 'gettext' internally, +itself available at your nearest GNU archive site. But you do _not_ +need to install GNU 'gettext' prior to configuring, installing or using +this package with messages translated. + + Installers will find here some useful hints. These notes also +explain how users should proceed for getting the programs to use the +available translations. They tell how people wanting to contribute and +work on translations can contact the appropriate team. + +1.1 INSTALL Matters +=================== + +Some packages are "localizable" when properly installed; the programs +they contain can be made to speak your own native language. Most such +packages use GNU 'gettext'. Other packages have their own ways to +internationalization, predating GNU 'gettext'. + + By default, this package will be installed to allow translation of +messages. It will automatically detect whether the system already +provides the GNU 'gettext' functions. Installers may use special +options at configuration time for changing the default behaviour. The +command: + + ./configure --disable-nls + +will _totally_ disable translation of messages. + + When you already have GNU 'gettext' installed on your system and run +configure without an option for your new package, 'configure' will +probably detect the previously built and installed 'libintl' library and +will decide to use it. If not, you may have to to use the +'--enable-nls[=location]' option to tell 'configure' where to look for it. + + Internationalized packages usually have many 'po/LL.po' files, where +LL gives an ISO 639 two-letter code identifying the language. Unless +translations have been forbidden at 'configure' time by using the +'--disable-nls' switch, all available translations are installed +together with the package. However, the environment variable 'LINGUAS' +may be set, prior to configuration, to limit the installed set. +'LINGUAS' should then contain a space separated list of two-letter +codes, stating which languages are allowed. + +1.2 Using This Package +====================== + +As a user, if your language has been installed for this package, you +only have to set the 'LANG' environment variable to the appropriate +'LL_CC' combination. If you happen to have the 'LC_ALL' or some other +'LC_xxx' environment variables set, you should unset them before setting +'LANG', otherwise the setting of 'LANG' will not have the desired +effect. Here 'LL' is an ISO 639 two-letter language code, and 'CC' is +an ISO 3166 two-letter country code. For example, let's suppose that +you speak German and live in Germany. At the shell prompt, merely +execute 'setenv LANG de_DE' (in 'csh'), 'export LANG; LANG=de_DE' (in +'sh') or 'export LANG=de_DE' (in 'bash'). This can be done from your +'.login' or '.profile' file, once and for all. + + You might think that the country code specification is redundant. +But in fact, some languages have dialects in different countries. For +example, 'de_AT' is used for Austria, and 'pt_BR' for Brazil. The +country code serves to distinguish the dialects. + + The locale naming convention of 'LL_CC', with 'LL' denoting the +language and 'CC' denoting the country, is the one use on systems based +on GNU libc. On other systems, some variations of this scheme are used, +such as 'LL' or 'LL_CC.ENCODING'. You can get the list of locales +supported by your system for your language by running the command +'locale -a | grep '^LL''. + + Not all programs have translations for all languages. By default, an +English message is shown in place of a nonexistent translation. If you +understand other languages, you can set up a priority list of languages. +This is done through a different environment variable, called +'LANGUAGE'. GNU 'gettext' gives preference to 'LANGUAGE' over 'LANG' +for the purpose of message handling, but you still need to have 'LANG' +set to the primary language; this is required by other parts of the +system libraries. For example, some Swedish users who would rather read +translations in German than English for when Swedish is not available, +set 'LANGUAGE' to 'sv:de' while leaving 'LANG' to 'sv_SE'. + + Special advice for Norwegian users: The language code for Norwegian +bokma*l changed from 'no' to 'nb' recently (in 2003). During the +transition period, while some message catalogs for this language are +installed under 'nb' and some older ones under 'no', it's recommended +for Norwegian users to set 'LANGUAGE' to 'nb:no' so that both newer and +older translations are used. + + In the 'LANGUAGE' environment variable, but not in the 'LANG' +environment variable, 'LL_CC' combinations can be abbreviated as 'LL' to +denote the language's main dialect. For example, 'de' is equivalent to +'de_DE' (German as spoken in Germany), and 'pt' to 'pt_PT' (Portuguese +as spoken in Portugal) in this context. + +1.3 Translating Teams +===================== + +For the Free Translation Project to be a success, we need interested +people who like their own language and write it well, and who are also +able to synergize with other translators speaking the same language. +Each translation team has its own mailing list. The up-to-date list of +teams can be found at the Free Translation Project's homepage, +'http://translationproject.org/', in the "Teams" area. + + If you'd like to volunteer to _work_ at translating messages, you +should become a member of the translating team for your own language. +The subscribing address is _not_ the same as the list itself, it has +'-request' appended. For example, speakers of Swedish can send a +message to 'sv-request@li.org', having this message body: + + subscribe + + Keep in mind that team members are expected to participate _actively_ +in translations, or at solving translational difficulties, rather than +merely lurking around. If your team does not exist yet and you want to +start one, or if you are unsure about what to do or how to get started, +please write to 'coordinator@translationproject.org' to reach the +coordinator for all translator teams. + + The English team is special. It works at improving and uniformizing +the terminology in use. Proven linguistic skills are praised more than +programming skills, here. + +1.4 Available Packages +====================== + +Languages are not equally supported in all packages. The following +matrix shows the current state of internationalization, as of Jun 2014. +The matrix shows, in regard of each package, for which languages PO +files have been submitted to translation coordination, with a +translation percentage of at least 50%. + + Ready PO files af am an ar as ast az be bg bn bn_IN bs ca crh cs + +---------------------------------------------------+ + a2ps | [] [] [] | + aegis | | + anubis | | + aspell | [] [] [] | + bash | [] [] [] | + bfd | | + binutils | [] | + bison | | + bison-runtime | [] | + buzztrax | [] | + ccd2cue | | + ccide | | + cflow | | + clisp | | + coreutils | [] [] | + cpio | | + cppi | | + cpplib | [] | + cryptsetup | [] | + datamash | | + denemo | [] [] | + dfarc | [] | + dialog | [] [] [] | + dico | | + diffutils | [] | + dink | [] | + direvent | | + doodle | [] | + dos2unix | | + dos2unix-man | | + e2fsprogs | [] [] | + enscript | [] | + exif | [] | + fetchmail | [] [] | + findutils | [] | + flex | [] | + freedink | [] [] | + fusionforge | | + gas | | + gawk | [] | + gcal | [] | + gcc | | + gdbm | | + gettext-examples | [] [] [] [] [] | + gettext-runtime | [] [] [] | + gettext-tools | [] [] | + gip | [] [] | + gjay | | + glunarclock | [] [] [] | + gnubiff | [] | + gnubik | [] | + gnucash | () () [] | + gnuchess | | + gnulib | [] | + gnunet | | + gnunet-gtk | | + gold | | + gphoto2 | [] | + gprof | [] | + gpsdrive | | + gramadoir | | + grep | [] [] | + grub | [] | + gsasl | | + gss | | + gst-plugins-bad | [] | + gst-plugins-base | [] [] [] | + gst-plugins-good | [] [] [] | + gst-plugins-ugly | [] [] [] | + gstreamer | [] [] [] [] | + gtick | [] | + gtkam | [] [] | + gtkorphan | [] [] | + gtkspell | [] [] [] [] [] | + guix | | + guix-packages | | + gutenprint | [] | + hello | [] | + help2man | | + help2man-texi | | + hylafax | | + idutils | | + iso_15924 | [] | + iso_3166 | [] [] [] [] [] [] [] [] [] [] | + iso_3166_2 | | + iso_4217 | [] | + iso_639 | [] [] [] [] [] [] [] [] [] | + iso_639_3 | [] [] | + iso_639_5 | | + jwhois | | + kbd | [] | + klavaro | [] [] [] [] [] | + latrine | | + ld | [] | + leafpad | [] [] [] [] | + libc | [] [] [] | + libexif | () | + libextractor | | + libgnutls | [] | + libgpg-error | [] | + libgphoto2 | [] | + libgphoto2_port | [] | + libgsasl | | + libiconv | [] [] | + libidn | [] | + liferea | [] [] [] [] | + lilypond | [] [] | + lordsawar | [] | + lprng | | + lynx | [] [] | + m4 | [] | + mailfromd | | + mailutils | | + make | [] | + man-db | [] [] | + man-db-manpages | | + midi-instruments | [] [] [] | + minicom | [] | + mkisofs | [] | + myserver | [] | + nano | [] [] [] | + opcodes | | + parted | [] | + pies | | + popt | [] | + procps-ng | | + procps-ng-man | | + psmisc | [] | + pspp | [] | + pushover | [] | + pwdutils | | + pyspread | | + radius | [] | + recode | [] [] [] | + recutils | | + rpm | | + rush | | + sarg | | + sed | [] [] [] | + sharutils | [] | + shishi | | + skribilo | | + solfege | [] | + solfege-manual | | + spotmachine | | + sudo | [] [] | + sudoers | [] [] | + sysstat | [] | + tar | [] [] [] | + texinfo | [] [] | + texinfo_document | [] | + tigervnc | [] | + tin | | + tin-man | | + tracgoogleappsa... | | + trader | | + util-linux | [] | + ve | | + vice | | + vmm | | + vorbis-tools | [] | + wastesedge | | + wcd | | + wcd-man | | + wdiff | [] [] | + wget | [] [] | + wyslij-po | | + xboard | | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] | + +---------------------------------------------------+ + af am an ar as ast az be bg bn bn_IN bs ca crh cs + 4 0 2 4 3 11 0 8 24 3 3 1 55 4 76 + + da de el en en_GB en_ZA eo es et eu fa fi fr + +--------------------------------------------------+ + a2ps | [] [] [] [] [] [] [] [] [] | + aegis | [] [] [] [] | + anubis | [] [] [] [] [] | + aspell | [] [] [] [] [] [] [] | + bash | [] [] [] [] [] | + bfd | [] [] [] [] | + binutils | [] [] [] | + bison | [] [] [] [] [] [] [] [] | + bison-runtime | [] [] [] [] [] [] [] [] | + buzztrax | [] [] [] [] | + ccd2cue | [] [] [] | + ccide | [] [] [] [] [] [] | + cflow | [] [] [] [] [] | + clisp | [] [] [] [] [] | + coreutils | [] [] [] [] [] | + cpio | [] [] [] [] [] | + cppi | [] [] [] [] [] | + cpplib | [] [] [] [] [] [] | + cryptsetup | [] [] [] [] [] | + datamash | [] [] [] [] | + denemo | | + dfarc | [] [] [] [] [] [] | + dialog | [] [] [] [] [] [] [] [] [] | + dico | [] [] [] [] | + diffutils | [] [] [] [] [] [] | + dink | [] [] [] [] [] [] | + direvent | [] [] [] [] | + doodle | [] [] [] [] | + dos2unix | [] [] [] [] [] | + dos2unix-man | [] [] [] | + e2fsprogs | [] [] [] [] [] | + enscript | [] [] [] [] [] [] | + exif | [] [] [] [] [] [] | + fetchmail | [] () [] [] [] [] [] | + findutils | [] [] [] [] [] [] [] [] | + flex | [] [] [] [] [] [] | + freedink | [] [] [] [] [] [] [] [] | + fusionforge | [] [] [] | + gas | [] [] [] | + gawk | [] [] [] [] [] | + gcal | [] [] [] [] | + gcc | [] [] | + gdbm | [] [] [] [] [] | + gettext-examples | [] [] [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] [] | + gettext-tools | [] [] [] [] [] | + gip | [] [] [] [] [] [] [] | + gjay | [] [] [] [] | + glunarclock | [] [] [] [] [] | + gnubiff | () [] [] () | + gnubik | [] [] [] [] [] | + gnucash | [] () () () () () () | + gnuchess | [] [] [] [] | + gnulib | [] [] [] [] [] [] [] | + gnunet | [] | + gnunet-gtk | [] | + gold | [] [] [] | + gphoto2 | [] () [] [] | + gprof | [] [] [] [] [] [] | + gpsdrive | [] [] [] [] | + gramadoir | [] [] [] [] [] | + grep | [] [] [] [] [] [] [] | + grub | [] [] [] [] [] | + gsasl | [] [] [] [] [] | + gss | [] [] [] [] [] | + gst-plugins-bad | [] [] | + gst-plugins-base | [] [] [] [] [] [] | + gst-plugins-good | [] [] [] [] [] [] [] | + gst-plugins-ugly | [] [] [] [] [] [] [] [] | + gstreamer | [] [] [] [] [] [] [] | + gtick | [] () [] [] [] | + gtkam | [] () [] [] [] [] | + gtkorphan | [] [] [] [] [] | + gtkspell | [] [] [] [] [] [] [] [] | + guix | [] [] [] | + guix-packages | | + gutenprint | [] [] [] [] | + hello | [] [] [] [] [] [] [] [] | + help2man | [] [] [] [] [] [] [] | + help2man-texi | [] [] [] | + hylafax | [] [] | + idutils | [] [] [] [] [] | + iso_15924 | [] () [] [] () [] () | + iso_3166 | [] () [] [] [] [] () [] () | + iso_3166_2 | [] () () () | + iso_4217 | [] () [] [] [] () [] () | + iso_639 | [] () [] [] () [] () | + iso_639_3 | () () () | + iso_639_5 | () () () | + jwhois | [] [] [] [] [] | + kbd | [] [] [] [] [] [] | + klavaro | [] [] [] [] [] [] [] | + latrine | [] () [] [] | + ld | [] [] [] [] | + leafpad | [] [] [] [] [] [] [] [] | + libc | [] [] [] [] [] | + libexif | [] [] () [] [] | + libextractor | [] | + libgnutls | [] [] [] [] | + libgpg-error | [] [] [] | + libgphoto2 | [] () [] | + libgphoto2_port | [] () [] [] [] [] | + libgsasl | [] [] [] [] [] | + libiconv | [] [] [] [] [] [] [] | + libidn | [] [] [] [] [] | + liferea | [] () [] [] [] [] [] | + lilypond | [] [] [] [] [] [] | + lordsawar | [] [] | + lprng | | + lynx | [] [] [] [] [] [] | + m4 | [] [] [] [] [] [] | + mailfromd | [] | + mailutils | [] [] [] [] | + make | [] [] [] [] [] | + man-db | [] [] [] [] | + man-db-manpages | [] [] | + midi-instruments | [] [] [] [] [] [] [] [] [] | + minicom | [] [] [] [] [] | + mkisofs | [] [] [] | + myserver | [] [] [] [] | + nano | [] [] [] [] [] [] [] | + opcodes | [] [] [] [] [] | + parted | [] [] [] | + pies | [] | + popt | [] [] [] [] [] [] | + procps-ng | [] [] | + procps-ng-man | [] [] | + psmisc | [] [] [] [] [] [] [] | + pspp | [] [] [] | + pushover | () [] [] [] | + pwdutils | [] [] [] | + pyspread | [] [] | + radius | [] [] | + recode | [] [] [] [] [] [] [] | + recutils | [] [] [] [] | + rpm | [] [] [] [] [] | + rush | [] [] [] | + sarg | [] [] | + sed | [] [] [] [] [] [] [] [] | + sharutils | [] [] [] [] | + shishi | [] [] [] | + skribilo | [] [] | + solfege | [] [] [] [] [] [] [] [] | + solfege-manual | [] [] [] [] [] | + spotmachine | [] [] [] [] | + sudo | [] [] [] [] [] [] | + sudoers | [] [] [] [] [] [] | + sysstat | [] [] [] [] [] [] | + tar | [] [] [] [] [] [] [] | + texinfo | [] [] [] [] [] | + texinfo_document | [] [] [] [] | + tigervnc | [] [] [] [] [] [] | + tin | [] [] [] [] | + tin-man | [] | + tracgoogleappsa... | [] [] [] [] [] | + trader | [] [] [] [] [] [] | + util-linux | [] [] [] [] | + ve | [] [] [] [] [] | + vice | () () () | + vmm | [] [] | + vorbis-tools | [] [] [] [] | + wastesedge | [] () | + wcd | [] [] [] [] | + wcd-man | [] | + wdiff | [] [] [] [] [] [] [] | + wget | [] [] [] [] [] [] | + wyslij-po | [] [] [] [] | + xboard | [] [] [] [] | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] [] [] [] [] | + +--------------------------------------------------+ + da de el en en_GB en_ZA eo es et eu fa fi fr + 123 134 32 1 6 0 97 97 23 14 4 106 139 + + ga gd gl gu he hi hr hu hy ia id is it ja ka kk + +-------------------------------------------------+ + a2ps | [] [] [] [] | + aegis | [] | + anubis | [] [] [] [] | + aspell | [] [] [] [] [] | + bash | [] [] [] [] | + bfd | [] [] | + binutils | [] [] [] | + bison | [] | + bison-runtime | [] [] [] [] [] [] [] [] | + buzztrax | | + ccd2cue | [] | + ccide | [] [] | + cflow | [] [] [] | + clisp | | + coreutils | [] [] [] | + cpio | [] [] [] [] [] [] | + cppi | [] [] [] [] [] | + cpplib | [] [] | + cryptsetup | [] | + datamash | | + denemo | [] | + dfarc | [] [] [] | + dialog | [] [] [] [] [] [] [] [] [] [] | + dico | | + diffutils | [] [] [] [] | + dink | [] | + direvent | [] | + doodle | [] [] | + dos2unix | [] [] | + dos2unix-man | | + e2fsprogs | [] | + enscript | [] [] [] | + exif | [] [] [] [] [] [] | + fetchmail | [] [] [] | + findutils | [] [] [] [] [] [] [] | + flex | [] | + freedink | [] [] [] [] | + fusionforge | | + gas | [] | + gawk | [] () [] | + gcal | | + gcc | | + gdbm | | + gettext-examples | [] [] [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] [] [] | + gettext-tools | [] [] [] | + gip | [] [] [] [] [] [] | + gjay | [] | + glunarclock | [] [] [] [] [] [] | + gnubiff | [] [] () | + gnubik | [] [] [] | + gnucash | () () () () () [] | + gnuchess | | + gnulib | [] [] [] [] [] | + gnunet | | + gnunet-gtk | | + gold | [] [] | + gphoto2 | [] [] [] [] | + gprof | [] [] [] [] | + gpsdrive | [] [] [] [] | + gramadoir | [] [] [] | + grep | [] [] [] [] [] [] [] | + grub | [] [] [] | + gsasl | [] [] [] [] [] | + gss | [] [] [] [] [] | + gst-plugins-bad | [] | + gst-plugins-base | [] [] [] [] | + gst-plugins-good | [] [] [] [] [] [] | + gst-plugins-ugly | [] [] [] [] [] [] | + gstreamer | [] [] [] [] [] | + gtick | [] [] [] [] [] | + gtkam | [] [] [] [] [] | + gtkorphan | [] [] [] [] | + gtkspell | [] [] [] [] [] [] [] [] [] [] | + guix | [] | + guix-packages | | + gutenprint | [] [] [] | + hello | [] [] [] [] [] | + help2man | [] [] [] | + help2man-texi | | + hylafax | [] | + idutils | [] [] | + iso_15924 | [] [] [] [] [] [] | + iso_3166 | [] [] [] [] [] [] [] [] [] [] [] [] [] | + iso_3166_2 | [] [] | + iso_4217 | [] [] [] [] [] [] | + iso_639 | [] [] [] [] [] [] [] [] [] | + iso_639_3 | [] [] | + iso_639_5 | | + jwhois | [] [] [] [] | + kbd | [] [] [] | + klavaro | [] [] [] [] | + latrine | [] | + ld | [] [] [] [] | + leafpad | [] [] [] [] [] [] [] () | + libc | [] [] [] [] [] | + libexif | [] | + libextractor | | + libgnutls | [] | + libgpg-error | [] [] [] | + libgphoto2 | [] [] | + libgphoto2_port | [] [] | + libgsasl | [] [] [] [] | + libiconv | [] [] [] [] [] [] [] | + libidn | [] [] [] [] | + liferea | [] [] [] [] [] | + lilypond | [] | + lordsawar | | + lprng | [] | + lynx | [] [] [] [] | + m4 | [] [] [] [] [] | + mailfromd | | + mailutils | | + make | [] [] [] [] | + man-db | [] [] | + man-db-manpages | [] [] | + midi-instruments | [] [] [] [] [] [] [] [] [] | + minicom | [] [] [] | + mkisofs | [] [] | + myserver | [] | + nano | [] [] [] [] [] | + opcodes | [] [] [] | + parted | [] [] [] [] | + pies | | + popt | [] [] [] [] [] [] [] [] [] [] | + procps-ng | | + procps-ng-man | | + psmisc | [] [] [] [] | + pspp | [] [] | + pushover | [] | + pwdutils | [] | + pyspread | | + radius | [] | + recode | [] [] [] [] [] [] [] | + recutils | | + rpm | [] | + rush | [] | + sarg | | + sed | [] [] [] [] [] [] [] | + sharutils | | + shishi | | + skribilo | [] | + solfege | [] [] | + solfege-manual | | + spotmachine | | + sudo | [] [] [] [] | + sudoers | [] [] [] | + sysstat | [] [] [] | + tar | [] [] [] [] [] [] | + texinfo | [] [] [] | + texinfo_document | [] [] | + tigervnc | | + tin | | + tin-man | | + tracgoogleappsa... | [] [] [] [] | + trader | [] [] | + util-linux | [] | + ve | [] | + vice | () () | + vmm | | + vorbis-tools | [] [] | + wastesedge | () | + wcd | | + wcd-man | | + wdiff | [] [] [] | + wget | [] [] [] [] | + wyslij-po | [] [] [] | + xboard | | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] [] [] | + +-------------------------------------------------+ + ga gd gl gu he hi hr hu hy ia id is it ja ka kk + 36 2 49 4 8 2 54 75 2 6 84 11 89 60 0 3 + + kn ko ku ky lg lt lv mk ml mn mr ms mt nb ne nl + +--------------------------------------------------+ + a2ps | [] [] | + aegis | [] | + anubis | [] [] [] | + aspell | [] [] | + bash | [] [] | + bfd | | + binutils | | + bison | [] | + bison-runtime | [] [] [] [] [] [] | + buzztrax | | + ccd2cue | | + ccide | [] [] | + cflow | [] | + clisp | [] | + coreutils | [] [] | + cpio | [] | + cppi | | + cpplib | [] | + cryptsetup | [] | + datamash | [] [] | + denemo | | + dfarc | [] [] | + dialog | [] [] [] [] [] [] | + dico | | + diffutils | [] [] [] | + dink | [] | + direvent | [] | + doodle | [] | + dos2unix | [] [] | + dos2unix-man | [] | + e2fsprogs | [] | + enscript | [] | + exif | [] [] | + fetchmail | [] | + findutils | [] [] | + flex | [] | + freedink | [] [] | + fusionforge | | + gas | | + gawk | [] | + gcal | | + gcc | | + gdbm | | + gettext-examples | [] [] [] [] [] [] | + gettext-runtime | [] [] | + gettext-tools | [] | + gip | [] [] [] | + gjay | | + glunarclock | [] [] | + gnubiff | [] | + gnubik | [] [] | + gnucash | () () () () () () () [] | + gnuchess | [] [] | + gnulib | [] | + gnunet | | + gnunet-gtk | | + gold | | + gphoto2 | [] | + gprof | [] [] | + gpsdrive | [] | + gramadoir | [] | + grep | [] [] | + grub | [] [] [] | + gsasl | [] | + gss | | + gst-plugins-bad | [] | + gst-plugins-base | [] [] [] | + gst-plugins-good | [] [] [] [] | + gst-plugins-ugly | [] [] [] [] [] | + gstreamer | [] [] | + gtick | [] | + gtkam | [] [] | + gtkorphan | [] [] | + gtkspell | [] [] [] [] [] [] [] | + guix | | + guix-packages | | + gutenprint | [] | + hello | [] [] [] | + help2man | [] | + help2man-texi | | + hylafax | [] | + idutils | [] | + iso_15924 | () [] [] | + iso_3166 | [] [] [] () [] [] [] [] [] [] | + iso_3166_2 | () [] | + iso_4217 | () [] [] [] | + iso_639 | [] [] () [] [] [] [] | + iso_639_3 | [] () [] | + iso_639_5 | () | + jwhois | [] [] | + kbd | [] | + klavaro | [] [] | + latrine | | + ld | | + leafpad | [] [] [] [] [] | + libc | [] [] | + libexif | [] | + libextractor | [] | + libgnutls | [] [] | + libgpg-error | [] | + libgphoto2 | [] | + libgphoto2_port | [] | + libgsasl | [] | + libiconv | [] [] | + libidn | [] | + liferea | [] [] [] | + lilypond | | + lordsawar | | + lprng | | + lynx | [] | + m4 | [] | + mailfromd | | + mailutils | | + make | [] [] | + man-db | [] | + man-db-manpages | [] | + midi-instruments | [] [] [] [] [] [] [] | + minicom | [] | + mkisofs | [] | + myserver | | + nano | [] [] [] | + opcodes | [] | + parted | [] | + pies | | + popt | [] [] [] [] [] | + procps-ng | | + procps-ng-man | | + psmisc | [] | + pspp | [] [] | + pushover | | + pwdutils | [] | + pyspread | | + radius | [] | + recode | [] [] | + recutils | [] | + rpm | [] | + rush | [] | + sarg | | + sed | [] [] | + sharutils | [] | + shishi | | + skribilo | | + solfege | [] [] | + solfege-manual | [] | + spotmachine | [] | + sudo | [] [] | + sudoers | [] [] | + sysstat | [] [] | + tar | [] [] [] | + texinfo | [] | + texinfo_document | [] | + tigervnc | [] | + tin | | + tin-man | | + tracgoogleappsa... | [] [] [] | + trader | [] | + util-linux | [] | + ve | [] | + vice | [] | + vmm | [] | + vorbis-tools | [] | + wastesedge | [] | + wcd | [] | + wcd-man | [] | + wdiff | [] | + wget | [] [] | + wyslij-po | [] | + xboard | [] | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] | + +--------------------------------------------------+ + kn ko ku ky lg lt lv mk ml mn mr ms mt nb ne nl + 5 11 4 6 0 13 24 3 3 3 4 12 2 40 1 126 + + nn or os pa pl ps pt pt_BR ro ru rw sk sl sq sr + +--------------------------------------------------+ + a2ps | [] [] [] [] [] [] [] | + aegis | [] [] | + anubis | [] [] [] | + aspell | [] [] [] [] [] [] [] | + bash | [] [] [] [] [] | + bfd | [] | + binutils | [] [] | + bison | [] [] [] | + bison-runtime | [] [] [] [] [] [] [] [] | + buzztrax | | + ccd2cue | [] | + ccide | [] [] [] | + cflow | [] [] | + clisp | [] | + coreutils | [] [] [] [] | + cpio | [] [] [] | + cppi | [] [] [] | + cpplib | [] [] [] | + cryptsetup | [] [] | + datamash | [] [] | + denemo | | + dfarc | [] [] [] | + dialog | [] [] [] [] [] [] [] | + dico | [] | + diffutils | [] [] | + dink | | + direvent | [] [] | + doodle | [] [] | + dos2unix | [] [] [] [] | + dos2unix-man | [] [] | + e2fsprogs | [] | + enscript | [] [] [] [] [] [] | + exif | [] [] [] [] [] [] | + fetchmail | [] [] [] | + findutils | [] [] [] [] [] | + flex | [] [] [] [] [] | + freedink | [] [] [] [] [] | + fusionforge | | + gas | | + gawk | [] | + gcal | | + gcc | | + gdbm | [] [] [] | + gettext-examples | [] [] [] [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] [] [] [] [] | + gettext-tools | [] [] [] [] [] [] [] | + gip | [] [] [] [] [] | + gjay | [] | + glunarclock | [] [] [] [] [] [] | + gnubiff | [] | + gnubik | [] [] [] [] | + gnucash | () () () () [] | + gnuchess | [] [] | + gnulib | [] [] [] [] [] | + gnunet | | + gnunet-gtk | | + gold | | + gphoto2 | [] [] [] [] [] | + gprof | [] [] [] [] | + gpsdrive | [] | + gramadoir | [] [] | + grep | [] [] [] [] [] [] | + grub | [] [] [] [] [] | + gsasl | [] [] [] | + gss | [] [] [] [] | + gst-plugins-bad | [] [] [] [] | + gst-plugins-base | [] [] [] [] [] [] | + gst-plugins-good | [] [] [] [] [] [] [] | + gst-plugins-ugly | [] [] [] [] [] [] [] | + gstreamer | [] [] [] [] [] [] [] | + gtick | [] [] [] [] [] | + gtkam | [] [] [] [] [] [] | + gtkorphan | [] [] [] [] | + gtkspell | [] [] [] [] [] [] [] [] [] | + guix | | + guix-packages | | + gutenprint | [] | + hello | [] [] [] [] [] [] | + help2man | [] [] [] [] | + help2man-texi | [] | + hylafax | | + idutils | [] [] [] | + iso_15924 | [] () [] [] [] [] | + iso_3166 | [] [] [] [] () [] [] [] [] [] [] [] [] | + iso_3166_2 | [] () [] | + iso_4217 | [] [] () [] [] [] [] [] | + iso_639 | [] [] [] () [] [] [] [] [] [] | + iso_639_3 | [] () | + iso_639_5 | () [] | + jwhois | [] [] [] [] | + kbd | [] [] | + klavaro | [] [] [] [] [] | + latrine | [] | + ld | | + leafpad | [] [] [] [] [] [] [] [] [] | + libc | [] [] [] | + libexif | [] () [] | + libextractor | [] | + libgnutls | [] | + libgpg-error | [] [] [] | + libgphoto2 | [] | + libgphoto2_port | [] [] [] [] [] | + libgsasl | [] [] [] [] | + libiconv | [] [] [] [] [] | + libidn | [] [] [] | + liferea | [] [] [] [] () [] [] | + lilypond | | + lordsawar | | + lprng | [] | + lynx | [] [] | + m4 | [] [] [] [] [] | + mailfromd | [] | + mailutils | [] | + make | [] [] [] | + man-db | [] [] [] | + man-db-manpages | [] [] [] | + midi-instruments | [] [] [] [] [] [] [] [] | + minicom | [] [] [] [] | + mkisofs | [] [] [] | + myserver | [] [] | + nano | [] [] [] [] [] [] | + opcodes | | + parted | [] [] [] [] [] [] | + pies | [] | + popt | [] [] [] [] [] [] | + procps-ng | [] | + procps-ng-man | [] | + psmisc | [] [] [] [] | + pspp | [] [] | + pushover | | + pwdutils | [] | + pyspread | [] [] | + radius | [] [] | + recode | [] [] [] [] [] [] [] [] | + recutils | [] | + rpm | [] | + rush | [] [] [] | + sarg | [] [] | + sed | [] [] [] [] [] [] [] [] | + sharutils | [] [] [] | + shishi | [] [] | + skribilo | | + solfege | [] [] [] | + solfege-manual | [] [] | + spotmachine | [] [] | + sudo | [] [] [] [] [] | + sudoers | [] [] [] [] | + sysstat | [] [] [] [] [] | + tar | [] [] [] [] [] | + texinfo | [] [] [] | + texinfo_document | [] [] | + tigervnc | | + tin | [] | + tin-man | | + tracgoogleappsa... | [] [] [] [] | + trader | [] | + util-linux | [] [] | + ve | [] [] [] | + vice | | + vmm | | + vorbis-tools | [] [] [] | + wastesedge | | + wcd | | + wcd-man | | + wdiff | [] [] [] [] [] | + wget | [] [] [] [] [] | + wyslij-po | [] [] [] [] | + xboard | [] [] | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] [] | + +--------------------------------------------------+ + nn or os pa pl ps pt pt_BR ro ru rw sk sl sq sr + 7 3 1 6 117 1 12 84 33 82 3 37 45 7 98 + + sv sw ta te tg th tr uk ur vi wa wo zh_CN zh_HK + +---------------------------------------------------+ + a2ps | [] [] [] [] [] | + aegis | [] | + anubis | [] [] [] [] | + aspell | [] [] [] [] | + bash | [] [] [] [] [] | + bfd | [] [] | + binutils | [] [] [] | + bison | [] [] [] [] | + bison-runtime | [] [] [] [] [] [] | + buzztrax | [] [] [] | + ccd2cue | [] [] | + ccide | [] [] [] | + cflow | [] [] [] [] | + clisp | | + coreutils | [] [] [] [] | + cpio | [] [] [] [] [] | + cppi | [] [] [] | + cpplib | [] [] [] [] [] | + cryptsetup | [] [] [] | + datamash | [] [] [] | + denemo | | + dfarc | [] | + dialog | [] [] [] [] [] [] | + dico | [] | + diffutils | [] [] [] [] [] | + dink | | + direvent | [] [] | + doodle | [] [] | + dos2unix | [] [] [] | + dos2unix-man | [] [] | + e2fsprogs | [] [] [] [] | + enscript | [] [] [] [] | + exif | [] [] [] [] [] | + fetchmail | [] [] [] [] | + findutils | [] [] [] [] [] | + flex | [] [] [] | + freedink | [] [] | + fusionforge | | + gas | [] | + gawk | [] [] | + gcal | [] [] | + gcc | [] [] | + gdbm | [] [] | + gettext-examples | [] [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] [] | + gettext-tools | [] [] [] [] [] | + gip | [] [] [] [] | + gjay | [] [] | + glunarclock | [] [] [] [] | + gnubiff | [] [] | + gnubik | [] [] [] | + gnucash | () () () () [] | + gnuchess | [] [] | + gnulib | [] [] [] [] | + gnunet | | + gnunet-gtk | | + gold | [] [] | + gphoto2 | [] [] [] [] | + gprof | [] [] [] [] | + gpsdrive | [] [] [] | + gramadoir | [] [] [] | + grep | [] [] [] [] [] | + grub | [] [] [] [] | + gsasl | [] [] [] [] | + gss | [] [] [] | + gst-plugins-bad | [] [] [] [] | + gst-plugins-base | [] [] [] [] [] | + gst-plugins-good | [] [] [] [] [] | + gst-plugins-ugly | [] [] [] [] [] | + gstreamer | [] [] [] [] [] | + gtick | [] [] [] | + gtkam | [] [] [] [] | + gtkorphan | [] [] [] | + gtkspell | [] [] [] [] [] [] [] [] | + guix | [] | + guix-packages | | + gutenprint | [] [] [] | + hello | [] [] [] [] [] | + help2man | [] [] [] | + help2man-texi | [] | + hylafax | [] | + idutils | [] [] [] | + iso_15924 | [] () [] [] () [] | + iso_3166 | [] [] () [] [] () [] [] [] | + iso_3166_2 | () [] [] () [] | + iso_4217 | [] () [] [] () [] [] | + iso_639 | [] [] [] () [] [] () [] [] [] | + iso_639_3 | [] () [] [] () | + iso_639_5 | () [] () | + jwhois | [] [] [] [] | + kbd | [] [] [] | + klavaro | [] [] [] [] [] [] | + latrine | [] [] | + ld | [] [] [] [] [] | + leafpad | [] [] [] [] [] [] | + libc | [] [] [] [] [] | + libexif | [] () | + libextractor | [] [] | + libgnutls | [] [] [] [] | + libgpg-error | [] [] [] [] | + libgphoto2 | [] [] | + libgphoto2_port | [] [] [] [] | + libgsasl | [] [] [] [] | + libiconv | [] [] [] [] [] | + libidn | () [] [] [] | + liferea | [] [] [] [] [] | + lilypond | [] | + lordsawar | | + lprng | [] | + lynx | [] [] [] [] | + m4 | [] [] [] | + mailfromd | [] [] | + mailutils | [] | + make | [] [] [] | + man-db | [] [] | + man-db-manpages | [] | + midi-instruments | [] [] [] [] [] [] | + minicom | [] [] | + mkisofs | [] [] [] | + myserver | [] | + nano | [] [] [] [] | + opcodes | [] [] | + parted | [] [] [] [] [] | + pies | [] [] | + popt | [] [] [] [] [] [] [] | + procps-ng | [] [] | + procps-ng-man | [] | + psmisc | [] [] [] | + pspp | [] [] [] | + pushover | [] | + pwdutils | [] [] | + pyspread | [] | + radius | [] [] | + recode | [] [] [] [] | + recutils | [] [] [] | + rpm | [] [] [] [] | + rush | [] [] | + sarg | | + sed | [] [] [] [] [] | + sharutils | [] [] [] | + shishi | [] | + skribilo | | + solfege | [] [] [] | + solfege-manual | [] | + spotmachine | [] [] | + sudo | [] [] [] [] | + sudoers | [] [] [] | + sysstat | [] [] [] [] | + tar | [] [] [] [] [] | + texinfo | [] [] [] | + texinfo_document | [] | + tigervnc | [] [] | + tin | [] | + tin-man | | + tracgoogleappsa... | [] [] [] [] [] | + trader | [] | + util-linux | [] [] [] | + ve | [] [] [] [] | + vice | () () | + vmm | | + vorbis-tools | [] [] | + wastesedge | | + wcd | [] [] | + wcd-man | [] | + wdiff | [] [] [] | + wget | [] [] [] | + wyslij-po | [] [] | + xboard | [] | + xdg-user-dirs | [] [] [] [] [] [] [] [] [] | + xkeyboard-config | [] [] [] [] | + +---------------------------------------------------+ + sv sw ta te tg th tr uk ur vi wa wo zh_CN zh_HK + 87 1 4 3 0 14 52 114 1 130 7 1 88 7 + + zh_TW + +-------+ + a2ps | | 30 + aegis | | 9 + anubis | | 19 + aspell | | 28 + bash | [] | 25 + bfd | | 9 + binutils | | 12 + bison | [] | 18 + bison-runtime | [] | 38 + buzztrax | | 8 + ccd2cue | | 7 + ccide | | 16 + cflow | | 15 + clisp | | 10 + coreutils | | 20 + cpio | [] | 21 + cppi | | 16 + cpplib | [] | 19 + cryptsetup | | 13 + datamash | | 11 + denemo | | 3 + dfarc | | 16 + dialog | [] | 42 + dico | | 6 + diffutils | | 21 + dink | | 9 + direvent | | 10 + doodle | | 12 + dos2unix | [] | 17 + dos2unix-man | | 8 + e2fsprogs | | 14 + enscript | | 21 + exif | | 26 + fetchmail | | 19 + findutils | | 28 + flex | [] | 18 + freedink | | 23 + fusionforge | | 3 + gas | | 5 + gawk | | 12 + gcal | | 7 + gcc | | 4 + gdbm | | 10 + gettext-examples | [] | 40 + gettext-runtime | [] | 34 + gettext-tools | [] | 24 + gip | [] | 28 + gjay | | 8 + glunarclock | [] | 27 + gnubiff | | 9 + gnubik | | 18 + gnucash | () | 6 + gnuchess | | 10 + gnulib | | 23 + gnunet | | 1 + gnunet-gtk | | 1 + gold | | 7 + gphoto2 | [] | 19 + gprof | | 21 + gpsdrive | | 13 + gramadoir | | 14 + grep | [] | 30 + grub | | 21 + gsasl | [] | 19 + gss | | 17 + gst-plugins-bad | | 13 + gst-plugins-base | | 27 + gst-plugins-good | | 32 + gst-plugins-ugly | | 34 + gstreamer | [] | 31 + gtick | | 19 + gtkam | | 24 + gtkorphan | | 20 + gtkspell | [] | 48 + guix | | 5 + guix-packages | | 0 + gutenprint | | 13 + hello | [] | 29 + help2man | | 18 + help2man-texi | | 5 + hylafax | | 5 + idutils | | 14 + iso_15924 | [] | 23 + iso_3166 | [] | 58 + iso_3166_2 | | 9 + iso_4217 | [] | 28 + iso_639 | [] | 46 + iso_639_3 | | 10 + iso_639_5 | | 2 + jwhois | [] | 20 + kbd | | 16 + klavaro | | 29 + latrine | | 7 + ld | [] | 15 + leafpad | [] | 40 + libc | [] | 24 + libexif | | 9 + libextractor | | 5 + libgnutls | | 13 + libgpg-error | | 15 + libgphoto2 | | 9 + libgphoto2_port | [] | 19 + libgsasl | | 18 + libiconv | [] | 29 + libidn | | 17 + liferea | | 29 + lilypond | | 10 + lordsawar | | 3 + lprng | | 3 + lynx | | 19 + m4 | [] | 22 + mailfromd | | 4 + mailutils | | 6 + make | | 18 + man-db | | 14 + man-db-manpages | | 9 + midi-instruments | [] | 43 + minicom | [] | 17 + mkisofs | | 13 + myserver | | 9 + nano | [] | 29 + opcodes | | 11 + parted | [] | 21 + pies | | 4 + popt | [] | 36 + procps-ng | | 5 + procps-ng-man | | 4 + psmisc | [] | 21 + pspp | | 13 + pushover | | 6 + pwdutils | | 8 + pyspread | | 5 + radius | | 9 + recode | | 31 + recutils | | 9 + rpm | [] | 13 + rush | | 10 + sarg | | 4 + sed | [] | 34 + sharutils | | 12 + shishi | | 6 + skribilo | | 3 + solfege | | 19 + solfege-manual | | 9 + spotmachine | | 9 + sudo | | 23 + sudoers | | 20 + sysstat | | 21 + tar | [] | 30 + texinfo | | 17 + texinfo_document | | 11 + tigervnc | | 10 + tin | [] | 7 + tin-man | | 1 + tracgoogleappsa... | [] | 22 + trader | | 11 + util-linux | | 12 + ve | | 14 + vice | | 1 + vmm | | 3 + vorbis-tools | | 13 + wastesedge | | 2 + wcd | | 7 + wcd-man | | 3 + wdiff | [] | 22 + wget | | 22 + wyslij-po | | 14 + xboard | | 8 + xdg-user-dirs | [] | 68 + xkeyboard-config | [] | 27 + +-------+ + 90 teams zh_TW + 170 domains 44 2805 + + Some counters in the preceding matrix are higher than the number of +visible blocks let us expect. This is because a few extra PO files are +used for implementing regional variants of languages, or language +dialects. + + For a PO file in the matrix above to be effective, the package to +which it applies should also have been internationalized and distributed +as such by its maintainer. There might be an observable lag between the +mere existence a PO file and its wide availability in a distribution. + + If Jun 2014 seems to be old, you may fetch a more recent copy of this +'ABOUT-NLS' file on most GNU archive sites. The most up-to-date matrix +with full percentage details can be found at +'http://translationproject.org/extra/matrix.html'. + +1.5 Using 'gettext' in new packages +=================================== + +If you are writing a freely available program and want to +internationalize it you are welcome to use GNU 'gettext' in your +package. Of course you have to respect the GNU Lesser General Public +License which covers the use of the GNU 'gettext' library. This means +in particular that even non-free programs can use 'libintl' as a shared +library, whereas only free software can use 'libintl' as a static +library or use modified versions of 'libintl'. + + Once the sources are changed appropriately and the setup can handle +the use of 'gettext' the only thing missing are the translations. The +Free Translation Project is also available for packages which are not +developed inside the GNU project. Therefore the information given above +applies also for every other Free Software Project. Contact 'coordinator@translationproject.org' +to make the '.pot' files available to the translation teams. diff -Nru sudo-1.8.12/aclocal.m4 sudo-1.8.16/aclocal.m4 --- sudo-1.8.12/aclocal.m4 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/aclocal.m4 2016-01-22 23:07:35.000000000 +0000 @@ -13,7 +13,7 @@ m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) # longlong.m4 serial 17 -dnl Copyright (C) 1999-2007, 2009-2014 Free Software Foundation, Inc. +dnl Copyright (C) 1999-2007, 2009-2015 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff -Nru sudo-1.8.12/ChangeLog sudo-1.8.16/ChangeLog --- sudo-1.8.12/ChangeLog 2015-02-09 18:55:47.000000000 +0000 +++ sudo-1.8.16/ChangeLog 2016-03-17 16:14:24.000000000 +0000 @@ -1,6 +1,3189 @@ +2016-03-16 Todd C. Miller + + * plugins/sudoers/policy.c: + hook_version and hook_type are unsigned so use 0, not -1 in the + final (empty) entry. Quiets a warning on Solaris Studio 12.2. + [4947de8e35b7] + +2016-03-09 Todd C. Miller + + * NEWS, config.h.in, configure, configure.ac, + plugins/sudoers/auth/pam.c: + Work around an ambiguity in the PAM spec with respect to the + conversation function. It is not clear whether the "struct + pam_message **msg" is an array of pointers or a pointer to an array. + Linux-PAM and OpenPAM use an array of pointers while Solaris/HP- + UX/AIX uses a pointer to an array. Bug #726. + [d2b926e2f7d6] + +2016-03-08 Todd C. Miller + + * plugins/sudoers/po/de.mo, plugins/sudoers/po/de.po, + plugins/sudoers/po/eo.mo, plugins/sudoers/po/eo.po, + plugins/sudoers/po/it.mo, plugins/sudoers/po/it.po, + plugins/sudoers/po/ja.mo, plugins/sudoers/po/ja.po, + plugins/sudoers/po/sr.mo, plugins/sudoers/po/sr.po, po/eo.mo, + po/eo.po, po/it.mo, po/it.po, po/ja.mo, po/ja.po, po/ru.mo, + po/ru.po, po/sr.mo, po/sr.po: + sync with translationproject.org + [271c6738213d] + +2016-02-27 Todd C. Miller + + * NEWS: + Bug #738 + [9e7974480cdc] + +2016-02-26 Todd C. Miller + + * plugins/sudoers/po/nb.mo, plugins/sudoers/po/nb.po, po/nb.mo, + po/nb.po: + sync with translationproject.org + [6aa32f6e5240] + + * lib/util/regress/fnmatch/fnm_test.in: + Better test for negated character classes. + [635e3c17bca1] + + * lib/util/regress/fnmatch/fnm_test.in: + Add test for negated character class + [0d813e098864] + + * plugins/sudoers/po/cs.mo, plugins/sudoers/po/cs.po, + plugins/sudoers/po/pl.mo, plugins/sudoers/po/pl.po, + plugins/sudoers/po/pt_BR.mo, plugins/sudoers/po/pt_BR.po, + plugins/sudoers/po/uk.mo, plugins/sudoers/po/uk.po, + plugins/sudoers/po/vi.mo, plugins/sudoers/po/vi.po, po/cs.mo, + po/cs.po, po/de.mo, po/de.po, po/fr.mo, po/fr.po, po/pl.mo, + po/pl.po, po/pt_BR.mo, po/pt_BR.po, po/uk.mo, po/uk.po, po/vi.mo, + po/vi.po, po/zh_CN.mo, po/zh_CN.po: + sync with translationproject.org + [9398ffdc7719] + + * NEWS: + sync + [a27a7d40491e] + + * lib/util/fnmatch.c: + Fix negation of character classes. + [aed07c013a41] + + * plugins/sudoers/ldap.c, plugins/sudoers/sssd.c: + Fix the check for whether a user is allowed to lists another user's + privileges. The "matched" variable is not boolean, it can also have + the value UNSPEC so we need to check explicitly for true. Bug #738 + [e8ed706fda03] + + * plugins/sudoers/auth/pam.c: + Log the number of PAM messages in the conversation function at debug + level. + [3f16eea5875f] + +2016-02-24 Todd C. Miller + + * configure, configure.ac: + Don't check for posix_spawn() or posix_spawnp() if we were unable to + find spawn.h. This should only be a problem on systems with broken + headers. Bug #730 + [5e5b0646dca4] + +2016-02-22 Todd C. Miller + + * NEWS: + update for 1.8.16 + [bad5e6534f39] + + * doc/CONTRIBUTORS, plugins/sudoers/sudoers2ldif: + Fix documented bug with duplicate role names and turn on perl + warnings. Based on a diff from Aaron Peschel + [344a1c1f5c93] + +2016-02-20 Todd C. Miller + + * lib/util/aix.c: + Add declaration of getauthdb() for AIX 5.1 + [f758960bcfd6] + +2016-02-19 Todd C. Miller + + * plugins/sudoers/po/sudoers.pot, po/sudo.pot: + regen + [e61e1241f15f] + + * plugins/sudoers/po/fr.mo, plugins/sudoers/po/fr.po, + plugins/sudoers/po/nb.mo, plugins/sudoers/po/nb.po: + sync with translationproject.org + [2f3dea24199b] + + * INSTALL: + Add a note that --with-solaris-audit is only for Solaris 11 and + above. Bug #737 + [6722331c2830] + +2016-02-18 Todd C. Miller + + * configure, configure.ac: + Remove last remnants of the deprecated --with-stow option. + [8616d6de7ecd] + + * src/Makefile.in: + src/load_plugins.c needs _PATH_SUDO_CONF so allow it to be + overridden via the Makefile like other consumers of _PATH_SUDO_CONF. + Bug #735 + [10148ef883ec] + +2016-02-01 Todd C. Miller + + * configure, configure.ac, include/sudo_util.h, lib/util/aix.c, + lib/util/getgrouplist.c, plugins/sudoers/pwutil.c, + plugins/sudoers/pwutil.h, plugins/sudoers/pwutil_impl.c, + plugins/sudoers/set_perms.c, src/sudo.c: + Add an administrative domain to the passwd/group cache key for AIX + which can have different name <-> ID mappings depending on whether + the database is local, LDAP, etc. + [5319c11aefe9] + + * mkpkg, sudo.pp: + Fedora dropped "core" from the name some time ago so just match on + f[0-9] for the rpm distro name provided by pp. Since the version + numbers of Fedora and RHEL are so different switch to defining + variables to indicate which features should be enabled. Works for + Fedora 23. + [4ec50b352293] + +2016-01-31 Todd C. Miller + + * mkpkg, sudo.pp: + Treat fedora core like centos/rhel for package building. + [0dfc607d07a1] + +2016-01-29 Todd C. Miller + + * plugins/sudoers/regress/iolog_path/check_iolog_path.c, + plugins/sudoers/regress/parser/check_fill.c: + Plug some memory leaks in the tests. + [ce76ba538867] + + * plugins/sudoers/toke_util.c: + If realloc of sudoerslval.command.args fails, reset + sudoerslval.command.args as well as arg_len and arg_size after + freeing sudoerslval.command.args. + [6481bad56e6a] + + * src/exec_pty.c: + When freeing the iobs after pty tear-down, also free the associated + event structures. Quiets a memory leak warnings from address + sanitizer and valgrind. + [f19c689a2ded] + +2016-01-28 Todd C. Miller + + * plugins/sudoers/iolog.c: + iolog_compress should be bool, not int + [b437123a242b] + + * plugins/sudoers/visudo.c: + Quiet address sanitizer leak detector. + [b7ce672331f6] + + * MANIFEST, plugins/sudoers/Makefile.in, plugins/sudoers/env.c, + plugins/sudoers/gc.c, plugins/sudoers/sudoers.h: + Simple garbage collection (really a to-be-freed list) for the + sudoers plugin. Almost identical to what sudo.c uses. Currenly only + the environment strings are collected at exit time which is enough + to quiet address sanitizer's leak detector. + [47f32e047b1a] + + * src/sudo.c: + Rename gc_cleanup to gc_run and remove I/O plugins from the plugin + list when freeing them. + [ea640f0b46f9] + + * src/sudo.c: + Free up the garbage via an atexit() handler instead of requiring a + call to gc_exit. + [cc9c96d88595] + + * src/sudo_edit.c: + Plug a memory leak in sudo_edit. + [cab9a13a669b] + +2016-01-27 Todd C. Miller + + * INSTALL: + mention --enable-asan + [ee2bc0f60c8b] + + * plugins/sudoers/auth/sudo_auth.c: + Try to deconfuse static analyzers a bit. + [7e728c76f5df] + + * plugins/sudoers/sssd.c: + Avoid possible NULL deref found by clang analyzer. + [8bb3cbfe0446] + + * config.h.in, configure, configure.ac: + Add --enable-asan configure flag to enable address sanitizer + [8aae250fb68e] + + * src/sudo.c, src/sudo_plugin_int.h, src/ttyname.c: + Add support for garbage collecting info passed to the plugin before + exit to appease address sanitizer's leak detector (and valgrind's + leak checker). We can't free these sooner since the plugin may be + using the memory. For plugin API 2.0 it should be make clear that + the plugin must make a copy of the data in the arrays passed in to + the plugin's open() function. Only enabled if NO_LEAKS is defined. + [8458bcb165d8] + + * plugins/sudoers/auth/aix_auth.c, plugins/sudoers/auth/bsdauth.c, + plugins/sudoers/auth/fwtk.c, plugins/sudoers/auth/pam.c, + plugins/sudoers/auth/securid5.c, plugins/sudoers/auth/sia.c, + plugins/sudoers/auth/sudo_auth.c: + auth_getpass() returns a dynamically allocated copy of the plaintext + password which needs to be freed after checking (and clearing) it. + [28d2c83c3ac4] + + * src/sudo.c: + Remove sudo_fatalx() calls from format_plugin_settings(). + [96a18a3ccc49] + + * plugins/sudoers/sssd.c: + fn_free_result() (aka sss_sudo_free_result() in sss_sudo.c) handles + a NULL poiner so there's no need to check before calling it. Add + missing initialization of sss_sudo_result to NULL in + sudo_sss_setdefs(). + [fa1c8eaed6ac] + + * plugins/sudoers/sssd.c: + Add missing return when user is not found in sudo_sss_result_get(). + Previously we fell through to the default case which just logged a + debug message and returned so this just avoids the extra (generic) + debug message. + [68c2201f3a85] + +2016-01-26 Todd C. Miller + + * lib/util/gettime.c: + Fix a warning on AIX. + [4ebc19a143ff] + + * src/sudo.c: + Pass updated user_env_out, not envp, to the I/O open function. + [f02e6f32f189] + + * src/sudo.c: + Pass updated argv/envp to the I/O open function like the plugin API + documents. + [ff9f4fae5cf3] + +2016-01-25 Todd C. Miller + + * plugins/sudoers/iolog.c: + Add check for I/O log file handle being NULL. This could only happen + if the front-end calls iolog_open with argc == 0 but actually runs a + command. + [5113a3c04494] + +2016-01-22 Todd C. Miller + + * plugins/sudoers/pwutil.c: + Additional debugging for pwutil functions. + [908b83c3acbb] + + * config.h.in, configure, configure.ac, lib/util/aix.c: + When calling setauthdb(), save the old registry value so we can + restore it properly. Previously we were setting the registry to + unrestricted instead of actually restoring it. + [5a2921412663] + + * plugins/sudoers/sudoers.c: + Use SUDOERS_DEBUG_UTIL not SUDO_DEBUG_UTIL in the plugin. + [79b012777e71] + +2016-01-21 Todd C. Miller + + * lib/util/sudo_debug.c: + When parsing debug entries, don't make a lower value override a + higher one. For example, for "pcomm@debug,all@warn" the "all@warn" + should not set pcomm to "warn" when it is already at "debug". + [031037a56e51] + +2016-01-20 Todd C. Miller + + * plugins/sudoers/policy.c: + Set sudoedit_checkdir=false in command_details when it is disabled + in sudoers. + [811dd43b29f5] + + * include/sudo_compat.h, lib/util/strtobool.c, plugins/sudoers/ldap.c, + plugins/sudoers/sssd.c, src/sudo_edit.c: + Update copyright year + [5ec484920763] + + * src/sudo_edit.c: + If the user runs "sudoedit /" we will receive ENOENT from openat(2) + and sudoedit will try to create a file with the null string. If path + is empty, open the cwd instead so sudoedit can give a sensible error + message. + [fc39d5804f1f] + + * lib/util/strtobool.c: + Log an error for invalid boolean strings. + [004afa5e05c5] + + * src/sudo.c: + Fix off by one error in new SET_FLAG macro. + [5bdce4edf8b9] + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in: + Document the race with sudoedit_checkdir in 1.8.15. + [cb7aed3367e9] + + * doc/sudo_plugin.cat, doc/sudo_plugin.man.in, + doc/sudo_plugin.mdoc.in: + Document sudoedit_checkdir + [89f2452272ad] + +2016-01-19 Todd C. Miller + + * src/sudo_edit.c: + There are no systems that support O_SEARCH/O_PATH that do not also + support O_DIRECTORY so simplify the definition of DIR_OPEN_FLAGS a + bit. + [a48f11ea53b3] + + * plugins/sudoers/po/sudoers.pot, po/sudo.pot: + regen + [8ae4d883ac59] + + * NEWS, doc/UPGRADE: + Add 1.8.16 changes + [8d3a3f5cdf59] + + * doc/sudo.cat, doc/sudo.man.in, doc/sudo.mdoc.in, doc/sudoers.cat, + doc/sudoers.man.in, doc/sudoers.mdoc.in, plugins/sudoers/defaults.c, + src/sudo.c: + Make sudoedit_checkdir the default and update the documentation + accordingly. + [84bbc1b73411] + + * src/sudo.c: + Add a SET_FLAG macro to simplify parsing command details boolean + flags. Previously, flags were only set and never cleared even if the + boolean value was false. This was not a problem as there were no + default flags for the plugin to enable. That will change in the + future. + [75f24ca13f41] + +2016-01-18 Todd C. Miller + + * src/sudo_edit.c: + Need to be root when switching to a different user. + [06d5f010b607] + + * src/sudo_edit.c: + Use O_SEARCH on systems without O_PATH if present. It can be used + for a similar purpose. + [3f559a389bf9] + + * config.h.in, configure, configure.ac, src/sudo_edit.c: + Use faccessat(2) for directory writability instead of doing the + checks manually where possible. This also allows us to remove the + #ifdef __linux__ bits since we no longer use fstat(2) on Linux with + an O_PATH fd. + [fe50d0c1f1b9] + +2016-01-16 Todd C. Miller + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in: + Add "I/O LOG FILES" section to the manual and move many of the + details from the log_input and log_output descriptions to it. + [a604903f5ae3] + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in: + Use "Nm sudoers" when talking about the plugin and "Em sudoers" when + talking about the sudoers file. + [727a68b02de7] + +2016-01-13 Todd C. Miller + + * lib/zlib/zlib.exp: + Remove gzopen_w which is only defined on Windows. + [a73236903e7b] + + * config.h.in, configure, configure.ac, include/sudo_compat.h: + Work around the buggy pread(2) on 32-bit HP-UX 11.00 by using + pread64() on that platform. + [31c4be934115] + +2016-01-12 Todd C. Miller + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in, + plugins/sudoers/def_data.c, plugins/sudoers/def_data.h, + plugins/sudoers/def_data.in, plugins/sudoers/defaults.c, + plugins/sudoers/ldap.c, plugins/sudoers/match.c, + plugins/sudoers/parse.c, plugins/sudoers/parse.h, + plugins/sudoers/sssd.c, plugins/sudoers/testsudoers.c: + Add support for matching the entire netgroup tuple (user, host, + domain). + [9f694ba7c86d] + + * plugins/sudoers/ldap.c: + Use asprintf() to generate the netgroup filter instead of using lots + of concatenation. + [f8290c040aea] + + * lib/util/util.exp.in: + Add missing sudo_debug_exit_ssize_t_v1 symbol. + [9407fb25dfa4] + +2016-01-11 Todd C. Miller + + * plugins/sudoers/ldap.c: + In sudo_netgroup_lookup() only build up the search filter once + instead of once per netgroup_base. + [a03440237078] + + * plugins/sudoers/ldap.c: + It is safe to pass ldap_msgfree() a NULL pointer. + [abc2eaddbf83] + + * plugins/sudoers/ldap.c: + On overflow, warn before freeing anything. + [2e3bcfa4a8f9] + + * plugins/sudoers/ldap.c, plugins/sudoers/sssd.c: + Use user_runhost and user_srunhost instead of user_host and + user_shost. Fixes "sudo -l -h other_host" for LDAP and sssd. + [e1abfdc82242] + + * plugins/sudoers/match.c: + Silence warning in digest_matches() on systems with no fexecve(2). + [0cd3cc8fa195] + + * plugins/sudoers/sssd.c: + Fix free() of invalid pointer introduced in the commit that stripped + whitespace between a '!' and the name in a sudoOption. + [4d2c1761c752] + + * plugins/sudoers/ldap.c: + Fix free() of invalid pointer introduced in the commit that stripped + whitespace between a '!' and the name in a sudoOption. + [14391603a9e5] + + * src/sudo_edit.c: + Add missing dfd argument to the version of + sudo_edit_openat_nofollow() for systems without O_NOFOLLOW. + [574e4a840879] + + * plugins/sudoers/def_data.c, plugins/sudoers/def_data.in: + Update description of sudoedit_checkdir. Reported by Sander Bos. + [ee44e7255096] + + * src/sudo_edit.c: + No need to check whether the fd we opened is really a directory in + sudo_edit_open_nonwritable() since if not, the openat() will fail + with ENOTDIR anyway. + [b41c5b289f35] + +2016-01-10 Todd C. Miller + + * doc/CONTRIBUTORS, doc/UPGRADE, doc/sudoers.cat, doc/sudoers.man.in, + doc/sudoers.mdoc.in, include/sudo_compat.h, src/sudo_edit.c: + Rewritten sudoedit_checkdir support that checks all the dirs in the + path and refuses to follow symlinks in writable directories. This is + a better fix for CVE-2015-5602. Adapted from a diff by Ben + Hutchings. Bug #707 + [c2e36a80a279] + +2016-01-04 Todd C. Miller + + * MANIFEST, plugins/sudoers/po/ca.mo, plugins/sudoers/po/ca.po, + plugins/sudoers/po/fi.mo, plugins/sudoers/po/fi.po, + plugins/sudoers/po/fr.mo, plugins/sudoers/po/fr.po, + plugins/sudoers/po/sr.mo, plugins/sudoers/po/sr.po, po/ca.mo, + po/ca.po, po/fi.mo, po/fi.po, po/hu.mo, po/hu.po, po/sr.mo, + po/sr.po: + sync with translationproject.org + [94ffd6b18431] + + * configure, configure.ac, doc/sudo_plugin.cat, + doc/sudo_plugin.man.in, doc/sudo_plugin.mdoc.in, doc/sudoers.cat, + doc/sudoers.man.in, doc/sudoers.mdoc.in, include/sudo_plugin.h, + plugins/sudoers/match.c, plugins/sudoers/policy.c, + plugins/sudoers/sudoers.h, src/exec.c, src/exec_common.c, + src/selinux.c, src/sesh.c, src/sudo.c, src/sudo.h, src/sudo_exec.h: + Add support for using fexecve() if supported on commands that are + checksummed. + [397722cdd7ec] + +2015-12-29 Todd C. Miller + + * src/sudo_edit.c: + Call openat() with the basename not the full path. From Ben + Hutchings. + [33272418bb10] + +2015-12-24 Todd C. Miller + + * plugins/sudoers/group_plugin.c, plugins/sudoers/policy.c: + Fix compilation with --disable-shared + [84c084618676] + +2015-12-20 Todd C. Miller + + * src/exec_common.c: + Check for existing dso in LD_PRELOAD and only add it if it is not + already present. + [15042e8999f7] + +2015-12-18 Todd C. Miller + + * doc/sudo.cat, doc/sudo.man.in, doc/sudo.mdoc.in: + Clarify when SIGINT and SIGQUIT are relayed by sudo to the command. + [8efed5784393] + + * plugins/sudoers/group_plugin.c, plugins/sudoers/policy.c, + plugins/sudoers/sudoers.h, src/load_plugins.c: + Actually use the plugin_dir Path setting in sudo.conf. + [bccc548127a2] + + * lib/util/sudo_conf.c: + The Path setting for the plugin directory is "plugin_dir" not + "plugin". + [07c2677bbce5] + + * doc/sudo.conf.cat, doc/sudo.conf.man.in, doc/sudo.conf.mdoc.in, + lib/util/sudo_conf.c, src/exec_common.c: + Allow sudo.conf Path settings to disable path names (by setting the + value of NULL). + [81a44e011a40] + +2015-12-16 Todd C. Miller + + * src/selinux.c, src/sudo.h: + Change noexec flag in selinux_execve() from int to bool. + [7cb872aac155] + + * src/exec_common.c, src/sudo_exec.h: + Refactor code to set LD_PRELOAD (or the equivalent) in the + environment into a preload_dso() function. Also avoid allocating a + new copy of the environment array if the size of the array does not + change. + [72194b0b51f7] + + * configure, configure.ac: + Add missing square brackets in configure option descriptions. + [6e25685c6349] + +2015-12-11 Todd C. Miller + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in: + Document the names of the I/O log files and mention buffering. + Document that I/O logs are in gzip format by default. + [474838e7b365] + +2015-12-10 Todd C. Miller + + * plugins/sudoers/env.c: + Add BASHOPTS to initial_badenv_table[]; from Stephane Chazelas + [f206a9089a69] + +2015-12-09 Todd C. Miller + + * plugins/sudoers/ldap.c, plugins/sudoers/sssd.c: + When parsing sudoOptions that include an operator (!, +, +=, -=) + strip out any whitespace on either side of the operator. + [62041b5888e5] + +2015-12-08 Todd C. Miller + + * plugins/sudoers/sudoers2ldif: + Strip whitespace around '!', '=', '+=' and '-=' in Defaults entries. + [dcc9d15b0f3c] + +2015-12-06 Todd C. Miller + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in: + Document the race condition between the digest check and command + execution. + [24a3d9215c64] + +2015-12-02 Todd C. Miller + + * plugins/sudoers/ldap.c: + When checking the query results, don't set user_matches in the + netgroup pass unless sudo_ldap_check_non_unix_group() returns true. + This was preventing the mail_no_user sudoOption from being + effective. + [31004144421b] + + * plugins/sudoers/ldap.c, plugins/sudoers/sssd.c: + In list mode, we always want to clear FLAG_NO_USER and FLAG_NO_HOST + regardless of whether or not there was an actual match. Otherwise, + warning mail may be sent which is not what we want in list mode. + This is consistent with what the sudoers file backend does. + [2809338a7b21] + +2015-11-22 Todd C. Miller + + * plugins/sudoers/toke.h, plugins/sudoers/toke_util.c: + Use size_t for length parameters in the fill functions used by the + lexer. + [0428c9067182] + + * plugins/sudoers/toke.c, plugins/sudoers/toke.l: + Use yy_size_t for digest_len since newer flex uses yy_size_t for + yyleng. Old flex uses int for yyleng so we need to use a cast to + avoid a sign compare warning. + [4a3dc6fb8f99] + +2015-11-20 Todd C. Miller + + * Makefile.in, README, configure, configure.ac, + plugins/sudoers/regress/sudoers/test1.in, sudo.pp: + Use https in sudo.ws urls + [04e5177022d3] + + * doc/sudo.cat, doc/sudo.conf.cat, doc/sudo.conf.man.in, + doc/sudo.conf.mdoc.in, doc/sudo.man.in, doc/sudo.mdoc.in, + doc/sudo_plugin.cat, doc/sudo_plugin.man.in, + doc/sudo_plugin.mdoc.in, doc/sudoers.cat, doc/sudoers.ldap.cat, + doc/sudoers.ldap.man.in, doc/sudoers.ldap.mdoc.in, + doc/sudoers.man.in, doc/sudoers.mdoc.in, doc/sudoreplay.cat, + doc/sudoreplay.man.in, doc/sudoreplay.mdoc.in, doc/visudo.cat, + doc/visudo.man.in, doc/visudo.mdoc.in: + Use https in urls. + [855b05943b2d] + + * configure, configure.ac: + sudo 1.8.16 + [b745f7031aeb] + + * plugins/sudoers/env.c: + When preserving variables from the invoking user's environment, if + there are duplicates only keep the first instance. + [d4dfb05db5d7] + +2015-11-01 Todd C. Miller + + * include/sudo_debug.h, lib/util/parseln.c, lib/util/sudo_debug.c, + plugins/sudoers/timestamp.c: + Add debug_return_ssize_t + [d491ed281726] + + * plugins/sudoers/timestamp.c: + Avoid compilation error on Solaris 10 with Stun Studio 12. Bug #727 + [facd8ff1ee6c] + +2015-10-31 Todd C. Miller + + * plugins/sudoers/po/da.mo, plugins/sudoers/po/da.po, po/da.mo, + po/da.po: + sync with translationproject.org + [6711d740d3d0] + + * NEWS: + Mention ssp configure fix. + [92d64fd724cc] + +2015-10-30 Todd C. Miller + + * plugins/sudoers/po/cs.mo, plugins/sudoers/po/cs.po, + plugins/sudoers/po/de.mo, plugins/sudoers/po/de.po, + plugins/sudoers/po/it.mo, plugins/sudoers/po/it.po, + plugins/sudoers/po/ja.mo, plugins/sudoers/po/ja.po, + plugins/sudoers/po/nb.mo, plugins/sudoers/po/nb.po, + plugins/sudoers/po/nl.mo, plugins/sudoers/po/nl.po, + plugins/sudoers/po/pl.mo, plugins/sudoers/po/pl.po, + plugins/sudoers/po/pt_BR.mo, plugins/sudoers/po/pt_BR.po, + plugins/sudoers/po/uk.mo, plugins/sudoers/po/uk.po, + plugins/sudoers/po/vi.mo, plugins/sudoers/po/vi.po, + plugins/sudoers/po/zh_CN.mo, plugins/sudoers/po/zh_CN.po, po/cs.mo, + po/cs.po, po/de.mo, po/de.po, po/fr.mo, po/fr.po, po/it.mo, + po/it.po, po/ja.mo, po/ja.po, po/nb.mo, po/nb.po, po/pl.mo, + po/pl.po, po/pt_BR.mo, po/pt_BR.po, po/uk.mo, po/uk.po, po/vi.mo, + po/vi.po, po/zh_CN.mo, po/zh_CN.po: + sync with translationproject.org + [9c8eb0062d8c] + + * configure, configure.ac: + Don't use CPPFLAGS for the -fstack-protector check. Otherwise on + systems with _FORTIFY_SOURCE support we'll get an error due to the + lack of optimization flags. Bug #725 + [1a9f8571a82d] + + * configure, configure.ac: + When checking for stack protector support we need to actually link + the test program. + [ab4f94aac7de] + +2015-10-29 Todd C. Miller + + * configure, configure.ac: + Preserve LDFLAGS when checking for stack protector as they may + include rpath settings to allow the stack protector lib to be found. + Avoid using existing CFLAGS since we don't want the compiler to + optimize away the stack variable. + [e6bc59225c06] + + * configure, configure.ac: + Better configure test for -fstack-protector. Some gcc installations + may be missing the ssp library even though the compiler supports it. + [4ade5d1249f4] + +2015-10-25 Todd C. Miller + + * src/sudo_edit.c: + Set errno to EISDIR instead of ENOTDIR if directory is writable + since ENOTDIR can be a legitimate errno. This avoids a bogus + "directory is writable" error in that case. + [97ee37d905ce] + + * mkpkg: + Fix the check for whether to include 32-bit arch in Mac OS X + packages. + [a76654512f6b] + +2015-10-24 Todd C. Miller + + * plugins/sudoers/po/sudoers.pot, po/sudo.pot: + regen + [58277a8f418b] + + * NEWS, src/sudo_edit.c: + When creating a new file, sudoedit will now check that the file's + parent directory exists before running the editor. + [65bc45510fb2] + + * NEWS, doc/UPGRADE, doc/sudoers.cat, doc/sudoers.man.in, + doc/sudoers.mdoc.in, plugins/sudoers/def_data.c, + plugins/sudoers/def_data.h, plugins/sudoers/def_data.in, + plugins/sudoers/match.c: + Add always_query_group_plugin + [7e9060d4c13a] + +2015-10-23 Todd C. Miller + + * ABOUT-NLS, MANIFEST: + Add ABOUT-NLS from GNU gettext. + [971c168c065a] + + * NEWS, config.h.in, configure, configure.ac, doc/sudoers.cat, + doc/sudoers.man.in, doc/sudoers.mdoc.in, plugins/sudoers/def_data.c, + plugins/sudoers/def_data.h, plugins/sudoers/def_data.in, + plugins/sudoers/policy.c, plugins/sudoers/sudoers_version.h, + src/sudo.c, src/sudo.h, src/sudo_edit.c: + Add directory writability checks for sudoedit. + [f5349d059a98] + +2015-10-06 Todd C. Miller + + * NEWS: + Latest. + [9aae49302c60] + + * src/conversation.c: + Ignore the SUDO_CONV_PROMPT_ECHO_OK flag when echo is enabled. This + was preventing a match of SUDO_CONV_PROMPT_ECHO_ON which resulted in + a masked password instead of an echoed one. + [53f6a78d79e3] + + * plugins/sudoers/auth/bsdauth.c: + Repair challenge/response prompting for BSD authentication which got + broken while it was converted to use the conversation function. + [2d0b0cec5e4f] + + * plugins/sudoers/auth/sia.c, plugins/sudoers/auth/sudo_auth.c, + plugins/sudoers/auth/sudo_auth.h: + Use the auth_getpass (and the plugin conversation fuction) for Tru64 + SIA. This prevents sudo from sleeping while holding the tty ticket + lock. + [9221eec812cf] + + * NEWS, doc/UPGRADE, plugins/sudoers/env.c: + For env_reset, SHELL should be set based on the target user, not the + invoking user unless preserved via env_keep. + [b77adbc08c91] + + * plugins/sudoers/po/da.mo, plugins/sudoers/po/da.po: + sync with translationproject.org + [adb927ad5e86] + +2015-10-05 Todd C. Miller + + * NEWS: + Hungarian and Slovak translations + [d3b6acece125] + + * MANIFEST, doc/CONTRIBUTORS, plugins/sudoers/po/hu.mo, + plugins/sudoers/po/hu.po, plugins/sudoers/po/sk.mo, + plugins/sudoers/po/sk.po, po/sk.mo, po/sk.po: + Add new Slovak and Hungarian translations from + translationproject.org + [132ec9b7a927] + +2015-10-02 Todd C. Miller + + * src/sudo_edit.c: + Remove S_ISREG check from sudo_edit_open(), it is already done in + the caller. + [9fff8c0bb1f7] + + * src/sudo_edit.c: + Open sudoedit files with O_NONBLOCK and fail if they are not regular + files. + [56b01164869c] + + * plugins/sudoers/logging.c, plugins/sudoers/visudo.c, src/tgetpass.c: + It is possible for WIFSTOPPED to be true even if waitpid() is not + given WUNTRACED if the child is ptraced. Don't exit the waitpid() + loop if WIFSTOPPED is true, just in case. + [a2cab04a03da] + +2015-09-30 Todd C. Miller + + * plugins/sudoers/po/cs.mo, plugins/sudoers/po/de.mo, + plugins/sudoers/po/fi.mo, plugins/sudoers/po/it.mo, + plugins/sudoers/po/ja.mo, plugins/sudoers/po/nb.mo, + plugins/sudoers/po/pl.mo, plugins/sudoers/po/pt_BR.mo, + plugins/sudoers/po/uk.mo, plugins/sudoers/po/vi.mo, + plugins/sudoers/po/zh_CN.mo, po/cs.mo, po/de.mo, po/fi.mo, po/fr.mo, + po/gl.mo, po/it.mo, po/ja.mo, po/nb.mo, po/pl.mo, po/pt_BR.mo, + po/uk.mo, po/vi.mo, po/zh_CN.mo: + rebuild .mo files + [676362ed6061] + + * plugins/sudoers/po/pt_BR.po, po/pt_BR.po: + sync with translationproject.org + [be932694e600] + +2015-09-28 Todd C. Miller + + * config.h.in, configure, configure.ac, src/sudo_noexec.c: + There's no point in trying to interpose protected versions of the + exec family of functions. Many modern C libraries use hidden symbols + for the functions and syscalls defined in libc such that they cannot + be overridden inside libc itself. We have to just wrap all the exec + variants plus system and popen. + [30aa4bd6c15b] + + * doc/sudo.conf.cat, doc/sudo.conf.man.in, doc/sudo.conf.mdoc.in: + List all the functions wrapped by sudo_noexec.so. + [57a9db56f4e0] + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in: + The section is now called "EXEC and NOEXEC" and it is above, not + below. + [9b0a2537f65d] + + * src/sudo_noexec.c: + Also wrap popen(3). + [a826cd7787e9] + + * src/sudo_noexec.c: + Also interpose system(3). On glibc systems you cannot interpose the + syscalls used internally by libc. + [58a5c06b5257] + + * src/conversation.c: + Set active debug instance to sudo_debug_instance() during the + conversation function. + [22fb750d92a9] + +2015-09-27 Todd C. Miller + + * doc/sudo.cat, doc/sudo.man.in, doc/sudo.mdoc.in: + LOGNAME and USERNAME are set the same way as USER + [54f170cf2536] + + * doc/sudo.cat, doc/sudo.man.in, doc/sudo.mdoc.in: + Document behavior when the command dies from a signal in EXIT + STATUS. + [3c93d682e5e6] + +2015-09-26 Todd C. Miller + + * NEWS: + Bug #722 + [5cca49bb0e02] + + * src/sudo.c: + When the command sudo is running is killed by a signal, sudo will + now send itself the same signal with the default signal handler + instead of exiting. The bash shell appears to ignore some signals, + e.g. SIGINT, unless the command is killed by that signal. This makes + the behavior of commands run under sudo the same as without sudo + when bash is the shell. Bug #722 + [153f016db8f1] + +2015-09-25 Todd C. Miller + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in: + Adjust set_logname description to new behavior when any of LOGNAME, + USER or USERNAME are preserved. + [89009c2dcf38] + + * NEWS, plugins/sudoers/env.c: + If some, but not all, of the LOGNAME, USER or USERNAME environment + variables have been preserved from the invoking user's environment, + sudo will now use the preserved value to set the remaining variables + instead of using the runas user. This ensures that if, for example, + only LOGNAME is present in the env_keep list, that sudo will not set + USER and USERNAME to the runas user. + [54a60fe72b9a] + +2015-09-24 Todd C. Miller + + * plugins/sudoers/auth/pam.c: + Fix passing of the callback pointer to the conversation function. + This was preventing the on_suspend and on_resume functions from + being called on PAM systems. + [611246ded4ff] + + * include/sudo_plugin.h: + Explicitly mark large hex constants unsigned. + [5b67b0090814] + + * plugins/sudoers/timestamp.c: + Cast sizeof(entry) to off_t before making it a negative offset for + lseek(). Fixes "sudo -k" on Solaris and probably others. + [ed5d312f6baa] + +2015-09-21 Todd C. Miller + + * doc/sudoers.cat, doc/sudoers.ldap.cat, doc/sudoers.ldap.man.in, + doc/sudoers.ldap.mdoc.in, doc/sudoers.man.in, doc/sudoers.mdoc.in: + Add explicit mention of sudo's netgroup semantics since they differ + from most other netgroup consumers. + [0e9030f8cf56] + + * plugins/sudoers/po/fi.po, po/fi.po: + sync with translationproject.org + [f9236f25a616] + + * plugins/sudoers/check.c: + Fix potential double free of the cookie when sudo is suspended at + the password prompt. + [cbecb3136155] + +2015-09-16 Todd C. Miller + + * plugins/sudoers/po/cs.po, plugins/sudoers/po/zh_CN.po, po/cs.po, + po/zh_CN.po: + sync with translationproject.org + [21138f16a3a6] + +2015-09-15 Todd C. Miller + + * plugins/sudoers/po/de.po, plugins/sudoers/po/it.po, + plugins/sudoers/po/ja.po, plugins/sudoers/po/nb.po, + plugins/sudoers/po/pl.po, plugins/sudoers/po/uk.po, + plugins/sudoers/po/vi.po, po/de.po, po/fr.po, po/gl.po, po/it.po, + po/ja.po, po/nb.po, po/pl.po, po/uk.po, po/vi.po: + sync with translationproject.org + [2d9f3e4c3ccf] + + * NEWS: + Bug #719 + [cfa393164a0f] + + * doc/sudo.cat, doc/sudo.man.in, doc/sudo.mdoc.in: + SIGHUP is now relayed to the command. Bug #719 + [8db7c492c52a] + + * src/exec.c: + When a terminal device is closed, SIGHUP is sent to the controlling + process associated with that terminal. It is not sent to the entire + process group so sudo needs to relay SIGHUP to the command when it + is not being run in a new pty. Bug #719 + [b408a792f31a] + + * NEWS: + Mention visudo bug in 1.8.14 + [0fec829807fd] + + * plugins/sudoers/visudo.c: + We reserved two slots at the end of the editor argv for the line + number and the file name. However, resolve_editor() adds "--" before + the file names so the +line_number is interpreted as a file name, + not a line number so we need to overwrite the "--" as well. + [ff107430ee4b] + +2015-09-10 Todd C. Miller + + * config.h.in, configure, configure.ac, lib/util/sig2str.c, + lib/util/strsignal.c: + Remove checks for __sys_siglist and __sys_signame. They are internal + to libc and there are no known systems that export those symbols + that do not already export the single underbar or no- underbar + versions. + [2b3efe0a91f2] + + * plugins/sudoers/po/ru.mo, plugins/sudoers/po/ru.po, po/es.mo, + po/es.po: + Sync with translationproject.org + [feb5eb934a9e] + + * plugins/sudoers/po/sudoers.pot, po/sudo.pot: + regen + [947e8320c557] + +2015-09-09 Todd C. Miller + + * src/tgetpass.c: + Restore old signal handlers before tty settings. That way SIGTTOU is + at its original value if sudo_term_restore() should fail. + [69d2cc6c0702] + + * doc/sudo_plugin.cat, doc/sudo_plugin.man.in, + doc/sudo_plugin.mdoc.in: + Document what happens when the on_suspend/on_resume callbacks return + an error. + [d8c9dcf7a926] + + * doc/sudo_plugin.cat, doc/sudo_plugin.man.in, + doc/sudo_plugin.mdoc.in, include/sudo_plugin.h, + plugins/group_file/group_file.c, plugins/group_file/plugin_test.c, + plugins/sudoers/group_plugin.c, plugins/sudoers/policy.c, + plugins/system_group/system_group.c, src/hooks.c: + No need to have version macros for hooks, callbacks and the sudoers + group plugin. We can just use the main sudo API macros. The sudoers + group plugin macros are preserved for source compatibility but are + not documented. + [8c52bb83f991] + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in: + Properly escape the backslash before a comma in an example so the + example rule is parsable by visudo. + [6745d38e9876] + + * src/tgetpass.c: + Ignore callbacks if major version doesn't match. + [f852e6ebff01] + + * MANIFEST, config.h.in, configure, configure.ac, + include/compat/timespec.h, lib/util/Makefile.in, lib/util/gettime.c, + lib/util/utimens.c, plugins/sudoers/Makefile.in, + plugins/sudoers/sudoreplay.c, plugins/sudoers/timestamp.c, + plugins/sudoers/visudo.c, src/Makefile.in, src/sudo_edit.c: + Remove include/compat/timespec.h. Systems old enough to lack struct + timespec are too old to build a modern sudo. + [37812e10a449] + + * NEWS: + Bug #713 + [8a7245d76799] + + * src/exec.c: + Fill in cstat if exec_setup() fails. Previously it was only filled + in for an execve() failure. Fixes an unkillable sudo process when + exec_setup() fails and I/O logging is enabled. + [ff1d39d9e505] + + * src/sudo.c: + Fix running commands as non-root when neither setresuid() not + setreuid() are available. At this point we are already root so + setuid() must succeed. Bug #713 + [34754ad586c7] + + * src/sudo.c: + Cast uid_t to unsigned int when printing as %u + [669e2d5244a6] + + * doc/UPGRADE: + Mention time stamp file locking changes, fix some spelling. + [c4563ea85e3a] + + * NEWS: + Update with latest changes. + [2cbd50e7c158] + +2015-09-07 Todd C. Miller + + * plugins/sudoers/check.c: + Avoid touching the time stamp directory for "sudo -k command" + [391d20c17775] + + * plugins/sudoers/timestamp.c: + Bring back the check for time stamp files that predate the boot + time. Instead of truncating we now unlink the file since another + process may be sleeping on the lock. + [9cdf7468d0f2] + + * config.h.in, configure, configure.ac, plugins/sudoers/iolog.c, + plugins/sudoers/timestamp.c: + Use pread(2) and pwrite(2) where possible. + [86cd3f6bab9e] + + * src/exec_pty.c: + sudo_term_* already restart themselve for all but SIGTTOU so we + don't need to use our own restart loops. + [113924cd05c0] + + * lib/util/locking.c: + Set errno to EINVAL if sudo_lock_* is called with a bad type. + [cfba014f1c1a] + + * plugins/sudoers/timestamp.c: + Adjust new locking to work when tty_tickets is disabled. We need to + use per-tty/ppid locking to gain exclusive access to the tty for the + password prompt but use a separate (short term) lock that is shared + among all sudo processes for the user. + [d6d7a0bb6bd0] + + * plugins/sudoers/timestamp.c: + Allow the time stamp lock to be interrupted by signals. + [aa5017f86210] + + * lib/util/term.c, plugins/sudoers/check.c, + plugins/sudoers/sudoreplay.c, src/tgetpass.c: + Implement suspend/resume callbacks for the conversation function. If + suspended, close the timestamp file (dropping all locks). On resume, + lock the record before reading the password. + + For this to work properly we need to be able to run th callback when + tsetattr() suspends us, not just when the user does. To accomplish + this the term_* functions now return EINTR if SIGTTOU would be + generated. The caller now has to restart the term_* function (and + send itself SIGTTOU) instead of it being done automatically. + [572374035897] + + * config.h.in, configure, configure.ac, include/sudo_util.h, + lib/util/locking.c, lib/util/util.exp.in, plugins/sudoers/check.c, + plugins/sudoers/check.h, plugins/sudoers/policy.c, + plugins/sudoers/sudoers.h, plugins/sudoers/timestamp.c: + Lock individual records in the timestamp file instead of the entire + file. This will make it possible for multiple sudo processes using + the same tty to serialize their timestamp lookups. + [f4ad82e36d90] + + * doc/sudo_plugin.cat, doc/sudo_plugin.man.in, + doc/sudo_plugin.mdoc.in, include/sudo_fatal.h, + include/sudo_plugin.h, lib/util/fatal.c, plugins/sudoers/auth/afs.c, + plugins/sudoers/auth/aix_auth.c, plugins/sudoers/auth/bsdauth.c, + plugins/sudoers/auth/dce.c, plugins/sudoers/auth/fwtk.c, + plugins/sudoers/auth/kerb5.c, plugins/sudoers/auth/pam.c, + plugins/sudoers/auth/passwd.c, plugins/sudoers/auth/rfc1938.c, + plugins/sudoers/auth/secureware.c, plugins/sudoers/auth/securid5.c, + plugins/sudoers/auth/sia.c, plugins/sudoers/auth/sudo_auth.c, + plugins/sudoers/auth/sudo_auth.h, plugins/sudoers/check.c, + plugins/sudoers/sudo_nss.c, plugins/sudoers/sudoers.h, + src/conversation.c, src/sudo.c, src/sudo.h, src/sudo_plugin_int.h, + src/tgetpass.c: + Add a struct sudo_conv_callback that contains on_suspend and + on_resume function pointer args plus a closure pointer and at it to + the conversation function. + [5608cb4c18f2] + +2015-09-02 Todd C. Miller + + * doc/sudo_plugin.cat, doc/sudo_plugin.man.in, + doc/sudo_plugin.mdoc.in, include/sudo_plugin.h: + Make hook_version and hook_type unsigned. + [77cb84793f07] + +2015-09-01 Todd C. Miller + + * plugins/sudoers/base64.c, plugins/sudoers/match.c, + plugins/sudoers/regress/parser/check_base64.c: + When decoding base64, avoid using '=' in the decoded temporary array + as a sentinel as it can legitimately be present. Instead, just use + the count of bytes stored in the temp array to determine which bytes + to fold into the destination. + [6abef15d3954] + +2015-08-21 Todd C. Miller + + * NEWS, plugins/sudoers/sudoers.c, plugins/sudoers/visudo.c: + When parsing def_editor, break out of the loop when we find the + first valid editor. Bug #714 + [c7508ed075c2] + +2015-08-18 Todd C. Miller + + * plugins/sudoers/visudo.c: + The condition for adding a missing newline at the end of sudoers was + never reached. Keep track of the last character and write a newline + character if when copying to the temp file. Found by Radovan Sroka. + [86c20e7fc6bd] + + * plugins/sudoers/sudoers.c, plugins/sudoers/visudo.c: + Remove extraneous while() from botched do {} while() loop conversion + to use sudo_strsplit. Noticed by Radovan Sroka. + [cd2d25510129] + +2015-08-10 Todd C. Miller + + * plugins/sudoers/auth/pam.c, plugins/sudoers/auth/sudo_auth.c: + In sudo_pam_begin_session() and sudo_pam_end_session() return + AUTH_FATAL on error, not AUTH_FAILURE. In sudo_auth_begin_session() + treat anything other than AUTH_SUCCESS as a fatal error. + [3ad7296390f2] + + * doc/CONTRIBUTORS, src/exec.c, src/exec_pty.c: + Linux sets si_pid in struct siginfo to 0 when the process that sent + the signal is in a different container since the PID namespaces in + different conatiners are separate. Avoid looking up the process + group by id when si_pid is 0 since getpgid(0) returns the process + group of the current process. Since sudo ignores signals sent by + processes in its own process group, this had the effect of ignoring + signals sent from other containers. From Maarten de Vries + [6d3f43b95a1f] + + * plugins/sudoers/auth/pam.c: + Sprinkle some debugging. + [f5a94a3a1192] + +2015-08-09 Todd C. Miller + + * doc/sudo.cat, doc/sudo.conf.cat, doc/sudo.conf.man.in, + doc/sudo.man.in, doc/sudo.mdoc.in: + Document that sudo uses the real uid to map from uid to passwd file + user name. + [04f6709675cc] + + * doc/sudo.cat, doc/sudo.conf.cat, doc/sudo.conf.man.in, + doc/sudo.conf.mdoc.in, doc/sudo.man.in, doc/sudo.mdoc.in: + disable_coredump can be set to no on modern OSes without security + consequences. + [ebe6d5bb2274] + +2015-08-07 Todd C. Miller + + * doc/sudo.cat, doc/sudo.man.in, doc/sudo.mdoc.in, doc/sudoers.cat, + doc/sudoers.man.in, doc/sudoers.mdoc.in: + Emphasis on the never. + [39ca000281c7] + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in: + Explicitly tell people not to grant sudoedit to directories the user + can write to. While sudoedit will no longer open symbolic links, + hard links are still an issue. + [26e0afae9bae] + + * doc/sudo.cat, doc/sudo.man.in, doc/sudo.mdoc.in: + Add warning about writable directories and sudo/sudoedit. + [701ff725af42] + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in: + Emphasize that wildcards are not regexps. Bug #692 + [1e071810c4cb] + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in: + Emphasize that wildcards in command line arguments are dangerous. + Document the failings of the passwd example on GNU systems. Bug #691 + [54d793aea6b2] + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in: + Escape the colons in [[:alpha:]] as required by sudoers. + [ad875dd5ca64] + + * po/sudo.pot, src/sudo_edit.c: + Change warning when user tries to sudoedit a symbolic link. + [b8f44e834c2f] + +2015-08-06 Todd C. Miller + + * plugins/sudoers/po/sudoers.pot, po/sudo.pot: + regen + [5abaa0eeab86] + + * doc/sudo.conf.cat, doc/sudoers.ldap.cat, doc/sudoreplay.cat, + doc/visudo.cat: + regen + [43e6b445734c] + + * doc/UPGRADE, doc/sudo.cat, doc/sudo.man.in, doc/sudo.mdoc.in, + doc/sudo_plugin.cat, doc/sudo_plugin.man.in, + doc/sudo_plugin.mdoc.in, doc/sudoers.cat, doc/sudoers.man.in, + doc/sudoers.mdoc.in, include/sudo_compat.h, include/sudo_plugin.h, + plugins/sudoers/def_data.c, plugins/sudoers/def_data.h, + plugins/sudoers/def_data.in, plugins/sudoers/gram.c, + plugins/sudoers/gram.h, plugins/sudoers/gram.y, + plugins/sudoers/ldap.c, plugins/sudoers/parse.c, + plugins/sudoers/parse.h, plugins/sudoers/policy.c, + plugins/sudoers/regress/sudoers/test1.in, + plugins/sudoers/regress/sudoers/test1.json.ok, + plugins/sudoers/regress/sudoers/test1.out.ok, + plugins/sudoers/regress/sudoers/test1.toke.ok, + plugins/sudoers/sudoers_version.h, plugins/sudoers/testsudoers.c, + plugins/sudoers/toke.c, plugins/sudoers/toke.l, + plugins/sudoers/visudo_json.c, src/sesh.c, src/sudo.c, src/sudo.h, + src/sudo_edit.c: + Do not follow symbolic links in sudoedit by default. This behavior + can be controlled by the sudoedit_follow Defaults flag as well as + the FOLLOW/NOFOLLOW tags. + [9636fd256325] + + * NEWS, aclocal.m4, configure, configure.ac: + Sudo 1.8.15 + [bf18da363b06] + + * MANIFEST: + add .json regress files to MANIFEST + [03ddb3a9671b] + + * plugins/sudoers/Makefile.in, + plugins/sudoers/regress/sudoers/test1.json.ok, + plugins/sudoers/regress/sudoers/test10.json.ok, + plugins/sudoers/regress/sudoers/test11.json.ok, + plugins/sudoers/regress/sudoers/test12.json.ok, + plugins/sudoers/regress/sudoers/test13.json.ok, + plugins/sudoers/regress/sudoers/test14.json.ok, + plugins/sudoers/regress/sudoers/test15.json.ok, + plugins/sudoers/regress/sudoers/test16.json.ok, + plugins/sudoers/regress/sudoers/test2.json.ok, + plugins/sudoers/regress/sudoers/test3.json.ok, + plugins/sudoers/regress/sudoers/test4.json.ok, + plugins/sudoers/regress/sudoers/test5.json.ok, + plugins/sudoers/regress/sudoers/test6.json.ok, + plugins/sudoers/regress/sudoers/test7.json.ok, + plugins/sudoers/regress/sudoers/test8.json.ok, + plugins/sudoers/regress/sudoers/test9.json.ok: + Check JSON output of sudoers test files too. + [3d8517812b80] + +2015-08-04 Todd C. Miller + + * plugins/sudoers/sudoers.c: + Move comment to match moved code. + [7a30f06462a8] + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in: + maxseq is an int not a string + [bffd97d22064] + +2015-08-02 Todd C. Miller + + * src/preserve_fds.c: + Include sys/types.h for id_t. Bug #711 + [fda95d9ca1e9] + +2015-07-31 Todd C. Miller + + * lib/util/fnmatch.c: + Avoid a potential out of bounds read found by enh while fuzzing with + address sanitizer enabled. + [52d6b9916593] + +2015-07-27 Todd C. Miller + + * mkpkg: + Set sssd lib location to /usr/lib64 on 64-bit RHEL/Centos. Bug #710 + [428421925a20] + +2015-07-08 Todd C. Miller + + * doc/CONTRIBUTORS: + Add Jakub Wilk + [78bfdf2e441b] + +2015-07-24 Todd C. Miller + + * doc/CONTRIBUTORS, src/Makefile.in: + The init.d files are generated from a .in file so we need to install + from top_builddir not top_srcdir. From Ross Burton. Bug #708 + [df1e7a0d3182] + +2015-07-22 Todd C. Miller + + * lib/util/term.c: + Replace two "return 0" with debug_return_bool(false). + [49f8fb3dcd36] + + * src/ttyname.c: + fix typo in previous commit + [094488696f2c] + + * NEWS, configure, configure.ac: + Sudo 1.8.14p3 + [0079c43d8247] + +2015-07-21 Todd C. Miller + + * src/ttyname.c: + Fix errno value from get_process_ttyname() when no tty is present. + [ff7b12bb0638] + + * src/ttyname.c: + On AIX, only convert the tty device number from dev64_t to dev32_t + if dev_t is 32-bits. + [0e728a1eb07a] + +2015-07-20 Todd C. Miller + + * NEWS, configure, configure.ac: + Sudo 1.8.14p2 + [55fe56b28c7b] + + * plugins/sudoers/timestamp.c: + Fix creation of the timestamp file; bug #704 + [1ff77fd5cc8f] + +2015-07-19 Todd C. Miller + + * src/regress/ttyname/check_ttyname.c, src/sudo.c, src/sudo.h, + src/ttyname.c: + Avoid needless memory allocation when resolving the tty name. + [c58cce92d5e0] + +2015-07-17 Todd C. Miller + + * NEWS, configure, configure.ac: + Sudo 1.8.14p1 + [973705806759] + + * plugins/sudoers/sssd.c: + Fix typo in sudo_sss_attrcpy() that caused a memory allocation + error. + [0fa324a7bb56] + +2015-07-15 Todd C. Miller + + * plugins/sudoers/po/ja.mo, plugins/sudoers/po/uk.mo, + plugins/sudoers/po/vi.mo, plugins/sudoers/po/zh_CN.mo: + rebuild + [e4c7cda46475] + +2015-07-14 Todd C. Miller + + * lib/util/lbuf.c, plugins/sudoers/env.c, plugins/sudoers/gram.c, + plugins/sudoers/gram.y, plugins/sudoers/interfaces.c, + plugins/sudoers/match.c, plugins/sudoers/pwutil_impl.c, + plugins/sudoers/redblack.c, src/hooks.c, src/net_ifs.c, src/sudo.c: + Add some debugging printfs when malloc fails and we don't have an + explicit call to sudo_warnx(). + [07aebb5839c3] + + * plugins/sudoers/toke.c, plugins/sudoers/toke.l, + plugins/sudoers/toke_util.c: + Add missing warnings for memory allocation failure. Add function + name to memory allocation warnings. + [4f6027786a28] + + * lib/util/parseln.c: + Return -1 if realloc() fails. + [707632291eac] + + * lib/util/event.c, lib/util/event_poll.c, lib/util/event_select.c: + Add line number to debug log for memory allocation errors. + [f4f3debdfcc5] + + * plugins/sudoers/auth/pam.c: + Add warning if calloc() fails. Add debugging for other unexpected + errors. + [a1e0945237d8] + + * plugins/sudoers/ldap.c: + Add missing check for calloc(3) return value. + [37fe3ca78e8e] + +2015-07-13 Todd C. Miller + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in: + Document that the values printed by "sudo -V" are affected by + Defaults settings in sudoers. + [80ec2572861b] + +2015-07-10 Todd C. Miller + + * plugins/sudoers/group_plugin.c, + plugins/sudoers/regress/check_symbols/check_symbols.c, + plugins/sudoers/sssd.c, src/load_plugins.c: + Avoid calling dlerror() multiple times since it clear the error + status after printing the error. Problem caused by + sudo_warn/sudo_fatal being macros... + [c0fd3b0fb9c3] + + * doc/sudo.cat, doc/sudo.man.in, doc/sudo.mdoc.in, doc/sudoers.cat, + doc/sudoers.man.in, doc/sudoers.mdoc.in: + Attempt to clarify the conditions under which MAIL and HOME are set + to the target user. + [ebd269bebe64] + +2015-07-09 Todd C. Miller + + * mkpkg: + Better checks for the libaudit package for Debian and error out if + we can't figure it out. + [225c1bfcb629] + + * mkpkg: + Fix linux_audit setting on non-multiarch Debian. + [0a38e9d158f4] + + * sudo.pp: + Fix typo that broke the linux_audit dependency on Debian. + [0917bd45acf1] + + * NEWS: + Mention /proc/stat btime fix. + [754050a340e2] + + * config.h.in, configure, configure.ac, lib/util/getaddrinfo.c, + plugins/sudoers/interfaces.c, plugins/sudoers/match_addr.c, + src/net_ifs.c: + Solaris 2.6 has the prototypes for inet_pton() and inet_ntop() in + resolv.h. + [dc0f62743845] + + * plugins/sudoers/boottime.c: + Sprinkle debugging for boottime. + [dfb45c763179] + + * mkpkg: + The old Solaris /bin/sh doesn't support POSIX $( .. ) syntax, use + backquotes instead. + [c9e33ffef2b1] + +2015-07-08 Todd C. Miller + + * mkpkg, sudo.pp: + Only use --with-sssd-lib on Debian/Ubuntu w/ multipackage. Use dpkg- + query to determine the name of the audit package for proper + dependencies. + [e9669389aa2f] + + * mkpkg, plugins/sudoers/sudoers.in, sudo.pp: + Update Debian/Ubuntu packages to be more like the vendor ones. One + notable exception is that sudo.ws packages use /var/run, not + /var/lib for timestamp files. + [0f4c49a3768e] + + * plugins/sudoers/boottime.c: + Strip newline from /proc/stat btime line to avoid a strtonum() + failure. From Jakub Wilk. + [8a04f85a070f] + + * src/exec_pty.c: + In io_callback() service writes before reads. That way, if both + SUDO_EV_READ and SUDO_EV_WRITE are set and read() returns 0 (EOF) we + don't close the fd before the write() is performed. + + If the write() returns EPIPE, ENXIO, EIO or EBADF, clear + SUDO_EV_READ before we close the fd to avoid calling read() on a + closed fd. + [167548fd8af2] + +2015-07-07 Todd C. Miller + + * lib/util/regress/sudo_conf/conf_test.c, + plugins/sudoers/sudoreplay.c, plugins/sudoers/testsudoers.c, + plugins/sudoers/visudo.c, src/sesh.c, src/sudo.c: + Check sudo_conf_read() return value and exit on fatal error (a + warning was already printed by sudo_conf_read()). + [d05797f4f197] + + * NEWS: + Mention double-quoted sudoOption value support. + [55684a73f097] + + * plugins/sudoers/ldap.c, plugins/sudoers/sssd.c: + Add support for parsing quoted strings in a sudoOption just like + sudoers Defaults settings. + [fe8291414179] + + * plugins/sudoers/po/da.mo, plugins/sudoers/po/da.po, + plugins/sudoers/po/fi.mo, plugins/sudoers/po/fi.po, po/da.mo, + po/da.po: + Sync with translationproject.org + [1c15d1a3dbdd] + +2015-07-06 Todd C. Miller + + * plugins/sudoers/po/sudoers.pot, po/sudo.pot: + Update year. + [6ca660e4a957] + + * plugins/sudoers/po/de.mo, plugins/sudoers/po/de.po, + plugins/sudoers/po/nb.mo, plugins/sudoers/po/nb.po, po/de.mo, + po/de.po, po/nb.mo, po/nb.po: + Sync with translationproject.org + [d7ede74dcb19] + + * src/sudo.c: + Fix utmp setup broken by commit be0ca60facf8 + [cd8a06f57f2b] + +2015-07-03 Todd C. Miller + + * plugins/sudoers/po/cs.mo, plugins/sudoers/po/cs.po, + plugins/sudoers/po/it.mo, plugins/sudoers/po/it.po, + plugins/sudoers/po/ja.po, plugins/sudoers/po/pl.mo, + plugins/sudoers/po/pl.po, plugins/sudoers/po/uk.po, + plugins/sudoers/po/vi.po, plugins/sudoers/po/zh_CN.po, po/cs.mo, + po/cs.po, po/fr.mo, po/fr.po, po/it.mo, po/it.po, po/pl.mo, + po/pl.po: + Sync with translationproject.org + [aa473519e66d] + + * plugins/sudoers/po/sudoers.pot: + regen + [8f8aa321f043] + + * plugins/sudoers/logging.c: + Fix typo in error message. + [220832711826] + +2015-07-02 Todd C. Miller + + * NEWS: + Bug #702 is the AIX timespec issue. + [c597a312e816] + + * config.h.in, configure, configure.ac, lib/util/closefrom.c, + lib/util/getcwd.c, lib/util/glob.c, plugins/sudoers/match.c, + plugins/sudoers/sudoreplay.c, plugins/sudoers/toke.c, + plugins/sudoers/toke.l, src/ttyname.c: + We require POSIX so no need to conditionally include dirent.h. Add a + check for d_namlen and use the result in the NAMLEN macro. + [2728194cb6cf] + + * lib/util/event.c, lib/util/event_poll.c, lib/util/event_select.c, + lib/util/getcwd.c, lib/util/gettime.c, lib/util/glob.c, + lib/util/lbuf.c, lib/util/locking.c, lib/util/mktemp.c, + lib/util/parseln.c, lib/util/secure_path.c, lib/util/setgroups.c, + lib/util/sudo_conf.c, lib/util/sudo_debug.c, lib/util/ttysize.c, + plugins/group_file/group_file.c, plugins/sample/sample_plugin.c, + plugins/sudoers/alias.c, plugins/sudoers/auth/afs.c, + plugins/sudoers/auth/aix_auth.c, plugins/sudoers/auth/bsdauth.c, + plugins/sudoers/auth/dce.c, plugins/sudoers/auth/fwtk.c, + plugins/sudoers/auth/kerb5.c, plugins/sudoers/auth/pam.c, + plugins/sudoers/auth/passwd.c, plugins/sudoers/auth/rfc1938.c, + plugins/sudoers/auth/secureware.c, plugins/sudoers/auth/securid5.c, + plugins/sudoers/auth/sia.c, plugins/sudoers/auth/sudo_auth.c, + plugins/sudoers/check.c, plugins/sudoers/defaults.c, + plugins/sudoers/editor.c, plugins/sudoers/env.c, + plugins/sudoers/find_path.c, plugins/sudoers/getspwuid.c, + plugins/sudoers/goodpath.c, plugins/sudoers/gram.c, + plugins/sudoers/gram.y, plugins/sudoers/group_plugin.c, + plugins/sudoers/interfaces.c, plugins/sudoers/iolog.c, + plugins/sudoers/ldap.c, plugins/sudoers/logging.c, + plugins/sudoers/match.c, plugins/sudoers/match_addr.c, + plugins/sudoers/parse.c, plugins/sudoers/policy.c, + plugins/sudoers/pwutil.c, plugins/sudoers/pwutil_impl.c, + plugins/sudoers/set_perms.c, plugins/sudoers/sssd.c, + plugins/sudoers/sudo_nss.c, plugins/sudoers/sudoers.c, + plugins/sudoers/sudoers_debug.c, plugins/sudoers/sudoreplay.c, + plugins/sudoers/testsudoers.c, plugins/sudoers/timestamp.c, + plugins/sudoers/toke.c, plugins/sudoers/toke.l, + plugins/sudoers/toke_util.c, plugins/sudoers/visudo.c, + plugins/sudoers/visudo_json.c, plugins/system_group/system_group.c, + src/conversation.c, src/exec.c, src/exec_common.c, src/exec_pty.c, + src/get_pty.c, src/hooks.c, src/load_plugins.c, src/net_ifs.c, + src/openbsd.c, src/parse_args.c, src/preserve_fds.c, src/signal.c, + src/solaris.c, src/sudo.c, src/sudo_edit.c, src/sudo_noexec.c, + src/tgetpass.c, src/ttyname.c, src/utmp.c: + There's no need to conditionalize the #include , we + require a POSIX system. + [79389c527c08] + + * include/sudo_compat.h: + Remove some compatibilty defines that should no longer be needed. + [e9136646d1c6] + +2015-06-30 Todd C. Miller + + * NEWS: + Final changes in 1.8.14 + [3a5cd4f2875a] + + * include/sudo_compat.h: + Need to include stddef.h to get rsize_t on Mac OS X for + sudo_memset_s() prototype. + [9615efed4a9a] + + * lib/util/regress/parse_gids/parse_gids_test.c, + lib/util/regress/strsplit/strsplit_test.c: + Add missing exit value. + [484202b53893] + + * lib/util/regress/mktemp/mktemp_test.c: + Add missing fcntl.h include. + [020fe6252d96] + + * configure, configure.ac: + Do check for inet_pton before inet_ntop since we may need to record + dependent libraries for inet_pton when linking our getaddrinfo + replacement. + [fde03eefd88d] + + * include/sudo_debug.h, lib/util/sudo_debug.c: + Fix build on compilers w/o __func__ or __FUNCTION__ + [196d75416cd5] + + * lib/util/util.exp.in: + Remove sudo_evasprintf_v1, missed during alloc.c removal. + [7d0ac7e5909d] + + * lib/util/snprintf.c: + Add missing fcntl.h include. + [23b886deb879] + + * config.h.in, configure, configure.ac: + Add check for inline support. + [061dab0e411c] + +2015-06-29 Todd C. Miller + + * doc/LICENSE: + Add reallocarray.c license. + [b4b4d46309f3] + +2015-06-27 Todd C. Miller + + * doc/CONTRIBUTORS: + Fix entry for Joel Pelaez Jorge. + [386434049903] + +2015-06-26 Todd C. Miller + + * include/sudo_lbuf.h, lib/util/lbuf.c, lib/util/util.exp.in, + plugins/sudoers/ldap.c, plugins/sudoers/parse.c, + plugins/sudoers/sssd.c, plugins/sudoers/sudo_nss.c: + Add an error flag to the lbuf struct to simplify error checking. + Callers of the lbuf functions now check the error flag to tell if a + memory allocation error ocurred. + [bc44b0fbc03b] + + * plugins/sudoers/parse.c, plugins/sudoers/sudo_nss.c, + plugins/sudoers/sudo_nss.h, plugins/sudoers/sudoers.h: + display_privs() and display_cmnd() may need to return -1 on error. + [b6d8826900bb] + +2015-06-25 Todd C. Miller + + * plugins/sudoers/sudo_nss.c, plugins/sudoers/sudoers.c, + plugins/sudoers/sudoers.h: + Return -1, not 0 from sudoers when there is an error (as opposed to + a policy denial). + [5d197fe29e0e] + + * plugins/sudoers/check.c, plugins/sudoers/check.h, + plugins/sudoers/ldap.c, plugins/sudoers/logging.c, + plugins/sudoers/parse.c, plugins/sudoers/policy.c, + plugins/sudoers/prompt.c, plugins/sudoers/sudoers.c, + plugins/sudoers/sudoers.h, plugins/sudoers/timestamp.c: + Check restore_perms() return value in all cases, pushing the return + value back up the call stack. + [c9beeed2b614] + + * doc/CONTRIBUTORS: + Add Joel Pelaez Jorge + [55387b44d6e9] + + * plugins/sudoers/auth/pam.c: + When checking whether the PAM prompt matches "Password:", also check + for the untranslated version. The PAM module might not be using the + localized string even though it exists. From Joel Pelaez Jorge. + Fixes Bug #701 + [d87f6f2ccb42] + +2015-06-24 Todd C. Miller + + * plugins/sudoers/ldap.c: + Silence clang analyzer warning on glibc systems where the first + argument to qsort() is marked as non-NULL. Also change some counters + from into to unsigned int and two flags from int to bool. + [09e400445ca2] + +2015-06-23 Todd C. Miller + + * plugins/sudoers/sudoreplay.c: + Silence clang analyzer warning on glibc systems where the first + argument to qsort() is marked as non-NULL. + [34fa7256f1e2] + + * include/sudo_compat.h, include/sudo_debug.h, include/sudo_util.h, + src/preserve_fds.c: + Use our own bitmap macros instead of borrowing the ones from select. + [51ef403511d9] + + * src/ttyname.c: + Quiet clang analyzer false positive. + [9ebecd6b6b29] + + * src/sesh.c: + Fix uninitialized variables warnings in error case when src file + cannot be opened. At least one of these is a false positive. + [98b417c1307a] + + * lib/util/sudo_debug.c: + Must call round_nfds() with fd+1 since it takes a count not the fd + number. In other words, the lowest value is 1, not 0. + [cc175cba5371] + +2015-06-20 Todd C. Miller + + * lib/util/getline.c, plugins/sudoers/toke_util.c: + It's safe to rely on C89 semantics for realloc(NULL, size). + [b633582413ac] + + * plugins/sudoers/env.c: + malloc() sets errno to ENOMEM on failure so we don't need to set it + explicitly. + [09cb5ceaaec3] + + * include/sudo_compat.h: + No longer need __malloc_like + [a41b69f256f6] + + * lib/util/util.exp.in: + Remove symbols from the now-removed alloc.c. + [da0753d85d20] + + * include/sudo_compat.h, lib/util/aix.c, lib/util/closefrom.c, + lib/util/event.c, lib/util/event_poll.c, lib/util/event_select.c, + lib/util/getaddrinfo.c, lib/util/getcwd.c, lib/util/getgrouplist.c, + lib/util/gethostname.c, lib/util/getline.c, lib/util/getopt_long.c, + lib/util/gettime.c, lib/util/gidlist.c, lib/util/glob.c, + lib/util/key_val.c, lib/util/lbuf.c, lib/util/locking.c, + lib/util/mksiglist.c, lib/util/mksigname.c, lib/util/parseln.c, + lib/util/progname.c, lib/util/pw_dup.c, lib/util/reallocarray.c, + lib/util/regress/atofoo/atofoo_test.c, + lib/util/regress/parse_gids/parse_gids_test.c, + lib/util/regress/progname/progname_test.c, + lib/util/regress/strsplit/strsplit_test.c, + lib/util/regress/sudo_conf/conf_test.c, + lib/util/regress/sudo_parseln/parseln_test.c, lib/util/setgroups.c, + lib/util/sha2.c, lib/util/sig2str.c, lib/util/snprintf.c, + lib/util/strndup.c, lib/util/strsplit.c, lib/util/strtobool.c, + lib/util/strtoid.c, lib/util/strtomode.c, lib/util/strtonum.c, + lib/util/sudo_conf.c, lib/util/sudo_debug.c, lib/util/sudo_dso.c, + lib/util/term.c, lib/util/ttysize.c, plugins/group_file/getgrent.c, + plugins/group_file/group_file.c, plugins/group_file/plugin_test.c, + plugins/sample/sample_plugin.c, plugins/sudoers/alias.c, + plugins/sudoers/audit.c, plugins/sudoers/auth/afs.c, + plugins/sudoers/auth/aix_auth.c, plugins/sudoers/auth/bsdauth.c, + plugins/sudoers/auth/dce.c, plugins/sudoers/auth/fwtk.c, + plugins/sudoers/auth/kerb5.c, plugins/sudoers/auth/pam.c, + plugins/sudoers/auth/passwd.c, plugins/sudoers/auth/rfc1938.c, + plugins/sudoers/auth/secureware.c, plugins/sudoers/auth/securid5.c, + plugins/sudoers/auth/sia.c, plugins/sudoers/auth/sudo_auth.c, + plugins/sudoers/base64.c, plugins/sudoers/boottime.c, + plugins/sudoers/check.c, plugins/sudoers/defaults.c, + plugins/sudoers/editor.c, plugins/sudoers/env.c, + plugins/sudoers/find_path.c, plugins/sudoers/getdate.c, + plugins/sudoers/getdate.y, plugins/sudoers/getspwuid.c, + plugins/sudoers/group_plugin.c, plugins/sudoers/interfaces.c, + plugins/sudoers/iolog.c, plugins/sudoers/iolog_path.c, + plugins/sudoers/linux_audit.c, plugins/sudoers/locale.c, + plugins/sudoers/logging.c, plugins/sudoers/logwrap.c, + plugins/sudoers/match.c, plugins/sudoers/match_addr.c, + plugins/sudoers/parse.c, plugins/sudoers/policy.c, + plugins/sudoers/prompt.c, plugins/sudoers/pwutil_impl.c, + plugins/sudoers/redblack.c, + plugins/sudoers/regress/check_symbols/check_symbols.c, + plugins/sudoers/regress/iolog_path/check_iolog_path.c, + plugins/sudoers/regress/logging/check_wrap.c, + plugins/sudoers/regress/parser/check_addr.c, + plugins/sudoers/regress/parser/check_base64.c, + plugins/sudoers/regress/parser/check_digest.c, + plugins/sudoers/regress/parser/check_fill.c, + plugins/sudoers/regress/parser/check_hexchar.c, + plugins/sudoers/set_perms.c, plugins/sudoers/sssd.c, + plugins/sudoers/sudo_nss.c, plugins/sudoers/sudo_printf.c, + plugins/sudoers/sudoers.c, plugins/sudoers/sudoers_debug.c, + plugins/sudoers/sudoreplay.c, plugins/sudoers/testsudoers.c, + plugins/sudoers/timestamp.c, plugins/sudoers/timestr.c, + plugins/sudoers/toke.c, plugins/sudoers/toke.l, + plugins/sudoers/toke_util.c, plugins/sudoers/tsgetgrpw.c, + plugins/sudoers/visudo.c, plugins/sudoers/visudo_json.c, + plugins/system_group/system_group.c, src/conversation.c, + src/env_hooks.c, src/exec.c, src/exec_common.c, src/exec_pty.c, + src/get_pty.c, src/hooks.c, src/load_plugins.c, src/net_ifs.c, + src/openbsd.c, src/parse_args.c, src/preserve_fds.c, + src/regress/ttyname/check_ttyname.c, src/selinux.c, src/signal.c, + src/solaris.c, src/sudo.c, src/sudo_edit.c, src/tgetpass.c, + src/ttyname.c, src/utmp.c: + Only include stddef.h where it is needed. + [ce597fb7ffb9] + +2015-06-19 Todd C. Miller + + * plugins/sudoers/po/sudoers.pot, po/sudo.pot: + regen + [cad83b927f4e] + + * lib/util/sudo_conf.c, plugins/sudoers/locale.c: + Better handling of setlocale() returning NULL. + [7cd4fcdb528c] + + * lib/util/aix.c, lib/util/gidlist.c, lib/util/sudo_conf.c, + plugins/sudoers/auth/pam.c, plugins/sudoers/auth/rfc1938.c, + plugins/sudoers/defaults.c, plugins/sudoers/editor.c, + plugins/sudoers/env.c, plugins/sudoers/gram.c, + plugins/sudoers/gram.y, plugins/sudoers/group_plugin.c, + plugins/sudoers/iolog.c, plugins/sudoers/iolog_path.c, + plugins/sudoers/ldap.c, plugins/sudoers/linux_audit.c, + plugins/sudoers/logging.c, plugins/sudoers/match.c, + plugins/sudoers/parse.c, plugins/sudoers/policy.c, + plugins/sudoers/prompt.c, plugins/sudoers/sssd.c, + plugins/sudoers/sudoers.c, plugins/sudoers/sudoers_debug.c, + plugins/sudoers/sudoreplay.c, plugins/sudoers/testsudoers.c, + plugins/sudoers/visudo.c, src/conversation.c, src/exec.c, + src/exec_common.c, src/exec_pty.c, src/load_plugins.c, + src/parse_args.c, src/preserve_fds.c, src/selinux.c, src/sesh.c, + src/sudo.c, src/sudo_edit.c: + Add function name to "unable to allocate memory" warnings. + [98c07e26a13e] + + * configure, configure.ac, include/sudo_compat.h, lib/util/aix.c, + lib/util/closefrom.c, lib/util/event.c, lib/util/event_poll.c, + lib/util/event_select.c, lib/util/getaddrinfo.c, lib/util/getcwd.c, + lib/util/getgrouplist.c, lib/util/gethostname.c, lib/util/getline.c, + lib/util/getopt_long.c, lib/util/gettime.c, lib/util/gidlist.c, + lib/util/glob.c, lib/util/key_val.c, lib/util/lbuf.c, + lib/util/locking.c, lib/util/mksiglist.c, lib/util/mksigname.c, + lib/util/parseln.c, lib/util/progname.c, lib/util/pw_dup.c, + lib/util/reallocarray.c, lib/util/regress/atofoo/atofoo_test.c, + lib/util/regress/parse_gids/parse_gids_test.c, + lib/util/regress/progname/progname_test.c, + lib/util/regress/strsplit/strsplit_test.c, + lib/util/regress/sudo_conf/conf_test.c, + lib/util/regress/sudo_parseln/parseln_test.c, + lib/util/regress/tailq/hltq_test.c, lib/util/setgroups.c, + lib/util/sha2.c, lib/util/sig2str.c, lib/util/snprintf.c, + lib/util/strndup.c, lib/util/strsplit.c, lib/util/strtobool.c, + lib/util/strtoid.c, lib/util/strtomode.c, lib/util/strtonum.c, + lib/util/sudo_conf.c, lib/util/sudo_debug.c, lib/util/sudo_dso.c, + lib/util/term.c, lib/util/ttysize.c, plugins/group_file/getgrent.c, + plugins/group_file/group_file.c, plugins/sample/sample_plugin.c, + plugins/sudoers/alias.c, plugins/sudoers/audit.c, + plugins/sudoers/auth/afs.c, plugins/sudoers/auth/aix_auth.c, + plugins/sudoers/auth/bsdauth.c, plugins/sudoers/auth/dce.c, + plugins/sudoers/auth/fwtk.c, plugins/sudoers/auth/kerb5.c, + plugins/sudoers/auth/pam.c, plugins/sudoers/auth/passwd.c, + plugins/sudoers/auth/rfc1938.c, plugins/sudoers/auth/secureware.c, + plugins/sudoers/auth/securid5.c, plugins/sudoers/auth/sia.c, + plugins/sudoers/auth/sudo_auth.c, plugins/sudoers/base64.c, + plugins/sudoers/boottime.c, plugins/sudoers/check.c, + plugins/sudoers/defaults.c, plugins/sudoers/editor.c, + plugins/sudoers/env.c, plugins/sudoers/find_path.c, + plugins/sudoers/getdate.c, plugins/sudoers/getdate.y, + plugins/sudoers/getspwuid.c, plugins/sudoers/gram.c, + plugins/sudoers/gram.y, plugins/sudoers/group_plugin.c, + plugins/sudoers/interfaces.c, plugins/sudoers/iolog.c, + plugins/sudoers/iolog_path.c, plugins/sudoers/ldap.c, + plugins/sudoers/linux_audit.c, plugins/sudoers/locale.c, + plugins/sudoers/logging.c, plugins/sudoers/logwrap.c, + plugins/sudoers/match.c, plugins/sudoers/match_addr.c, + plugins/sudoers/parse.c, plugins/sudoers/policy.c, + plugins/sudoers/prompt.c, plugins/sudoers/pwutil.c, + plugins/sudoers/pwutil_impl.c, plugins/sudoers/redblack.c, + plugins/sudoers/regress/check_symbols/check_symbols.c, + plugins/sudoers/regress/iolog_path/check_iolog_path.c, + plugins/sudoers/regress/logging/check_wrap.c, + plugins/sudoers/regress/parser/check_addr.c, + plugins/sudoers/regress/parser/check_base64.c, + plugins/sudoers/regress/parser/check_digest.c, + plugins/sudoers/regress/parser/check_fill.c, + plugins/sudoers/regress/parser/check_hexchar.c, + plugins/sudoers/set_perms.c, plugins/sudoers/sssd.c, + plugins/sudoers/sudo_nss.c, plugins/sudoers/sudo_printf.c, + plugins/sudoers/sudoers.c, plugins/sudoers/sudoers_debug.c, + plugins/sudoers/sudoreplay.c, plugins/sudoers/testsudoers.c, + plugins/sudoers/timestamp.c, plugins/sudoers/timestr.c, + plugins/sudoers/toke.c, plugins/sudoers/toke.l, + plugins/sudoers/toke_util.c, plugins/sudoers/tsgetgrpw.c, + plugins/sudoers/visudo.c, plugins/sudoers/visudo_json.c, + plugins/system_group/system_group.c, src/conversation.c, + src/env_hooks.c, src/exec.c, src/exec_common.c, src/exec_pty.c, + src/get_pty.c, src/hooks.c, src/load_plugins.c, src/net_ifs.c, + src/openbsd.c, src/parse_args.c, src/preserve_fds.c, + src/regress/ttyname/check_ttyname.c, src/signal.c, src/solaris.c, + src/sudo.c, src/sudo_edit.c, src/tgetpass.c, src/ttyname.c, + src/utmp.c: + We require ANSI C so stop using the obsolete STDC_HEADERS. + [35a5a680e5fe] + + * config.h.in, configure, configure.ac: + Add back _REENTRANT define on HP-UX to expose strtok_r on some + versions. We may need to define it on other systems too. + [12c36f12eed2] + + * lib/util/getgrouplist.c, lib/util/regress/glob/globtest.c, + lib/util/sudo_debug.c, plugins/group_file/getgrent.c, + plugins/group_file/plugin_test.c, plugins/sample/sample_plugin.c, + plugins/sudoers/group_plugin.c, plugins/sudoers/interfaces.c, + plugins/sudoers/ldap.c, plugins/sudoers/logging.c, + plugins/sudoers/regress/logging/check_wrap.c, + plugins/sudoers/sudo_nss.c, plugins/sudoers/sudoreplay.c, + plugins/sudoers/tsgetgrpw.c: + Use strtok_r() instead of strtok() + [6b8e3c253dcf] + + * configure, configure.ac: + Fix check for strnlen() when cross-compiling. + [e501c508891a] + + * plugins/sudoers/interfaces.c: + Use sudo_strsplit() in dump_interfaces. + [b76ee2f47f37] + +2015-06-18 Todd C. Miller + + * lib/util/inet_pton.c, lib/util/key_val.c, lib/util/lbuf.c, + lib/util/locking.c, lib/util/parseln.c, + lib/util/regress/parse_gids/parse_gids_test.c, + lib/util/regress/progname/progname_test.c, + lib/util/regress/strsplit/strsplit_test.c, + lib/util/regress/sudo_conf/conf_test.c, + lib/util/regress/sudo_parseln/parseln_test.c, + lib/util/regress/tailq/hltq_test.c, lib/util/sha2.c, + lib/util/snprintf.c, lib/util/strtobool.c, lib/util/term.c, + plugins/group_file/getgrent.c, plugins/group_file/group_file.c, + plugins/sample/sample_plugin.c, plugins/sudoers/boottime.c, + plugins/sudoers/editor.c, plugins/sudoers/getdate.c, + plugins/sudoers/getdate.y, plugins/sudoers/interfaces.c, + plugins/sudoers/iolog_path.c, plugins/sudoers/policy.c, + plugins/sudoers/pwutil.c, plugins/sudoers/pwutil_impl.c, + plugins/sudoers/regress/check_symbols/check_symbols.c, + plugins/sudoers/regress/iolog_path/check_iolog_path.c, + plugins/sudoers/regress/logging/check_wrap.c, + plugins/sudoers/regress/parser/check_base64.c, + plugins/sudoers/regress/parser/check_digest.c, + plugins/sudoers/regress/parser/check_hexchar.c, + plugins/sudoers/sudoers.c, plugins/sudoers/sudoreplay.c, + plugins/sudoers/tsgetgrpw.c, plugins/system_group/system_group.c, + src/conversation.c, src/exec_pty.c, src/net_ifs.c, src/openbsd.c, + src/preserve_fds.c, src/regress/ttyname/check_ttyname.c, + src/solaris.c, src/sudo.c, src/tgetpass.c, src/ttyname.c, + src/utmp.c: + Remove obsolete memory.h include. + [0c1351d614a9] + + * config.h.in, configure, configure.ac, lib/util/getcwd.c, + lib/util/gethostname.c, lib/util/glob.c, lib/util/locking.c, + lib/util/parseln.c, lib/util/pw_dup.c, lib/util/reallocarray.c, + lib/util/snprintf.c, lib/util/strndup.c, plugins/sudoers/toke.c, + plugins/sudoers/toke.l, plugins/sudoers/toke_util.c, + src/env_hooks.c: + Remove support for the obsolete malloc.h header. + [2a118de27d4e] + + * config.h.in, configure, configure.ac, plugins/sudoers/defaults.c, + plugins/sudoers/logging.c: + Remove BROKEN_SYSLOG define which was for obsolete versions of HP- + UX. Remove last remnants of 4.2BSD syslog support. + [e234515f515d] + + * lib/util/sudo_conf.c: + Use sudo_strsplit() instead of doing the equivalent manually. + [220f2e4a0e68] + + * lib/util/regress/strsplit/strsplit_test.c: + Test strsplit behavior with an empty string. + [62ae80dcee4a] + + * lib/util/Makefile.in, lib/zlib/Makefile.in, + plugins/group_file/Makefile.in, plugins/sample/Makefile.in, + plugins/sudoers/Makefile.in, plugins/system_group/Makefile.in, + src/Makefile.in: + Allow "make LIBTOOL=/path/to/libtool" to work properly. + [f9e5f7109107] + + * MANIFEST, plugins/sudoers/Makefile.in, plugins/sudoers/editor.c, + plugins/sudoers/find_path.c, plugins/sudoers/goodpath.c, + plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h, + plugins/sudoers/visudo.c: + Use a common function for resolviong the user's editor in sudoedit + and visudo. The find_path() function now returns a dynamically + allocated path instead of using a static string. + [97fe58966144] + + * config.h.in, configure, configure.ac, lib/util/Makefile.in, + lib/zlib/Makefile.in, plugins/group_file/Makefile.in, + plugins/sample/Makefile.in, plugins/sudoers/Makefile.in, + plugins/system_group/Makefile.in, src/Makefile.in: + Replace use of OSDEFS with config.h defines. Rename DEFS in + Makefile.in to CPPDEFS and include in CPPFLAGS. Bring back + _BSD_SOURCE as a config.h define. Remove obsolescent _REENTRANT + define. + [0d76a12adca8] + +2015-06-17 Todd C. Miller + + * MANIFEST, include/sudo_alloc.h, lib/util/Makefile.in, + lib/util/alloc.c: + Remove now-unused sudo_alloc.h and alloc.c + [0fe70085c75c] + + * plugins/sudoers/Makefile.in, src/Makefile.in, src/conversation.c, + src/env_hooks.c, src/exec.c, src/exec_common.c, src/exec_pty.c, + src/hooks.c, src/load_plugins.c, src/net_ifs.c, src/parse_args.c, + src/preserve_fds.c, src/regress/ttyname/check_ttyname.c, + src/selinux.c, src/sesh.c, src/sudo.c, src/sudo.h, src/sudo_edit.c, + src/ttyname.c: + Avoid using exiting allocators in the front end. + [be0ca60facf8] + + * include/sudo_conf.h, include/sudo_lbuf.h, lib/util/Makefile.in, + lib/util/aix.c, lib/util/gidlist.c, lib/util/lbuf.c, + lib/util/sudo_conf.c, lib/util/sudo_debug.c: + Use non-exiting allocators in libsudo_util. + [d9b7cf17b9b4] + + * plugins/sudoers/ldap.c, plugins/sudoers/logging.c: + Remove asprintf() return value warnings. + [fe25ce11f96a] + + * config.h.in, configure, configure.ac: + Use AC_FUNC_STRNLEN to check for broken strnlen() on AIX. This + requires that we use AC_USE_SYSTEM_EXTENSIONS so remove things from + OSDEFS that are enabled by AC_USE_SYSTEM_EXTENSIONS. + [1f64269cab6e] + + * plugins/sudoers/ldap.c: + Remove extraneous semicolons in CHECK_* macros. + [ef99aa3c9d70] + + * plugins/sudoers/regress/iolog_path/check_iolog_path.c, + plugins/sudoers/sudoers.c, plugins/sudoers/testsudoers.c, + plugins/sudoers/visudo.c: + Remove remaining SUDO_MAIN remnants. + [1c077699f444] + + * plugins/sudoers/Makefile.in, plugins/sudoers/alias.c, + plugins/sudoers/auth/aix_auth.c, plugins/sudoers/auth/bsdauth.c, + plugins/sudoers/auth/kerb5.c, plugins/sudoers/auth/pam.c, + plugins/sudoers/auth/passwd.c, plugins/sudoers/auth/rfc1938.c, + plugins/sudoers/auth/secureware.c, plugins/sudoers/auth/sia.c, + plugins/sudoers/check.c, plugins/sudoers/defaults.c, + plugins/sudoers/defaults.h, plugins/sudoers/env.c, + plugins/sudoers/find_path.c, plugins/sudoers/getspwuid.c, + plugins/sudoers/group_plugin.c, plugins/sudoers/interfaces.c, + plugins/sudoers/interfaces.h, plugins/sudoers/iolog.c, + plugins/sudoers/iolog_path.c, plugins/sudoers/linux_audit.c, + plugins/sudoers/locale.c, plugins/sudoers/logging.h, + plugins/sudoers/match.c, plugins/sudoers/parse.c, + plugins/sudoers/policy.c, plugins/sudoers/prompt.c, + plugins/sudoers/regress/iolog_path/check_iolog_path.c, + plugins/sudoers/regress/parser/check_addr.c, + plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h, + plugins/sudoers/sudoers_debug.c, plugins/sudoers/sudoreplay.c, + plugins/sudoers/testsudoers.c, plugins/sudoers/visudo.c: + Use non-exiting allocatings in the sudoers plugin. + [a5668cb9c516] + +2015-06-16 Todd C. Miller + + * plugins/sudoers/sssd.c: + Use non-exiting allocators in the sudoers SSSD backend. + [dba29b55ac0b] + + * plugins/sudoers/ldap.c: + Use non-exiting allocators in the sudoers LDAP backend. + [37bfa441345a] + + * lib/util/Makefile.in: + regen dependencies + [5be6eb005946] + +2015-06-15 Todd C. Miller + + * configure, lib/util/Makefile.in, mkdep.pl: + Add missing dependency info for reallocarray.lo in + lib/util/Makefile.in and regen configure to match last configure.ac + change. + [da1fc49b53dc] + + * plugins/sudoers/ldap.c: + Use \28 and \29 instead of \( and \) in the ldap query as per RFC + 2254. Fixes netgroup queries on AIX. From Steven Soulen. + [33267d6243aa] + +2015-06-13 Todd C. Miller + + * lib/util/glob.c: + Move pattern length check until after we have initialized the glob_t + so we can call globfree() even on error. From Frank Denis. + [a246f9054395] + +2015-06-12 Todd C. Miller + + * plugins/sudoers/sudoers.c, src/sudo.c: + We need to unlimit RLIMIT_NPROC in sudoers as well as the sudo front + end since set_perms() and restore_perms change the read uid and may + fail with EAGAIN on Linux kernels prior to 3.1. + [e6a03c31f4e5] + +2015-06-08 Todd C. Miller + + * doc/sudo.cat, doc/sudo.man.in, doc/sudo.mdoc.in: + Fix underlining of "root" in -u option descriptions. Bug #699 + [b3afe47d9798] + + * doc/UPGRADE, src/load_plugins.c: + Remove support for converting plugin.so -> plugin.sl on HP-UX when + plugin.so can not be found. This was a temporary hack for using an + older (pre 1.8.7) sudoers plugin with a newer sudo front-end. + [561e2ce444ed] + +2015-06-05 Todd C. Miller + + * lib/util/event.c, lib/util/event_select.c: + Add debugging output on memory alloc failure. Add missing checks in + event_select.c for reallocarray() failure. + [0853c7bcbeaa] + + * lib/util/event_poll.c: + Use non-exiting allocators. + [5ed0e276b551] + +2015-06-04 Todd C. Miller + + * plugins/sudoers/logging.c, plugins/sudoers/sudoers.c, + plugins/sudoers/sudoers.h: + Bring back VALIDATE_ERROR which will be used in the case of memory + allocation errors. + [784c885db95c] + +2015-06-03 Todd C. Miller + + * lib/util/snprintf.c: + If asprintf() or vasprintf() fail, set the dest pointer to NULL like + BSD and Solaris do. This appears to be the direction glibc is going + as well. + [92fb2283dc9a] + +2015-05-28 Todd C. Miller + + * plugins/sudoers/env.c: + Use a stack buffer for the validate_env_vars() error message. + [69df3a0cbc2b] + +2015-05-27 Todd C. Miller + + * lib/util/fatal.c: + Fix typo/thinko in static buffer conversion; use vsnprintf() not + snprintf() + [9d42fb3a94f6] + + * plugins/sudoers/ldap.c: + Fix old gcc2 variadic macro support. + [fd951ed8865e] + + * plugins/sudoers/visudo.c: + Restore old behavior where visudo prevents you from making the main + sudoers file zero length. + [b03ef908120f] + + * plugins/sudoers/logging.c, plugins/sudoers/logging.h, + plugins/sudoers/sudoers.c: + Non-exiting allocators for log functions. If log_allowed() fails the + user may not run the command. We don't try to return early for + log_failure(), log_auth_failure() or log_denial() as we would not + run the command in that case. + [40c3d0dd75bc] + + * plugins/sudoers/alias.c, plugins/sudoers/gram.c, + plugins/sudoers/gram.y, plugins/sudoers/toke.c, + plugins/sudoers/toke.l, plugins/sudoers/toke_util.c: + Use non-exiting allocators in the parser (much of it already did). + [f14222e5ad1b] + + * lib/util/aix.c, plugins/sudoers/pwutil.c, + plugins/sudoers/pwutil_impl.c: + Use non-existing allocators in the passwd/group cache functions. + [86bbe840f348] + + * MANIFEST, configure.ac, lib/util/alloc.c, lib/util/reallocarray.c: + Add standalone reallocarray.c from OpenBSD instead of rolling our + own. + [36ec5840729e] + + * plugins/sudoers/alias.c, plugins/sudoers/gram.c, + plugins/sudoers/gram.y, plugins/sudoers/iolog.c, + plugins/sudoers/parse.h, plugins/sudoers/pwutil.c, + plugins/sudoers/redblack.c, plugins/sudoers/redblack.h, + plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h, + plugins/sudoers/testsudoers.c, plugins/sudoers/visudo.c: + Use non-exiting allocators in the redblack tree and fix the fallout. + Also switch to non-exiting allocators in affected code blocks. + [bca56cf769cb] + + * plugins/sudoers/alias.c, plugins/sudoers/gram.c, + plugins/sudoers/gram.y, plugins/sudoers/parse.h: + The error string returned by alias_add should be const. + [b378188a0a8f] + + * plugins/sudoers/policy.c: + Fix typo, efree vs. free. + [9146ba7473ca] + + * plugins/sudoers/policy.c, src/exec_common.c, src/sudo.c: + Add a few missing sudo_new_key_val() return value checks. Also use + non-exiting allocators for consistency. + [2ae76a679052] + +2015-05-26 Todd C. Miller + + * MANIFEST, lib/util/Makefile.in, + lib/util/regress/parse_gids/parse_gids_test.c, + lib/util/regress/strsplit/strsplit_test.c: + Add unit tests for strsplit and parse_gid_list. + [e08c5ff7b5f0] + + * MANIFEST, include/sudo_util.h, lib/util/Makefile.in, + lib/util/strsplit.c, lib/util/util.exp.in, + plugins/sudoers/sudoers.c: + Add sudo_strsplit(), similar to strtok_r() but non-destructive and + operates on non-C strings (requires a length parameter). + [45fb50775249] + +2015-05-20 Todd C. Miller + + * plugins/sudoers/auth/sia.c: + Use reallocarray() instead of sudo_emallocarray() and return an + error on allocation failure. + [fee12ac1e0c8] + + * plugins/sudoers/auth/kerb5.c: + In our krb5_get_init_creds_opt_alloc() replacement use malloc() + instead of sudo_emalloc() and return KRB5_CC_NOMEM on allocation + failure. Only old versions of Kerberos V will need this. + [95ac6c5b7b60] + + * lib/util/event.c, lib/util/event_select.c: + Use non-exiting allocators. + [91bbc657901d] + +2015-05-26 Todd C. Miller + + * lib/util/fatal.c: + Use a static buffer for sudo_warn/sudo_fatal messages where + possible. + [6e1d6ecc022d] + + * include/sudo_compat.h: + Fix sudo_strnlen() prototype. + [1367bd9227b3] + + * MANIFEST, config.h.in, configure, configure.ac, + include/sudo_compat.h, lib/util/Makefile.in, lib/util/strndup.c, + mkdep.pl: + Add strndup() for those without it. As strndup.c uses strnlen(), use + our own if it is missing. + [cf904a9c68f7] + + * lib/util/strnlen.c: + Add missing sudo_ prefix and include sudo_compat.h. + [d5e5dfc3fd20] + + * MANIFEST, config.h.in, configure, configure.ac, + include/sudo_compat.h, lib/util/strnlen.c: + Add strnlen() replacement needed for glob.c. Only used if no glob() + and no strnlen(). + [bb6b7c4549b1] + +2015-05-21 Todd C. Miller + + * plugins/sudoers/logging.h, plugins/sudoers/sudoers.h: + Get rid of SUDO_MAIN. Modern compilers don't warn about mixing + extern and auto declarations unless they conflict. + [a273b73bca6d] + + * config.h.in, configure.ac, include/compat/endian.h, + include/compat/fnmatch.h, include/compat/getaddrinfo.h, + include/compat/getopt.h, include/compat/glob.h, + include/compat/nss_dbdefs.h, include/compat/sha2.h, + include/compat/stdbool.h, include/compat/timespec.h, + include/sudo_alloc.h, include/sudo_compat.h, include/sudo_conf.h, + include/sudo_debug.h, include/sudo_dso.h, include/sudo_event.h, + include/sudo_fatal.h, include/sudo_gettext.h, include/sudo_lbuf.h, + include/sudo_plugin.h, include/sudo_queue.h, include/sudo_util.h, + lib/util/fatal.c, plugins/sudoers/bsm_audit.h, + plugins/sudoers/check.h, plugins/sudoers/defaults.h, + plugins/sudoers/ins_2001.h, plugins/sudoers/ins_classic.h, + plugins/sudoers/ins_csops.h, plugins/sudoers/ins_goons.h, + plugins/sudoers/insults.h, plugins/sudoers/interfaces.h, + plugins/sudoers/iolog.h, plugins/sudoers/linux_audit.h, + plugins/sudoers/logging.h, plugins/sudoers/parse.c, + plugins/sudoers/parse.h, plugins/sudoers/pwutil.h, + plugins/sudoers/redblack.c, plugins/sudoers/redblack.h, + plugins/sudoers/regress/iolog_path/check_iolog_path.c, + plugins/sudoers/solaris_audit.h, plugins/sudoers/sssd.c, + plugins/sudoers/sudo_nss.h, plugins/sudoers/sudo_printf.c, + plugins/sudoers/sudoers.c, plugins/sudoers/sudoers.h, + plugins/sudoers/sudoers_debug.h, plugins/sudoers/sudoers_version.h, + plugins/sudoers/testsudoers.c, plugins/sudoers/toke.c, + plugins/sudoers/toke.h, plugins/sudoers/toke.l, + plugins/sudoers/visudo.c, src/net_ifs.c, src/sudo.h, + src/sudo_exec.h, src/sudo_plugin_int.h, src/sudo_usage.h.in: + Avoid using a leading underbar in defines as they are reserved in + ISO C. + [a442d88c6490] + + * Makefile.in, doc/Makefile.in, examples/Makefile.in, + include/Makefile.in, lib/util/Makefile.in, lib/zlib/Makefile.in, + plugins/group_file/Makefile.in, plugins/sample/Makefile.in, + plugins/sudoers/Makefile.in, plugins/sudoers/auth/afs.c, + plugins/sudoers/auth/aix_auth.c, plugins/sudoers/auth/bsdauth.c, + plugins/sudoers/auth/dce.c, plugins/sudoers/auth/fwtk.c, + plugins/sudoers/auth/kerb5.c, plugins/sudoers/auth/pam.c, + plugins/sudoers/auth/rfc1938.c, plugins/sudoers/auth/secureware.c, + plugins/sudoers/auth/securid5.c, plugins/sudoers/auth/sia.c, + plugins/sudoers/bsm_audit.c, plugins/sudoers/linux_audit.c, + plugins/sudoers/solaris_audit.c, plugins/sudoers/sssd.c, + plugins/system_group/Makefile.in, src/Makefile.in, src/selinux.c: + Add target for "make splint". A few files need extra guards to avoid + errors on systems where they would not otherwise be compiled. No + warnings from splint. + [64fc04debc58] + +2015-05-18 Todd C. Miller + + * config.h.in, configure, configure.ac, src/sudo.c: + There should be no need to check for tzset() as it is POSIX. + [50825eb75c97] + + * configure, configure.ac: + Add sudo_reallocarrary to util.exp.in if reallocarray is not found. + [32588e00bb33] + +2015-05-15 Todd C. Miller + + * NEWS: + NLS now works on Mac OS X properly. + [1485c9e51b04] + + * configure, configure.ac, src/Makefile.in: + Force flat namespace on darwin to make the getenv() hooking work as + it does on ELF. + [0837cc3559ce] + +2015-05-14 Todd C. Miller + + * lib/util/alloc.c, lib/util/snprintf.c, + plugins/sample/sample_plugin.c, plugins/sudoers/auth/rfc1938.c, + plugins/sudoers/redblack.c, plugins/sudoers/testsudoers.c, + plugins/sudoers/toke_util.c: + No need to cast malloc() return value. + [09c7236d3e1a] + + * lib/util/getcwd.c, lib/util/getline.c, lib/util/glob.c, + plugins/sudoers/env.c, plugins/sudoers/toke.c, + plugins/sudoers/toke.l: + Use reallocarray where possible. + [2b5957a38baa] + + * config.h.in, configure, configure.ac, include/sudo_compat.h, + lib/util/alloc.c: + Add reallocarray() for those without it. + [3ac5a4abe077] + +2015-05-13 Todd C. Miller + + * NEWS: + The getenv() hook still doesn't work on Mac OS X. + [d9297b9ff54c] + +2015-05-12 Todd C. Miller + + * include/sudo_fatal.h, lib/util/fatal.c: + In sudo_warn_gettext_v1() call dgettext() not gettext() to make sure + the domain is set correctly. The sudoers plugin uses its own text + domain. + [f7ce0100ff5c] + +2015-05-11 Todd C. Miller + + * doc/Makefile.in: + man pages should explicitly depend on config.status since it is used + to substitute in variables/settings. + [bebe8e19d767] + + * doc/sudo.cat, doc/sudo.conf.cat, doc/sudo_plugin.cat, + doc/sudoers.cat, doc/sudoers.ldap.cat, doc/sudoers.man.in, + doc/sudoreplay.cat, doc/visudo.cat: + regen + [2e613d7bb477] + + * NEWS, configure, configure.ac: + Sudo 1.8.14 + [66e33bc0d18e] + + * INSTALL, MANIFEST, aclocal.m4, config.h.in, configure, configure.ac, + include/sudo_fatal.h, lib/util/Makefile.in, lib/util/fatal.c, + lib/util/locale_weak.c, lib/util/util.exp.in, + m4/ax_sys_weak_alias.m4, mkdep.pl, plugins/sudoers/Makefile.in, + plugins/sudoers/locale.c, plugins/sudoers/logging.h, + plugins/sudoers/sudoers.c, src/Makefile.in, src/locale_stub.c: + Instead of trying to make weak functions work on all platforms, just + use a registration function for a plugin-specific setlocale + function. The sudoers version just wraps sudoers_setlocale(). + [0eef64f41cdf] + + * src/parse_args.c: + Fix indentation of -a flag help line. + [a2ed556b6454] + + * include/sudo_compat.h: + Fix compilation when HAVE_DECL_SIG2STR_MAX is not defined. + [31aa465affaa] + + * doc/Makefile.in: + Add lint target to run "mandoc -Tlint" over the manuals. + [63ed14d91adc] + +2015-05-08 Todd C. Miller + + * include/sudo_compat.h: + HAVE_DECL_SIG2STR_MAX is always defined so use a + !HAVE_DECL_SIG2STR_MAX check instead of #ifndef. + [65cc03302d39] + +2015-05-07 Todd C. Miller + + * src/tgetpass.c: + Sync tty_present() with sudoers version. + [040c05e68627] + + * src/load_plugins.c: + sudo_check_plugin() returns bool. + [15b2851bfb90] + + * plugins/sudoers/match.c: + In usergr_matches() matched should be bool but we have to take care + to handle group_plugin_query() returning a value other than 0/1. + [c120901f71c7] + + * plugins/sudoers/ldap.c: + sudo_ldap_check_non_unix_group() returns bool, not int. + [d12e9242454f] + + * plugins/sudoers/logging.c: + Convert two debug_return_int to debug_return_bool. + [594d0fc8efda] + + * include/sudo_debug.h, lib/util/sudo_debug.c, + plugins/sudoers/auth/dce.c, plugins/sudoers/check.c, + plugins/sudoers/env.c, plugins/sudoers/group_plugin.c, + plugins/sudoers/iolog.c, plugins/sudoers/ldap.c, + plugins/sudoers/match.c, plugins/sudoers/policy.c, + plugins/sudoers/sudoers.c, src/sudo.c: + Previously, debug_return_bool was the same as debug_return_int + except that it logged true/false for 1/0. However, this appears to + trigger a bug in some compilers. To avoid this, debug_return_bool + now uses bool, not int. Callers that were passing it an int have + been converted to use debug_return_int instead. + [ca142b5a9433] + + * src/get_pty.c, src/sudo.h: + get_pty() should return bool + [2c72c8d3603b] + + * src/sudo.h, src/tgetpass.c: + Make tty_present static to tgetpass.c + [bb73a2cc8754] + + * config.h.in, configure, configure.ac, include/sudo_compat.h: + Add configure check for SIG2STR_MAX, which may be missing on + UnixWare. + [e9dcac23c639] + + * m4/ax_sys_weak_alias.m4: + Need to quote $GCC as it may include arguments. From Tim Rice. + [9ed8a3be94bf] + + * MANIFEST: + Add missing m4/ax_sys_weak_alias.m4 + [269a8d5bfb49] + +2015-04-28 Todd C. Miller + + * mkpkg: + There's no point in building i386 binaries for Mac OS X 10.7 and + higher. + [e8876ea36d14] + +2015-04-27 Todd C. Miller + + * plugins/sudoers/po/fi.mo, plugins/sudoers/po/fi.po, + plugins/sudoers/po/fr.mo, plugins/sudoers/po/fr.po, po/ja.mo, + po/ja.po: + Sync with translationproject.org + [414c51286530] + +2015-04-26 Todd C. Miller + + * plugins/sudoers/bsm_audit.c: + Only fall back on AUE_DARWIN_sudo if au_preselect() fails. + [aea2f3a60b46] + +2015-04-25 Todd C. Miller + + * plugins/sudoers/bsm_audit.c: + Work around a problem on Mac OS X 10.10 which defines AUE_sudo but + where au_preselect() only accepts AUE_DARWIN_sudo (the old value). + [b5d32d6453d1] + +2015-04-22 Todd C. Miller + + * src/env_hooks.c: + Don't use dlsym() to find the libc getenv() since this may allocate + memory on some systems (glibc) which leads to a hang if malloc() + calls getenv() (jemalloc). + [441846664820] + + * src/sudo.c: + Defer conversation initialization until right before plugins are + initialized. + [83db53d4945c] + + * include/sudo_debug.h, src/sudo.c: + Split variable declaration out of debug_decl into debug_decl_vars() + so we can use it in main() when we know sudo_debug_enter() cannot + succeed. + [6931948a57f8] + +2015-04-16 Todd C. Miller + + * plugins/sudoers/sudoers.c, plugins/sudoers/testsudoers.c: + When creating a passwd struct from a uid that is not in the passwd + database, set pw_gid to the user's gid instead of whatever the user + specified via the -g flag (or 0 if no -g). + [4154970432df] + +2015-04-14 Todd C. Miller + + * plugins/sudoers/ldap.c: + Add some ldap_err2string() debugging when the LDAP search fails. + Adapted from a diff from Steven Soulen. + [e08d38481041] + +2015-04-13 Todd C. Miller + + * plugins/sudoers/po/da.mo, plugins/sudoers/po/da.po, + plugins/sudoers/po/sr.mo, plugins/sudoers/po/sr.po, po/sr.mo, + po/sr.po: + Sync with translationproject.org + [cbf24072ad07] + +2015-04-10 Todd C. Miller + + * doc/CONTRIBUTORS: + Add David Michael and Andrey Klyachkin. + [e153a9b46e1f] + + * sudo.pp: + Sync tmpfiles.d/sudo.conf with init.d/sudo.conf.in + [9e3945c1fe6e] + + * include/sudo_util.h: + Avoid struct assignment when stashing mtime since AIX at least uses + a struct st_timespec that differs from struct timespec. From Andrey + Klyachkin. + [e267ea5b019e] + +2015-04-09 Todd C. Miller + + * sudo.pp: + Work around a bug in pp that caused a warning when exampledir is a + subdir of docdir. + [d81db98f215f] + + * plugins/sudoers/solaris_audit.c: + Add sys/types.h + [e0794f05e95c] + + * lib/util/getopt_long.c, lib/util/mksiglist.c, lib/util/mksigname.c, + lib/util/regress/fnmatch/fnm_test.c, + lib/util/regress/glob/globtest.c, lib/util/sha2.c, + plugins/sudoers/regress/parser/check_base64.c, + plugins/sudoers/regress/parser/check_digest.c, + plugins/sudoers/regress/parser/check_hexchar.c: + Include sys/types.h instead of unistd.h to get uid_t and gid_t. Add + missing include of sys/types.h to a few places. + [86eb67f3c41a] + +2015-04-08 Todd C. Miller + + * mkpkg: + Remove unintended commit + [2eeeb74b9174] + + * init.d/sudo.conf.in: + Add tmpfiles.d/sudo.conf template. + [ead9bb7b5328] + +2015-04-07 Todd C. Miller + + * .hgignore, INSTALL, MANIFEST, Makefile.in, configure, configure.ac, + mkpkg, src/Makefile.in, sudo.pp: + Create template tmpfiles.d/sudo.conf for installation instead of + creating one via echo commands in the Makefile. + + Add --enable-tmpfiles.d configure option to enable/disable use of + tmpfiles.d and override the default directory. + + Use --disable-tmpfiles.d in mkpkg so we no longer need to ignore + tmpfiles.d/sudo.conf in sudo.pp. + [930983f88927] + +2015-04-06 Todd C. Miller + + * INSTALL, Makefile.in, configure, configure.ac, doc/sudoers.mdoc.in, + examples/Makefile.in, mkpkg, sudo.pp: + Make exampledir configurable and default to + DATAROOTDIR/examples/sudo on BSD systems. + [4c1271298712] + +2015-04-07 Todd C. Miller + + * sudo.pp: + Fix setting of pp_rpm_version when there is no patchlevel present. + Also tighten up the regexp for pp_rpm_release. + [d6a89aafd99d] + +2015-04-06 Todd C. Miller + + * src/Makefile.in, sudo.pp: + Install /usr/lib/tmpfiles.d/sudo.conf on systems with systemd but do + not package it. For packages we create /usr/lib/tmpfiles.d/sudo.conf + as needed in the postinstall script. + [522666bc079f] + +2015-03-22 Todd C. Miller + + * doc/sudo.cat, doc/sudo.conf.cat, doc/sudo.conf.man.in, + doc/sudo.conf.mdoc.in, doc/sudo.man.in, doc/sudo.mdoc.in, + doc/sudo_plugin.cat, doc/sudo_plugin.man.in, + doc/sudo_plugin.mdoc.in, doc/sudoers.cat, doc/sudoers.ldap.cat, + doc/sudoers.ldap.man.in, doc/sudoers.ldap.mdoc.in, + doc/sudoers.man.in, doc/sudoers.mdoc.in, doc/sudoreplay.cat, + doc/sudoreplay.man.in, doc/sudoreplay.mdoc.in, doc/visudo.cat, + doc/visudo.man.in, doc/visudo.mdoc.in: + Fix "mandoc -Tlint" warnings. Sync AUTHORS section in man pages. + Regenerate all man pages. + [34e4149bb225] + + * lib/util/Makefile.in, plugins/sudoers/Makefile.in, src/Makefile.in: + Make libsudo_util depend on libintl instead of requiring users of + libsudo_util to link with libintl directly. Bug #690 + [f2508d1a21ee] + +2015-03-21 Todd C. Miller + + * plugins/sudoers/logging.c: + Use saved errno in vlog_warning() before calling + sudo_vwarn_nodebug(). Fixes the error message printed if set_perms() + fails. + [68bd7297137e] + +2015-03-18 Todd C. Miller + + * NEWS: + Update for 1.8.13 final. + [4c03db3a740f] + +2015-03-16 Todd C. Miller + + * plugins/sudoers/env.c, plugins/sudoers/sudoers.c, + plugins/sudoers/sudoers.h: + For sudoedit, run the editor with the user's original environment as + per the documentation (and as in sudo 1.7.x). Bug #688 + [a5081c8f6950] + + * plugins/sudoers/po/de.mo, plugins/sudoers/po/de.po, po/fr.mo, + po/fr.po: + Sync with translationproject.org + [0b820c5ecb0c] + +2015-03-10 Todd C. Miller + + * lib/util/term.c: + Update function names in debug_decl. + [b83f153b2f43] + + * lib/util/term.c: + Use TCSAFLUSH instead of TCSANOW in sudo_term_copy(). Be consistent + with where we put TCSASOFT in the action flags. + [6ffeec3aa184] + +2015-03-09 Todd C. Miller + + * plugins/sudoers/po/zh_CN.mo, plugins/sudoers/po/zh_CN.po, po/da.mo, + po/da.po, po/fi.mo, po/fi.po, po/zh_CN.mo, po/zh_CN.po: + Sync with translationproject.org + [0d20f88c0a83] + +2015-03-08 Todd C. Miller + + * lib/util/sha2.c: + Include unistd.h since sudo_compat.h uses gid_t. + [da491d83e5dc] + +2015-03-05 Todd C. Miller + + * INSTALL, configure, configure.ac: + Add --disable-weak-symbols option to disable use of weak symbols in + libsudo_util. + [3edf2bccb4d8] + + * configure: + regen + [ff1abfcd2b61] + + * m4/ax_sys_weak_alias.m4: + When checking for weak aliases, check the gcc attribute format last + since some C compilers just ignore unsupported attributes. + [e172cbbfa615] + + * sudo.pp: + Update copyright year. + [67bcd24c6477] + + * plugins/sudoers/po/cs.mo, plugins/sudoers/po/cs.po, + plugins/sudoers/po/de.mo, plugins/sudoers/po/de.po, + plugins/sudoers/po/eo.mo, plugins/sudoers/po/eo.po, + plugins/sudoers/po/it.mo, plugins/sudoers/po/it.po, + plugins/sudoers/po/nb.mo, plugins/sudoers/po/nb.po, + plugins/sudoers/po/pl.mo, plugins/sudoers/po/pl.po, + plugins/sudoers/po/pt_BR.mo, plugins/sudoers/po/pt_BR.po, + plugins/sudoers/po/uk.mo, plugins/sudoers/po/uk.po, + plugins/sudoers/po/vi.mo, plugins/sudoers/po/vi.po, po/cs.mo, + po/cs.po, po/de.mo, po/de.po, po/eo.mo, po/eo.po, po/it.mo, + po/it.po, po/nb.mo, po/nb.po, po/pl.mo, po/pl.po, po/pt_BR.mo, + po/pt_BR.po, po/uk.mo, po/uk.po, po/vi.mo, po/vi.po: + Sync with translationproject.org + [ceb62f98364c] + + * configure, configure.ac, include/compat/sha2.h: + Fix symbol name collision with systems that have their own sha2 + implementation. This can result in PAM using the wrong sha2 + implementation on Solaris systems configured to use SHA512 for + passwords. + [3a25c4896804] + + * src/Makefile.in: + Use SSP_LDFLAGS when linking sudo_noexec.la + [6187b17fad90] + +2015-03-03 Todd C. Miller + + * MANIFEST, config.h.in, configure, configure.ac, + include/compat/utime.h, lib/util/Makefile.in, lib/util/utimens.c: + Remove compat/utime.h, it was only useful for ancient systems that + are no longer capable of compiling sudo. + [94e4f02868db] + +2015-03-02 Todd C. Miller + + * configure, configure.ac, lib/util/Makefile.in: + Link libsudo_util with -lrt on systems where clock_gettime is in + -lrt. + [44a9a0d0af69] + + * NEWS: + Update. + [811c8d7090c0] + + * lib/util/strlcat.c, lib/util/strlcpy.c: + Update OpenBSD CVS Ids + [933788497ee4] + + * lib/util/strlcat.c: + Make comment match code. + [b1b68810929d] + + * lib/util/utimens.c: + Fix compilation error on systems without futimes(). + [4d55a58ea12e] + + * MANIFEST, config.h.in, configure, configure.ac, + include/sudo_compat.h, include/sudo_util.h, lib/util/Makefile.in, + lib/util/gettime.c, lib/util/util.exp.in, lib/util/utimens.c, + lib/util/utimes.c, mkdep.pl, plugins/sudoers/Makefile.in, + plugins/sudoers/boottime.c, plugins/sudoers/gettime.c, + plugins/sudoers/sudoers.h, plugins/sudoers/timestamp.c, + plugins/sudoers/visudo.c, src/Makefile.in, src/sesh.c, + src/sudo_edit.c: + Use futimens() and utimensat() instead of futimes() and utimes(). + [8400f91466d8] + + * plugins/sudoers/visudo.c: + Fix compiler warning on systems where mode_t is not unsigned int, + such as 32-bit Solaris. + [1eeeea1c203d] + + * plugins/sudoers/ldap.c, plugins/sudoers/sssd.c: + Fix logic for verifypw/listpw all in sudoers LDAP and sssd. + [5bc60a34a477] + + * src/tgetpass.c: + Fix cut & pasto that prevented the SIGPIPE handler from being + restored before returning from tgetpass(). From mancha + [230b0a86876e] + +2015-02-28 Todd C. Miller + + * src/sesh.c, src/sudo_edit.c: + Our utimes() emulation support futime() too. + [439851535285] + +2015-02-27 Todd C. Miller + + * plugins/sudoers/po/sudoers.pot, po/sudo.pot: + regen + [40aa9164563f] + + * plugins/sudoers/testsudoers.c: + Define YYDEBUG to 0 if not already defined so we can protect use of + sudoersdebug with "#if YYDEBUG" like the generated parser does. From + David Michael. + [394e1c237aac] + +2015-02-26 Todd C. Miller + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in: + Document that Aliases may not be redefined and that "sudo -f + /etc/sudo.d/foo" will not catch the redefinition. + [3bff3b5f7eb1] + + * sudo.pp: + Only create /usr/lib/tmpfiles.d/sudo.conf if + /usr/lib/tmpfiles.d/systemd.conf also exists. Some other package may + have created /usr/lib/tmpfiles.d even though it is not used. + [cf013d95b7d7] + + * plugins/sudoers/Makefile.in: + regen + [4dde632c35cd] + + * sudo.pp: + Clear the ts dir instead of just making sure it exists. + [c49b6e3e2360] + + * configure, configure.ac: + Only substiture init.d scripts that we are going to use. + [301f16bd04c5] + +2015-02-25 Todd C. Miller + + * plugins/sudoers/Makefile.in, sudo.pp: + Create /usr/lib/tmpfiles.d/sudo.conf when systemd is used. + [532dc61e7bb7] + + * plugins/sudoers/iolog.c, plugins/sudoers/visudo.c, src/sudo_edit.c, + src/utmp.c: + Check the return value of gettimeofday(), even though it should + never fail. + [747715d8a11c] + +2015-02-24 Todd C. Miller + + * MANIFEST, configure, configure.ac, include/sudo_compat.h, + lib/util/Makefile.in, lib/util/clock_gettime.c, mkdep.pl, + plugins/sudoers/Makefile.in, plugins/sudoers/gettime.c, + plugins/sudoers/po/sudoers.pot, plugins/sudoers/sudoers.h, + plugins/sudoers/timestamp.c: + We cannot (easily) use clock_gettime(CLOCK_MONOTONIC) directly as it + may be present but not implemented. Add sudo_gettime_real() and + sudo_gettime_mono() functions to get the real and monotonic times + respectively. Now sudo_gettime_mono() checks the value of + sysconf(_SC_MONOTONIC_CLOCK) before calling + clock_gettime(CLOCK_MONOTONIC) and falls back on sudo_gettime_real() + as needed. The Mach version of sudo_gettime_mono() uses + mach_absolute_time(). + + This should fix problems with timestamp files on systems where the + CLOCK_MONOTONIC is defined but not actually implemented. + [cd04a21af4c5] + + * include/sudo_compat.h, plugins/sudoers/timestamp.c: + Check clock_gettime() return value and warn if it fails. Currently, + the timestamp will be ignored if clock_gettime() fails. + [3658154638da] + +2015-02-23 Todd C. Miller + + * lib/util/sudo_debug.c: + Plug memory leak when debug file cannot be opened. Use %zu printf + format now that our snprintf support it. + [a168a002cd19] + + * plugins/sudoers/auth/pam.c: + Pam conversation function changes: o use PAM_BUF_ERR as the return + value when calloc() fails. o sanity check the value of num_msg o + remove the workaround for old Apple PAM o PAM_AUTH_ERR is not a + valid PAM conversation function return value + + If getpass_error is set after a call to pam_verify (usually because + the user pressed ^C), return AUTH_INTR immediately instead of + checking the pam_verify return value. + [8d378f40fe1f] + + * INSTALL, NEWS, configure, configure.ac, + plugins/sudoers/auth/aix_auth.c, plugins/sudoers/auth/sudo_auth.c, + plugins/sudoers/auth/sudo_auth.h: + On AIX use the value of auth_type in /etc/security/login.cfg to + determine whether to use LAM or PAM unless the user specified the + --with-pam or --with-aixauth configure flags. + [cb314c1ed5f8] + + * lib/util/parseln.c: + Fix cast. + [4f56047e2bc4] + +2015-02-21 Todd C. Miller + + * config.h.in, configure, configure.ac, lib/util/snprintf.c: + Update snprintf.c from OpenBSD. The floating point and wide + character code has been retained but is not compiled by default. + [6801a77398fc] + +2015-02-20 Todd C. Miller + + * plugins/sudoers/regress/sudoers/test1.in, + plugins/sudoers/regress/sudoers/test1.out.ok, + plugins/sudoers/regress/sudoers/test1.toke.ok: + Update the regression test that check that all tags are parsed. + [d0f9af2f9d45] + + * MANIFEST, configure, configure.ac, lib/util/Makefile.in, + lib/util/mktemp.c, lib/util/regress/mktemp/mktemp_test.c, mkdep.pl: + Add regress for mkdtemp and mkstemps from OpenBSD + [18714ae9bffd] + + * plugins/sudoers/po/sudoers.pot: + regen + [b77490dd9b33] + + * plugins/sudoers/po/nl.mo, plugins/sudoers/po/nl.po, po/tr.mo, + po/tr.po: + Sync with translationproject.org + [b2946065653d] + + * config.h.in, configure.ac: + Correct SECURE_PATH comment. + [3fd6132d5dba] + + * NEWS, configure, configure.ac: + Sudo 1.8.13 + [32c1183b0666] + +2015-02-19 Todd C. Miller + + * MANIFEST, config.h.in, configure, configure.ac, + include/sudo_compat.h, include/sudo_util.h, lib/util/Makefile.in, + lib/util/gethostname.c, lib/util/util.exp.in, + plugins/sudoers/match.c, plugins/sudoers/testsudoers.c, + plugins/sudoers/visudo.c, src/sudo.c: + Avoid using HOST_NAME_MAX directly and use + sysconf(_SC_HOST_NAME_MAX) instead. + [97036b819d58] + + * plugins/sudoers/auth/passwd.c, plugins/sudoers/auth/secureware.c: + Historically, crypt() returned the empty string on error, which + ensured that crypt("", "") would return "", which supported matcing + empty encrypted passwords with no additional code. Some modern + versions of crypt() (such as glibc) return NULL on error so we need + an explicit test to match an empty plaintext password and an empty + encrypted password. + [b88eb9da5e57] + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in: + Sort tags lexically in the sudoers manual + [66716c0b7a13] + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in, + plugins/sudoers/gram.c, plugins/sudoers/gram.h, + plugins/sudoers/gram.y, plugins/sudoers/ldap.c, + plugins/sudoers/parse.c, plugins/sudoers/parse.h, + plugins/sudoers/regress/sudoers/test1.out.ok, + plugins/sudoers/sssd.c, plugins/sudoers/sudoers_version.h, + plugins/sudoers/testsudoers.c, plugins/sudoers/toke.c, + plugins/sudoers/toke.l, plugins/sudoers/visudo_json.c: + Add support for MAIL and NOMAIL command tags to toggle mail sending + behavior on a per-command (or Cmnd_Alias) basis. + [04f30a064c25] + +2015-02-15 Todd C. Miller + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in, + plugins/sudoers/def_data.c, plugins/sudoers/def_data.h, + plugins/sudoers/def_data.in, plugins/sudoers/logging.c: + Add mail_all_cmnds to always mail when a user runs a command (or + tries to) including sudoedit. The mail_always flag goes back to its + old semantic of always mailing when sudo is run. + [edc904502061] + +2015-02-19 Todd C. Miller + + * lib/util/getline.c, plugins/group_file/getgrent.c, + plugins/sudoers/regress/check_symbols/check_symbols.c, + plugins/sudoers/sudoreplay.c, plugins/sudoers/tsgetgrpw.c: + All modern systems should have LINE_MAX. + [117322b6d86c] + + * config.h.in, configure, configure.ac, include/sudo_compat.h, + lib/util/closefrom.c, lib/util/setgroups.c, + plugins/sudoers/pwutil_impl.c, src/sudo.c: + Almost no systems actually define OPEN_MAX since it is dynamic on + modern OSes. If sysconf(_SC_OPEN_MAX) ever fails, fall back on + _POSIX_OPEN_MAX instead. We can assume modern systems have + sysconf(). Also remove checks for strrchr() and strtoll() for which + the HAVE_* defines are no longer used. + [c3058a6cca86] + + * Makefile.in, sudo.pp: + Don't need to pass exampledir to polypkg now that it is just under + docdir. + [9f24f0184a78] + +2015-02-18 Todd C. Miller + + * sudo.pp: + Fix packaging of the example dir. + [4c7cbc3fc190] + + * lib/util/mktemp.c: + Fix mkstemps() extension handling. Sudoedit will now preserve the + extension properly when the system libc lacks mkstemps(). + [b86f54331972] + +2015-02-17 Todd C. Miller + + * MANIFEST, aclocal.m4, config.h.in, configure, configure.ac, + lib/util/Makefile.in, lib/util/locale_weak.c, + m4/ax_sys_weak_alias.m4, mkdep.pl, src/Makefile.in, + src/locale_stub.c: + Use weak symbols for sudo_warn_gettext() and sudo_warn_strerror() so + distros using "-Wl,--no-undefined" in LDFLAGS don't run into + problems. + [708418615aae] + + * lib/util/mksiglist.c, lib/util/mksigname.c: + Include unistd.h in siglist.c and signame.c to get gid_t which is + used by sudo_compat.h. Bug #686 + [0ab6450a96ec] + +2015-02-10 Todd C. Miller + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in: + Minor change in description of TZ path handling. + [579b02f0dbe0] + + * Makefile.in, examples/Makefile.in: + Move example dir under the doc dir to conform to Debian guidelines. + Bug #682. + [494d9a0484b6] + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in: + Document that a leading ':' is skipped when checking TZ for a fully- + qualified path name. + [91859f613b88] + 2015-02-09 Todd C. Miller * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in: + Typo. + [b9257ea66116] + + * doc/sudoers.cat, doc/sudoers.man.in, doc/sudoers.mdoc.in: Fix typos. [ac1467f71ac0] diff -Nru sudo-1.8.12/config.h.in sudo-1.8.16/config.h.in --- sudo-1.8.12/config.h.in 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/config.h.in 2016-03-17 16:13:10.000000000 +0000 @@ -1,11 +1,7 @@ /* config.h.in. Generated from configure.ac by autoheader. */ -#ifndef _SUDO_CONFIG_H -#define _SUDO_CONFIG_H - -/* Define to 1 if the `syslog' function returns a non-zero int to denote - failure. */ -#undef BROKEN_SYSLOG +#ifndef SUDO_CONFIG_H +#define SUDO_CONFIG_H /* Define to 1 if you want the insults from the "classic" version sudo. */ #undef CLASSIC_INSULTS @@ -58,6 +54,9 @@ /* Define to 1 if you have the `asprintf' function. */ #undef HAVE_ASPRINTF +/* Define to 1 if the system has the type `authdb_t'. */ +#undef HAVE_AUTHDB_T + /* Define to 1 if you have the `authenticate' function. */ #undef HAVE_AUTHENTICATE @@ -97,10 +96,6 @@ don't. */ #undef HAVE_DECL_GETRESUID -/* Define to 1 if you have the declaration of `HOST_NAME_MAX', and to 0 if you - don't. */ -#undef HAVE_DECL_HOST_NAME_MAX - /* Define to 1 if you have the declaration of `h_errno', and to 0 if you don't. */ #undef HAVE_DECL_H_ERRNO @@ -117,10 +112,6 @@ don't. */ #undef HAVE_DECL_LLONG_MIN -/* Define to 1 if you have the declaration of `OPEN_MAX', and to 0 if you - don't. */ -#undef HAVE_DECL_OPEN_MAX - /* Define to 1 if you have the declaration of `PATH_MAX', and to 0 if you don't. */ #undef HAVE_DECL_PATH_MAX @@ -141,6 +132,10 @@ don't. */ #undef HAVE_DECL_SETRESUID +/* Define to 1 if you have the declaration of `SIG2STR_MAX', and to 0 if you + don't. */ +#undef HAVE_DECL_SIG2STR_MAX + /* Define to 1 if you have the declaration of `SIZE_MAX', and to 0 if you don't. */ #undef HAVE_DECL_SIZE_MAX @@ -177,10 +172,6 @@ don't. */ #undef HAVE_DECL__INNETGR -/* Define to 1 if you have the declaration of `_POSIX_HOST_NAME_MAX', and to 0 - if you don't. */ -#undef HAVE_DECL__POSIX_HOST_NAME_MAX - /* Define to 1 if you have the declaration of `_POSIX_PATH_MAX', and to 0 if you don't. */ #undef HAVE_DECL__POSIX_PATH_MAX @@ -193,14 +184,6 @@ don't. */ #undef HAVE_DECL__SYS_SIGNAME -/* Define to 1 if you have the declaration of `__sys_siglist', and to 0 if you - don't. */ -#undef HAVE_DECL___SYS_SIGLIST - -/* Define to 1 if you have the declaration of `__sys_signame', and to 0 if you - don't. */ -#undef HAVE_DECL___SYS_SIGNAME - /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_DIRENT_H @@ -232,6 +215,9 @@ /* Define to 1 if you have the `execvpe' function. */ #undef HAVE_EXECVPE +/* Define to 1 if you have the `faccessat' function. */ +#undef HAVE_FACCESSAT + /* Define to 1 if your system has the F_CLOSEM fcntl. */ #undef HAVE_FCNTL_CLOSEM @@ -241,9 +227,6 @@ /* Define to 1 if you have the `fgetln' function. */ #undef HAVE_FGETLN -/* Define to 1 if you have the `flock' function. */ -#undef HAVE_FLOCK - /* Define to 1 if you have the `fnmatch' function. */ #undef HAVE_FNMATCH @@ -256,6 +239,9 @@ /* Define to 1 if you have the `futime' function. */ #undef HAVE_FUTIME +/* Define to 1 if you have the `futimens' function. */ +#undef HAVE_FUTIMENS + /* Define to 1 if you have the `futimes' function. */ #undef HAVE_FUTIMES @@ -465,9 +451,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_MAILLOCK_H -/* Define to 1 if you have the header file. */ -#undef HAVE_MALLOC_H - /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H @@ -504,6 +487,9 @@ /* Define to 1 if you have the `nss_search' function. */ #undef HAVE_NSS_SEARCH +/* Define to 1 if you have the `openat' function. */ +#undef HAVE_OPENAT + /* Define to 1 if you have the `openpty' function. */ #undef HAVE_OPENPTY @@ -540,6 +526,12 @@ /* Define to 1 if you have the `posix_spawnp' function. */ #undef HAVE_POSIX_SPAWNP +/* Define to 1 if you have the `pread' function. */ +#undef HAVE_PREAD + +/* Define to 1 if you have the `pread64' function. */ +#undef HAVE_PREAD64 + /* Define to 1 if you have the `priv_set' function. */ #undef HAVE_PRIV_SET @@ -555,12 +547,21 @@ /* Define to 1 if you have the header file. */ #undef HAVE_PTY_H +/* Define to 1 if you have the `pwrite' function. */ +#undef HAVE_PWRITE + +/* Define to 1 if you have the `pwrite64' function. */ +#undef HAVE_PWRITE64 + /* Define to 1 if you have the `pw_dup' function. */ #undef HAVE_PW_DUP /* Define to 1 if you have the `random' function. */ #undef HAVE_RANDOM +/* Define to 1 if you have the `reallocarray' function. */ +#undef HAVE_REALLOCARRAY + /* Define to 1 if you have the `revoke' function. */ #undef HAVE_REVOKE @@ -664,12 +665,21 @@ /* Define to 1 if you have the `strlcpy' function. */ #undef HAVE_STRLCPY +/* Define to 1 if you have the `strndup' function. */ +#undef HAVE_STRNDUP + +/* Define to 1 if you have the `strnlen' function. */ +#undef HAVE_STRNLEN + /* Define to 1 if you have the `strsignal' function. */ #undef HAVE_STRSIGNAL /* Define to 1 if you have the `strtonum' function. */ #undef HAVE_STRTONUM +/* Define to 1 if `d_namlen' is a member of `struct dirent'. */ +#undef HAVE_STRUCT_DIRENT_D_NAMLEN + /* Define to 1 if `d_type' is a member of `struct dirent'. */ #undef HAVE_STRUCT_DIRENT_D_TYPE @@ -697,9 +707,6 @@ /* Define if your struct sockaddr has an sa_len field. */ #undef HAVE_STRUCT_SOCKADDR_SA_LEN -/* Define to 1 if the system has the type `struct timespec'. */ -#undef HAVE_STRUCT_TIMESPEC - /* Define to 1 if `ut_exit' is a member of `struct utmpx'. */ #undef HAVE_STRUCT_UTMPX_UT_EXIT @@ -754,9 +761,6 @@ /* Define to 1 if your struct stat uses an st__tim union. */ #undef HAVE_ST__TIM -/* Define to 1 if you have the `sysconf' function. */ -#undef HAVE_SYSCONF - /* Define to 1 if you have the `sysctl' function. */ #undef HAVE_SYSCTL @@ -807,9 +811,6 @@ /* Define to 1 if you have the `ttyslot' function. */ #undef HAVE_TTYSLOT -/* Define to 1 if you have the `tzset' function. */ -#undef HAVE_TZSET - /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H @@ -822,12 +823,12 @@ /* Define to 1 if you have the header file. */ #undef HAVE_UTIL_H +/* Define to 1 if you have the `utimensat' function. */ +#undef HAVE_UTIMENSAT + /* Define to 1 if you have the `utimes' function. */ #undef HAVE_UTIMES -/* Define to 1 if you have the header file. */ -#undef HAVE_UTIME_H - /* Define to 1 if you have the header file. */ #undef HAVE_UTMPX_H @@ -843,33 +844,6 @@ /* Define to 1 if the system has the type `_Bool'. */ #undef HAVE__BOOL -/* Define to 1 if you have the `_execl' function. */ -#undef HAVE__EXECL - -/* Define to 1 if you have the `_execle' function. */ -#undef HAVE__EXECLE - -/* Define to 1 if you have the `_execlp' function. */ -#undef HAVE__EXECLP - -/* Define to 1 if you have the `_exect' function. */ -#undef HAVE__EXECT - -/* Define to 1 if you have the `_execv' function. */ -#undef HAVE__EXECV - -/* Define to 1 if you have the `_execve' function. */ -#undef HAVE__EXECVE - -/* Define to 1 if you have the `_execvP' function. */ -#undef HAVE__EXECVP - -/* Define to 1 if you have the `_execvpe' function. */ -#undef HAVE__EXECVPE - -/* Define to 1 if you have the `_fexecve' function. */ -#undef HAVE__FEXECVE - /* Define to 1 if you have the `_getpty' function. */ #undef HAVE__GETPTY @@ -882,42 +856,9 @@ /* Define to 1 if you have the `_nss_XbyY_buf_alloc' function. */ #undef HAVE__NSS_XBYY_BUF_ALLOC -/* Define to 1 if you have the `_posix_spawn' function. */ -#undef HAVE__POSIX_SPAWN - -/* Define to 1 if you have the `_posix_spawnp' function. */ -#undef HAVE__POSIX_SPAWNP - /* Define to 1 if you have the `_ttyname_dev' function. */ #undef HAVE__TTYNAME_DEV -/* Define to 1 if you have the `__execl' function. */ -#undef HAVE___EXECL - -/* Define to 1 if you have the `__execle' function. */ -#undef HAVE___EXECLE - -/* Define to 1 if you have the `__execlp' function. */ -#undef HAVE___EXECLP - -/* Define to 1 if you have the `__exect' function. */ -#undef HAVE___EXECT - -/* Define to 1 if you have the `__execv' function. */ -#undef HAVE___EXECV - -/* Define to 1 if you have the `__execve' function. */ -#undef HAVE___EXECVE - -/* Define to 1 if you have the `__execvP' function. */ -#undef HAVE___EXECVP - -/* Define to 1 if you have the `__execvpe' function. */ -#undef HAVE___EXECVPE - -/* Define to 1 if you have the `__fexecve' function. */ -#undef HAVE___FEXECVE - /* Define to 1 if the compiler supports the C99 __func__ variable. */ #undef HAVE___FUNC__ @@ -930,12 +871,6 @@ /* Define to 1 if you have the `__nss_XbyY_buf_alloc' function. */ #undef HAVE___NSS_XBYY_BUF_ALLOC -/* Define to 1 if you have the `__posix_spawn' function. */ -#undef HAVE___POSIX_SPAWN - -/* Define to 1 if you have the `__posix_spawnp' function. */ -#undef HAVE___POSIX_SPAWNP - /* Define to 1 if your crt0.o defines the __progname symbol for you. */ #undef HAVE___PROGNAME @@ -981,9 +916,16 @@ */ #undef MAX_UID_T_LEN +/* Define to 1 if resolv.h must be included to get the `inet_ntop' or + `inet_pton' function prototypes. */ +#undef NEED_RESOLV_H + /* Define to 1 if you don't want sudo to prompt for a password by default. */ #undef NO_AUTHENTICATION +/* 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 they user sudo. */ #undef NO_LECTURE @@ -1021,6 +963,10 @@ /* Define to the version of this package. */ #undef PACKAGE_VERSION +/* Define to 1 if your system uses a Solaris-derived PAM and not Linux-PAM or + OpenPAM. */ +#undef PAM_SUN_CODEBASE + /* The default password prompt. */ #undef PASSPROMPT @@ -1031,7 +977,7 @@ ones. */ #undef PC_INSULTS -/* Enable replacement getcwd if system getcwd is broken. */ +/* Define to 1 to enable replacement getcwd if system getcwd is broken. */ #undef PREFER_PORTABLE_GETCWD /* Enable replacement (v)snprintf if system (v)snprintf is broken. */ @@ -1062,7 +1008,7 @@ /* The user sudo should run commands as by default. */ #undef RUNAS_DEFAULT -/* Define to 1 to override the user's path with a built-in one. */ +/* A colon-separated list of directories to override the user's PATH with. */ #undef SECURE_PATH /* Define to 1 to send mail when the user is not allowed to run a command. */ @@ -1085,9 +1031,6 @@ /* Define to 1 if you want sudo to set $HOME in shell mode. */ #undef SHELL_SETS_HOME -/* The size of `long int', as computed by sizeof. */ -#undef SIZEOF_LONG_INT - /* Define to 1 to compile the sudoers plugin statically into the sudo binary. */ #undef STATIC_SUDOERS_PLUGIN @@ -1132,6 +1075,28 @@ /* Define to 1 if you use GNU stow packaging. */ #undef USE_STOW +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif + + /* Define to avoid using the passwd/shadow file for authentication. */ #undef WITHOUT_PASSWD @@ -1143,9 +1108,23 @@ /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS +/* Define to 1 to enable 64-bit versions of standard C functions on 32-bit + systems. */ +#undef _LARGEFILE64_SOURCE + /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES +/* Define to 1 if on MINIX. */ +#undef _MINIX + +/* Define to 2 if the system does not provide POSIX.1 features except with + this defined. */ +#undef _POSIX_1_SOURCE + +/* Define to 1 if you need to in order for `stat' and other things to work. */ +#undef _POSIX_SOURCE + /* Define to __FUNCTION__ if your compiler supports __FUNCTION__ but not __func__ */ #undef __func__ @@ -1168,15 +1147,27 @@ /* Define to `unsigned int' if does not define. */ #undef id_t +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#undef inline +#endif + /* Define to `unsigned int' if does not define. */ #undef ino_t +/* Define to `long long' if does not define. */ +#undef intmax_t + /* Define to `int' if does not define. */ #undef mode_t /* Define to an OS-specific initialization function or `os_init_common'. */ #undef os_init +/* Define to `long' if does not define. */ +#undef ptrdiff_t + /* Define to `size_t' if does not define. */ #undef rsize_t @@ -1204,6 +1195,9 @@ /* Define to `unsigned char' if does not define. */ #undef uint8_t +/* Define to `unsigned long long' if does not define. */ +#undef uintmax_t + /* Define to empty if the keyword `volatile' does not work. Warning: valid code using `volatile' can become incorrect without. Disable with care. */ #undef volatile @@ -1211,6 +1205,41 @@ /* BSD compatibility on some SVR4 systems. */ #ifdef __svr4__ # define BSD_COMP -#endif /* __svr4__ */ +#endif + +/* Enable BSD extensions on systems that have them. */ +#ifndef _BSD_SOURCE +# undef _BSD_SOURCE +#endif + +/* Enable BSD types on IRIX. */ +#ifndef _BSD_TYPES +# undef _BSD_TYPES +#endif + +/* Enable Linux-compatible extensions on AIX. */ +#ifndef _LINUX_SOURCE_COMPAT +# undef _LINUX_SOURCE_COMPAT +#endif + +/* Enable prototypes in GCC fixed includes on older systems. */ +#ifndef __USE_FIXED_PROTOTYPES__ +# undef __USE_FIXED_PROTOTYPES__ +#endif + +/* Enable XPG4v2 extensions to POSIX, needed for MSG_WAITALL on older HP-UX. */ +#ifndef _XOPEN_SOURCE_EXTENDED +# undef _XOPEN_SOURCE_EXTENDED +#endif + +/* Enable reentrant versions of the standard C API (obsolete). */ +#ifndef _REENTRANT +# undef _REENTRANT +#endif + +/* Enable "safer" versions of the standard C API (ISO C11). */ +#ifndef __STDC_WANT_LIB_EXT1__ +# undef __STDC_WANT_LIB_EXT1__ +#endif -#endif /* _SUDO_CONFIG_H */ +#endif /* SUDO_CONFIG_H */ diff -Nru sudo-1.8.12/configure sudo-1.8.16/configure --- sudo-1.8.12/configure 2015-02-08 14:55:23.000000000 +0000 +++ sudo-1.8.16/configure 2016-03-17 16:13:10.000000000 +0000 @@ -1,8 +1,8 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for sudo 1.8.12. +# Generated by GNU Autoconf 2.69 for sudo 1.8.16. # -# Report bugs to . +# Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -198,6 +198,7 @@ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' @@ -205,8 +206,7 @@ ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ - || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 -test \$(( 1 + 1 )) = 2 || exit 1" + || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else @@ -275,7 +275,7 @@ $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and -$0: http://www.sudo.ws/bugs/ about your system, including +$0: https://bugzilla.sudo.ws/ about your system, including $0: any error possibly output before this message. Then $0: install a modern shell, or manually run the script $0: under such a shell if you do have one." @@ -590,9 +590,9 @@ # Identity of this package. PACKAGE_NAME='sudo' PACKAGE_TARNAME='sudo' -PACKAGE_VERSION='1.8.12' -PACKAGE_STRING='sudo 1.8.12' -PACKAGE_BUGREPORT='http://www.sudo.ws/bugs/' +PACKAGE_VERSION='1.8.16' +PACKAGE_STRING='sudo 1.8.16' +PACKAGE_BUGREPORT='https://bugzilla.sudo.ws/' PACKAGE_URL='' ac_unique_file="src/sudo.c" @@ -663,8 +663,6 @@ DUMPBIN LD FGREP -EGREP -GREP SED host_os host_vendor @@ -676,6 +674,8 @@ build RANLIB AR +EGREP +GREP CPP OBJEXT EXEEXT @@ -721,6 +721,8 @@ vardir rundir iolog_dir +exampledir +TMPFILES_D COMPAT_EXP RC_LINK INIT_DIR @@ -736,6 +738,7 @@ SUDO_NLS LIBMD LIBINTL +LIBRT LIBDL CONFIGURE_ARGS LIBTOOL_DEPS @@ -770,7 +773,6 @@ MANDIRTYPE MANTYPE AUTH_OBJS -OSDEFS GETGROUPS_LIB REPLAY_LIBS AFS_LIBS @@ -789,6 +791,7 @@ ZLIB_LDFLAGS LIBUTIL_LDFLAGS SUDOERS_LDFLAGS +SUDO_LDFLAGS LDFLAGS CPPFLAGS PROGS @@ -917,8 +920,8 @@ with_pc_insults with_secure_path with_interfaces -with_stow with_askpass +with_exampledir with_plugindir with_man with_mdoc @@ -939,12 +942,14 @@ enable_werror enable_hardening enable_pie +enable_asan enable_poll enable_admin_flag enable_nls enable_rpath enable_static_sudoers enable_shared_libutil +enable_tmpfiles_d with_selinux enable_gss_krb5_ccache_name enable_shared @@ -1519,7 +1524,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures sudo 1.8.12 to adapt to many kinds of systems. +\`configure' configures sudo 1.8.16 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1584,7 +1589,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of sudo 1.8.12:";; + short | recursive ) echo "Configuration of sudo 1.8.16:";; esac cat <<\_ACEOF @@ -1612,6 +1617,7 @@ --disable-hardening Do not use compiler/linker exploit mitigation options --enable-pie Build sudo as a position independent executable. + --enable-asan Build sudo with address sanitizer support. --disable-poll Use select() instead of poll(). --enable-admin-flag Whether to create a Ubuntu-style admin flag file --disable-nls Disable natural language support using gettext @@ -1620,6 +1626,7 @@ binary instead as a plugin --disable-shared-libutil Disable use of the libsudo_util shared library. + --enable-tmpfiles.d=DIR Set the path to the systemd tmpfiles.d directory. --enable-gss-krb5-ccache-name Use GSS-API to set the Kerberos V cred cache name --enable-shared[=PKGS] build shared libraries [default=yes] @@ -1641,7 +1648,7 @@ --with-devel add development options --with-CC C compiler to use --with-rpath deprecated, use --disable-rpath - --with-blibpath=PATH deprecated + --with-blibpath[=PATH] deprecated --with-bsm-audit enable BSM audit support --with-linux-audit enable Linux audit support --with-solaris-audit enable Solaris audit support @@ -1653,8 +1660,8 @@ --with-efence link with -lefence for malloc() debugging --with-csops add CSOps standard options --without-passwd don't use passwd/shadow file for authentication - --with-skey=DIR enable S/Key support - --with-opie=DIR enable OPIE support + --with-skey[=DIR] enable S/Key support + --with-opie[=DIR] enable OPIE support --with-long-otp-prompt use a two line OTP (skey/opie) prompt --with-SecurID[=DIR] enable SecurID support --with-fwtk[=DIR] enable FWTK AuthSRV support @@ -1722,8 +1729,8 @@ offensive ones --with-secure-path override the user's path with a built-in one --without-interfaces don't try to read the ip addr of ether interfaces - --with-stow deprecated --with-askpass=PATH Fully qualified pathname of askpass helper + --with-exampledir=DIR path to install sudo examples in --with-plugindir=DIR set directory to load plugins from --with-man manual pages use man macros --with-mdoc manual pages use mdoc macros @@ -1737,7 +1744,7 @@ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-libtool=PATH specify path to libtool - --with-noexec=PATH fully qualified pathname of sudo_noexec.so + --with-noexec[=PATH] fully qualified pathname of sudo_noexec.so --with-netsvc[=PATH] path to netsvc.conf --with-pam-login enable specific PAM session for sudo -i @@ -1765,7 +1772,7 @@ Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. -Report bugs to . +Report bugs to . _ACEOF ac_status=$? fi @@ -1828,7 +1835,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -sudo configure 1.8.12 +sudo configure 1.8.16 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1880,52 +1887,6 @@ } # ac_fn_c_try_compile -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - test -x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. @@ -1963,36 +1924,96 @@ } # ac_fn_c_try_cpp -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" + ac_header_compiler=yes else - eval "$3=no" + ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## ---------------------------------------- ## +## Report this to https://bugzilla.sudo.ws/ ## +## ---------------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } +fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno -} # ac_fn_c_check_header_compile +} # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- @@ -2036,6 +2057,83 @@ } # ac_fn_c_try_run +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly @@ -2103,52 +2201,6 @@ } # ac_fn_c_check_func -# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES -# --------------------------------------------- -# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR -# accordingly. -ac_fn_c_check_decl () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - as_decl_name=`echo $2|sed 's/ *(.*//'` - as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 -$as_echo_n "checking whether $as_decl_name is declared... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -#ifndef $as_decl_name -#ifdef __cplusplus - (void) $as_decl_use; -#else - (void) $as_decl_name; -#endif -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_decl - # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache @@ -2203,96 +2255,51 @@ } # ac_fn_c_check_type -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR +# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES +# --------------------------------------------- +# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR # accordingly. -ac_fn_c_check_header_mongrel () +ac_fn_c_check_decl () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } + as_decl_name=`echo $2|sed 's/ *(.*//'` + as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 +$as_echo_n "checking whether $as_decl_name is declared... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 -#include <$2> +int +main () +{ +#ifndef $as_decl_name +#ifdef __cplusplus + (void) $as_decl_use; +#else + (void) $as_decl_name; +#endif +#endif + + ; + return 0; +} _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes + eval "$3=yes" else - ac_header_compiler=no + eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## --------------------------------------- ## -## Report this to http://www.sudo.ws/bugs/ ## -## --------------------------------------- ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } -fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno -} # ac_fn_c_check_header_mongrel +} # ac_fn_c_check_decl # ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES # ---------------------------------------------------- @@ -2350,194 +2357,11 @@ eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_member - -# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES -# -------------------------------------------- -# Tries to find the compile-time value of EXPR in a program that includes -# INCLUDES, setting VAR accordingly. Returns whether the value could be -# computed -ac_fn_c_compute_int () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= 0)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_lo=0 ac_mid=0 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=$ac_mid; break -else - as_fn_arith $ac_mid + 1 && ac_lo=$as_val - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) < 0)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=-1 ac_mid=-1 - while :; do - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) >= $ac_mid)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_lo=$ac_mid; break -else - as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - ac_lo= ac_hi= -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -int -main () -{ -static int test_array [1 - 2 * !(($2) <= $ac_mid)]; -test_array [0] = 0; -return test_array [0]; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_hi=$ac_mid -else - as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in #(( -?*) eval "$3=\$ac_lo"; ac_retval=0 ;; -'') ac_retval=1 ;; -esac - else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -static long int longval () { return $2; } -static unsigned long int ulongval () { return $2; } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - return 1; - if (($2) < 0) - { - long int i = longval (); - if (i != ($2)) - return 1; - fprintf (f, "%ld", i); - } - else - { - unsigned long int i = ulongval (); - if (i != ($2)) - return 1; - fprintf (f, "%lu", i); - } - /* Do not output a trailing newline, as this causes \r\n confusion - on some platforms. */ - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - echo >>conftest.val; read $3 config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by sudo $as_me 1.8.12, which was +It was created by sudo $as_me 1.8.16, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2817,22 +2641,23 @@ >$cache_file fi -as_fn_append ac_header_list " malloc.h" as_fn_append ac_header_list " netgroup.h" as_fn_append ac_header_list " paths.h" as_fn_append ac_header_list " spawn.h" -as_fn_append ac_header_list " utime.h" as_fn_append ac_header_list " utmpx.h" as_fn_append ac_header_list " sys/sockio.h" as_fn_append ac_header_list " sys/bsdtypes.h" as_fn_append ac_header_list " sys/select.h" as_fn_append ac_header_list " sys/stropts.h" as_fn_append ac_header_list " sys/sysmacros.h" +as_fn_append ac_func_list " fexecve" as_fn_append ac_func_list " killpg" as_fn_append ac_func_list " nl_langinfo" as_fn_append ac_func_list " strftime" -as_fn_append ac_func_list " sysconf" -as_fn_append ac_func_list " tzset" +as_fn_append ac_func_list " pread" +as_fn_append ac_func_list " pwrite" +as_fn_append ac_func_list " openat" +as_fn_append ac_func_list " faccessat" as_fn_append ac_func_list " seteuid" # Check that the precious variables saved in the cache have kept the same # value. @@ -3019,6 +2844,9 @@ + + + # # Begin initial values for man page substitution # @@ -3067,6 +2895,7 @@ # End initial values for man page substitution # INSTALL_NOEXEC= +exampledir='$(docdir)/examples' devdir='$(srcdir)' PROGS="sudo" : ${MANDIRTYPE='man'} @@ -3099,9 +2928,11 @@ INIT_DIR= RC_LINK= COMPAT_EXP= +WEAK_ALIAS=no CHECKSHADOW=true shadow_funcs= shadow_libs= +TMPFILES_D= CONFIGURE_ARGS="$@" RTLD_PRELOAD_VAR="LD_PRELOAD" @@ -3111,135 +2942,36 @@ -# -# Prior to sudo 1.8.7, sudo stored libexec files in $libexecdir. -# Starting with sudo 1.8.7, $libexecdir/sudo is used so strip -# off an extraneous "/sudo" from libexecdir. -# -case "$libexecdir" in - */sudo) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libexecdir should not include the \"sudo\" subdirectory" >&5 -$as_echo "$as_me: WARNING: libexecdir should not include the \"sudo\" subdirectory" >&2;} - libexecdir=`expr "$libexecdir" : '\\(.*\\)/sudo$'` - ;; -esac - - - -# Check whether --with-otp-only was given. -if test "${with_otp_only+set}" = set; then : - withval=$with_otp_only; case $with_otp_only in - yes) with_passwd="no" - { $as_echo "$as_me:${as_lineno-$LINENO}: --with-otp-only option deprecated, treating as --without-passwd" >&5 -$as_echo "$as_me: --with-otp-only option deprecated, treating as --without-passwd" >&6;} - ;; -esac -fi - - - -# Check whether --with-alertmail was given. -if test "${with_alertmail+set}" = set; then : - withval=$with_alertmail; case $with_alertmail in - *) with_mailto="$with_alertmail" - { $as_echo "$as_me:${as_lineno-$LINENO}: --with-alertmail option deprecated, treating as --mailto" >&5 -$as_echo "$as_me: --with-alertmail option deprecated, treating as --mailto" >&6;} - ;; -esac -fi - - - - -# Check whether --with-devel was given. -if test "${with_devel+set}" = set; then : - withval=$with_devel; case $with_devel in - yes) { $as_echo "$as_me:${as_lineno-$LINENO}: Setting up for development: -Wall, flex, yacc" >&5 -$as_echo "$as_me: Setting up for development: -Wall, flex, yacc" >&6;} - OSDEFS="${OSDEFS} -DSUDO_DEVEL" - DEVEL="true" - devdir=. - ;; - no) ;; - *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring unknown argument to --with-devel: $with_devel" >&5 -$as_echo "$as_me: WARNING: Ignoring unknown argument to --with-devel: $with_devel" >&2;} - ;; -esac -fi - - - -# Check whether --with-CC was given. -if test "${with_CC+set}" = set; then : - withval=$with_CC; case $with_CC in - *) as_fn_error $? "the --with-CC option is no longer supported, please set the CC environment variable instead." "$LINENO" 5 - ;; -esac -fi - - - -# Check whether --with-rpath was given. -if test "${with_rpath+set}" = set; then : - withval=$with_rpath; { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-rpath deprecated, rpath is now the default" >&5 -$as_echo "$as_me: WARNING: --with-rpath deprecated, rpath is now the default" >&2;} -fi - - - -# Check whether --with-blibpath was given. -if test "${with_blibpath+set}" = set; then : - withval=$with_blibpath; { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-blibpath deprecated, use --with-libpath" >&5 -$as_echo "$as_me: WARNING: --with-blibpath deprecated, use --with-libpath" >&2;} -fi - - - -# Check whether --with-bsm-audit was given. -if test "${with_bsm_audit+set}" = set; then : - withval=$with_bsm_audit; case $with_bsm_audit in - yes) $as_echo "#define HAVE_BSM_AUDIT 1" >>confdefs.h - - SUDOERS_LIBS="${SUDOERS_LIBS} -lbsm" - SUDOERS_OBJS="${SUDOERS_OBJS} bsm_audit.lo" - ;; - no) ;; - *) as_fn_error $? "\"--with-bsm-audit does not take an argument.\"" "$LINENO" 5 - ;; -esac -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS fi fi @@ -3943,61 +3675,631 @@ that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" +if test "x$ac_cv_header_minix_config_h" = xyes; then : + MINIX=yes +else + MINIX= +fi + + + if test "$MINIX" = yes; then + +$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h + + +$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h + + +$as_echo "#define _MINIX 1" >>confdefs.h + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 +$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } +if ${ac_cv_safe_to_define___extensions__+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +# define __EXTENSIONS__ 1 + $ac_includes_default +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_safe_to_define___extensions__=yes +else + ac_cv_safe_to_define___extensions__=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 +$as_echo "$ac_cv_safe_to_define___extensions__" >&6; } + test $ac_cv_safe_to_define___extensions__ = yes && + $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h + + $as_echo "#define _ALL_SOURCE 1" >>confdefs.h + + $as_echo "#define _GNU_SOURCE 1" >>confdefs.h + + $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h + + $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h + + + +# +# Prior to sudo 1.8.7, sudo stored libexec files in $libexecdir. +# Starting with sudo 1.8.7, $libexecdir/sudo is used so strip +# off an extraneous "/sudo" from libexecdir. +# +case "$libexecdir" in + */sudo) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libexecdir should not include the \"sudo\" subdirectory" >&5 +$as_echo "$as_me: WARNING: libexecdir should not include the \"sudo\" subdirectory" >&2;} + libexecdir=`expr "$libexecdir" : '\\(.*\\)/sudo$'` + ;; +esac + + + +# Check whether --with-otp-only was given. +if test "${with_otp_only+set}" = set; then : + withval=$with_otp_only; case $with_otp_only in + yes) with_passwd="no" + { $as_echo "$as_me:${as_lineno-$LINENO}: --with-otp-only option deprecated, treating as --without-passwd" >&5 +$as_echo "$as_me: --with-otp-only option deprecated, treating as --without-passwd" >&6;} + ;; +esac +fi + + + +# Check whether --with-alertmail was given. +if test "${with_alertmail+set}" = set; then : + withval=$with_alertmail; case $with_alertmail in + *) with_mailto="$with_alertmail" + { $as_echo "$as_me:${as_lineno-$LINENO}: --with-alertmail option deprecated, treating as --mailto" >&5 +$as_echo "$as_me: --with-alertmail option deprecated, treating as --mailto" >&6;} + ;; +esac +fi + + + + +# Check whether --with-devel was given. +if test "${with_devel+set}" = set; then : + withval=$with_devel; case $with_devel in + yes) { $as_echo "$as_me:${as_lineno-$LINENO}: Setting up for development: -Wall, flex, yacc" >&5 +$as_echo "$as_me: Setting up for development: -Wall, flex, yacc" >&6;} + + case "${CPPFLAGS}" in + *"-DSUDO_DEVEL"|*"-DSUDO_DEVEL ") + ;; + *) + if test X"${CPPFLAGS}" = X""; then + CPPFLAGS="-DSUDO_DEVEL" + else + CPPFLAGS="${CPPFLAGS} -DSUDO_DEVEL" + fi + ;; + esac + + DEVEL="true" + devdir=. + ;; + no) ;; + *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Ignoring unknown argument to --with-devel: $with_devel" >&5 +$as_echo "$as_me: WARNING: Ignoring unknown argument to --with-devel: $with_devel" >&2;} + ;; +esac +fi + -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg + +# Check whether --with-CC was given. +if test "${with_CC+set}" = set; then : + withval=$with_CC; case $with_CC in + *) as_fn_error $? "the --with-CC option is no longer supported, please set the CC environment variable instead." "$LINENO" 5 + ;; +esac fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC + + +# Check whether --with-rpath was given. +if test "${with_rpath+set}" = set; then : + withval=$with_rpath; { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-rpath deprecated, rpath is now the default" >&5 +$as_echo "$as_me: WARNING: --with-rpath deprecated, rpath is now the default" >&2;} fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : + + +# Check whether --with-blibpath was given. +if test "${with_blibpath+set}" = set; then : + withval=$with_blibpath; { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --with-blibpath deprecated, use --with-libpath" >&5 +$as_echo "$as_me: WARNING: --with-blibpath deprecated, use --with-libpath" >&2;} fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Check whether --with-bsm-audit was given. +if test "${with_bsm_audit+set}" = set; then : + withval=$with_bsm_audit; case $with_bsm_audit in + yes) $as_echo "#define HAVE_BSM_AUDIT 1" >>confdefs.h + + SUDOERS_LIBS="${SUDOERS_LIBS} -lbsm" + SUDOERS_OBJS="${SUDOERS_OBJS} bsm_audit.lo" + ;; + no) ;; + *) as_fn_error $? "\"--with-bsm-audit does not take an argument.\"" "$LINENO" 5 + ;; +esac +fi @@ -4810,9 +5112,9 @@ # Check whether --with-vardir was given. if test "${with_vardir+set}" = set; then : withval=$with_vardir; case $with_vardir in - yes) as_fn_error $? "\"must give --with-vardirdir an argument.\"" "$LINENO" 5 + yes) as_fn_error $? "\"must give --with-vardir an argument.\"" "$LINENO" 5 ;; - no) as_fn_error $? "\"--without-vardirdir not supported.\"" "$LINENO" 5 + no) as_fn_error $? "\"--without-vardir not supported.\"" "$LINENO" 5 ;; esac fi @@ -5382,17 +5684,6 @@ fi - -# Check whether --with-stow was given. -if test "${with_stow+set}" = set; then : - withval=$with_stow; case $with_stow in - *) { $as_echo "$as_me:${as_lineno-$LINENO}: --with-stow option deprecated, now is defalt behavior" >&5 -$as_echo "$as_me: --with-stow option deprecated, now is defalt behavior" >&6;} - ;; -esac -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use an askpass helper" >&5 $as_echo_n "checking whether to use an askpass helper... " >&6; } @@ -5425,6 +5716,19 @@ fi +# Check whether --with-exampledir was given. +if test "${with_exampledir+set}" = set; then : + withval=$with_exampledir; case $with_exampledir in + yes) as_fn_error $? "\"must give --with-exampledir an argument.\"" "$LINENO" 5 + ;; + no) as_fn_error $? "\"--without-exampledir not supported.\"" "$LINENO" 5 + ;; + *) exampledir="$with_exampledir" +esac +fi + + + # Check whether --with-plugindir was given. if test "${with_plugindir+set}" = set; then : withval=$with_plugindir; case $with_plugindir in @@ -5797,6 +6101,12 @@ fi +# Check whether --enable-asan was given. +if test "${enable_asan+set}" = set; then : + enableval=$enable_asan; +fi + + # Check whether --enable-poll was given. if test "${enable_poll+set}" = set; then : enableval=$enable_poll; @@ -5850,6 +6160,22 @@ fi +# Check whether --enable-tmpfiles.d was given. +if test "${enable_tmpfiles_d+set}" = set; then : + enableval=$enable_tmpfiles_d; case $enableval in + yes) TMPFILES_D=/usr/lib/tmpfiles.d + ;; + no) TMPFILES_D= + ;; + *) TMPFILES_D="$enableval" +esac +else + + test -f /usr/lib/tmpfiles.d/systemd.conf && TMPFILES_D=/usr/lib/tmpfiles.d + +fi + + # Check whether --with-selinux was given. if test "${with_selinux+set}" = set; then : @@ -6514,176 +6840,34 @@ -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 -$as_echo_n "checking for a sed that does not truncate output... " >&6; } -if ${ac_cv_path_SED+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ - for ac_i in 1 2 3 4 5 6 7; do - ac_script="$ac_script$as_nl$ac_script" - done - echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed - { ac_script=; unset ac_script;} - if test -z "$SED"; then - ac_path_SED_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_SED" || continue -# Check for GNU ac_path_SED and select it if it is found. - # Check for GNU $ac_path_SED -case `"$ac_path_SED" --version 2>&1` in -*GNU*) - ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo '' >> "conftest.nl" - "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_SED_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_SED="$ac_path_SED" - ac_path_SED_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_SED_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_SED"; then - as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 - fi -else - ac_cv_path_SED=$SED -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 -$as_echo "$ac_cv_path_SED" >&6; } - SED="$ac_cv_path_SED" - rm -f conftest.sed - -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do + for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in *GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" @@ -6692,14 +6876,14 @@ cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then + if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break @@ -6707,23 +6891,35 @@ rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac - $ac_path_EGREP_found && break 3 + $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else - ac_cv_path_EGREP=$EGREP + ac_cv_path_SED=$SED fi - fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 @@ -9727,237 +9923,107 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if ${lt_cv_ld_exported_symbols_list+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_ld_exported_symbols_list=yes -else - lt_cv_ld_exported_symbols_list=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 -$as_echo_n "checking for -force_load linker flag... " >&6; } -if ${lt_cv_ld_force_load+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_force_load=no - cat > conftest.c << _LT_EOF -int forced_loaded() { return 2;} -_LT_EOF - echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 - $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 - echo "$AR cru libconftest.a conftest.o" >&5 - $AR cru libconftest.a conftest.o 2>&5 - echo "$RANLIB libconftest.a" >&5 - $RANLIB libconftest.a 2>&5 - cat > conftest.c << _LT_EOF -int main() { return 0;} -_LT_EOF - echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err - _lt_result=$? - if test -s conftest.err && $GREP force_load conftest.err; then - cat conftest.err >&5 - elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then - lt_cv_ld_force_load=yes - else - cat conftest.err >&5 - fi - rm -f conftest.err libconftest.a conftest conftest.c - rm -rf conftest.dSYM - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 -$as_echo "$lt_cv_ld_force_load" >&6; } - case $host_os in - rhapsody* | darwin1.[012]) - _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[91]*) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; - 10.[012][,.]*) - _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test yes = "$lt_cv_apple_cc_single_mod"; then - _lt_dar_single_mod='$single_module' - fi - if test yes = "$lt_cv_ld_exported_symbols_list"; then - _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' - fi - if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if ${lt_cv_ld_exported_symbols_list+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; + + ; return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : - +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi + lt_cv_ld_exported_symbols_list=no fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default -" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 +$as_echo_n "checking for -force_load linker flag... " >&6; } +if ${lt_cv_ld_force_load+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_force_load=no + cat > conftest.c << _LT_EOF +int forced_loaded() { return 2;} +_LT_EOF + echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 + $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 + echo "$AR cru libconftest.a conftest.o" >&5 + $AR cru libconftest.a conftest.o 2>&5 + echo "$RANLIB libconftest.a" >&5 + $RANLIB libconftest.a 2>&5 + cat > conftest.c << _LT_EOF +int main() { return 0;} +_LT_EOF + echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err + _lt_result=$? + if test -s conftest.err && $GREP force_load conftest.err; then + cat conftest.err >&5 + elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then + lt_cv_ld_force_load=yes + else + cat conftest.err >&5 + fi + rm -f conftest.err libconftest.a conftest conftest.c + rm -rf conftest.dSYM fi - -done - +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 +$as_echo "$lt_cv_ld_force_load" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + 10.[012][,.]*) + _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test yes = "$lt_cv_apple_cc_single_mod"; then + _lt_dar_single_mod='$single_module' + fi + if test yes = "$lt_cv_ld_exported_symbols_list"; then + _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' + fi + if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac for ac_header in dlfcn.h do : @@ -14656,12 +14722,16 @@ # system headers lack prototypes but gcc helps... if test -n "$GCC"; then - OSDEFS="${OSDEFS} -D__USE_FIXED_PROTOTYPES__" + $as_echo "#define __USE_FIXED_PROTOTYPES__ 1" >>confdefs.h + fi shadow_funcs="getpwanam issecure" ;; *-*-solaris2*) + $as_echo "#define PAM_SUN_CODEBASE 1" >>confdefs.h + + # LD_PRELOAD is space-delimited RTLD_PRELOAD_DELIM=" " @@ -14669,8 +14739,6 @@ OS_INIT=os_init_solaris SUDO_OBJS="${SUDO_OBJS} solaris.o" - # To get the crypt(3) prototype (so we pass -Wall) - OSDEFS="${OSDEFS} -D__EXTENSIONS__" # AFS support needs -lucb if test "$with_AFS" = "yes"; then AFS_LIBS="-lc -lucb" @@ -14691,29 +14759,19 @@ ;; *-*-aix*) + $as_echo "#define PAM_SUN_CODEBASE 1" >>confdefs.h + + # To get all prototypes (so we pass -Wall) - OSDEFS="${OSDEFS} -D_ALL_SOURCE -D_LINUX_SOURCE_COMPAT" - SUDOERS_LDFLAGS="${SUDOERS_LDFLAGS} -Wl,-bI:\$(srcdir)/aixcrypt.exp" + $as_echo "#define _LINUX_SOURCE_COMPAT 1" >>confdefs.h - # On AIX 6 and higher default to PAM, else default to LAM - if test $OSMAJOR -ge 6; then - if test X"$with_pam" = X""; then - AUTH_EXCL_DEF="PAM" - fi - else - if test X"$with_aixauth" = X""; then - for ac_func in authenticate -do : - ac_fn_c_check_func "$LINENO" "authenticate" "ac_cv_func_authenticate" -if test "x$ac_cv_func_authenticate" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_AUTHENTICATE 1 -_ACEOF - AUTH_EXCL_DEF="AIX_AUTH" -fi -done + SUDOERS_LDFLAGS="${SUDOERS_LDFLAGS} -Wl,-bI:\$(srcdir)/aixcrypt.exp" - fi + # For AIX we build in support for both LAM and PAM + # and choose which to use based on auth_type in + # /etc/security/login.cfg + if test X"${with_pam}${with_aixauth}" = X""; then + AUTH_EXCL_DEF="AIX_AUTH PAM" fi # AIX analog of nsswitch.conf, enabled by default @@ -14745,7 +14803,7 @@ RC_LINK=/etc/rc.d/rc2.d/S90sudo # AIX-specific functions - for ac_func in getuserattr setauthdb setrlimit64 + for ac_func in getuserattr setrlimit64 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" @@ -14757,9 +14815,31 @@ fi done + for ac_func in setauthdb +do : + ac_fn_c_check_func "$LINENO" "setauthdb" "ac_cv_func_setauthdb" +if test "x$ac_cv_func_setauthdb" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SETAUTHDB 1 +_ACEOF + ac_fn_c_check_type "$LINENO" "authdb_t" "ac_cv_type_authdb_t" "#include +" +if test "x$ac_cv_type_authdb_t" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_AUTHDB_T 1 +_ACEOF + + +fi + +fi +done + + COMMON_OBJS="${COMMON_OBJS} aix.lo" - for _sym in aix_prep_user_v1 aix_restoreauthdb_v1 aix_setauthdb_v1; do + for _sym in aix_prep_user_v1 aix_restoreauthdb_v1 aix_setauthdb_v1 aix_setauthdb_v2 aix_getauthregistry_v1; do COMPAT_EXP="${COMPAT_EXP}${_sym} " done @@ -14798,6 +14878,9 @@ ;; *-*-hiuxmpp*) + $as_echo "#define PAM_SUN_CODEBASE 1" >>confdefs.h + + : ${mansectsu='1m'} : ${mansectform='4'} @@ -14823,6 +14906,9 @@ ;; *-*-hpux*) + $as_echo "#define PAM_SUN_CODEBASE 1" >>confdefs.h + + # AFS support needs -lBSD if test "$with_AFS" = "yes"; then AFS_LIBS="-lc -lBSD" @@ -14906,14 +14992,7 @@ esac case "$host_os" in - hpux[1-8].*) - $as_echo "#define BROKEN_SYSLOG 1" >>confdefs.h - - ;; hpux9.*) - $as_echo "#define BROKEN_SYSLOG 1" >>confdefs.h - - shadow_funcs="getspwuid" # DCE support (requires ANSI C compiler) @@ -14921,18 +15000,7 @@ # order of libs in 9.X is important. -lc_r must be last SUDOERS_LIBS="${SUDOERS_LIBS} -ldce -lM -lc_r" LIBS="${LIBS} -ldce -lM -lc_r" - - case "${CPPFLAGS}" in - *"-D_REENTRANT"|*"-D_REENTRANT ") - ;; - *) - if test X"${CPPFLAGS}" = X""; then - CPPFLAGS="-D_REENTRANT" - else - CPPFLAGS="${CPPFLAGS} -D_REENTRANT" - fi - ;; - esac + $as_echo "#define _REENTRANT 1" >>confdefs.h case "${CPPFLAGS}" in @@ -15055,7 +15123,8 @@ : ${mansectform='4'} ;; *-*-irix*) - OSDEFS="${OSDEFS} -D_BSD_TYPES" + $as_echo "#define _BSD_TYPES 1" >>confdefs.h + if test -z "$NROFFPROG"; then if test "$prefix" = "/usr/local" -a "$mandir" = '${datarootdir}/man'; then if test -d /usr/share/catman/local; then @@ -15126,15 +15195,12 @@ : ${mansectform='4'} ;; *-*-linux*|*-*-k*bsd*-gnu) - OSDEFS="${OSDEFS} -D_GNU_SOURCE" shadow_funcs="getspnam" test -z "$with_pam" && AUTH_EXCL_DEF="PAM" ;; *-*-gnu*) - OSDEFS="${OSDEFS} -D_GNU_SOURCE" - # lockf() is broken on the Hurd -- use flock instead + # lockf() is broken on the Hurd ac_cv_func_lockf=no - ac_cv_func_flock=yes ;; *-*-ultrix*) OS="ultrix" @@ -15169,12 +15235,36 @@ ;; esac - OSDEFS="${OSDEFS} -D_MIPS" + + case "${CPPFLAGS}" in + *"-D_MIPS"|*"-D_MIPS ") + ;; + *) + if test X"${CPPFLAGS}" = X""; then + CPPFLAGS="-D_MIPS" + else + CPPFLAGS="${CPPFLAGS} -D_MIPS" + fi + ;; + esac + : ${mansectsu='1m'} : ${mansectform='4'} ;; *-*-isc*) - OSDEFS="${OSDEFS} -D_ISC" + + case "${CPPFLAGS}" in + *"-D_ISC"|*"-D_ISC ") + ;; + *) + if test X"${CPPFLAGS}" = X""; then + CPPFLAGS="-D_ISC" + else + CPPFLAGS="${CPPFLAGS} -D_ISC" + fi + ;; + esac + LIB_CRYPT=1 SUDOERS_LIBS="${SUDOERS_LIBS} -lcrypt" @@ -15269,6 +15359,9 @@ fi ;; *-*-freebsd*) + $as_echo "#define _BSD_SOURCE 1" >>confdefs.h + + # FreeBSD has a real setreuid(2) starting with 2.1 and # backported to 2.0.5. We just take 2.1 and above... case "$OSREV" in @@ -15276,15 +15369,22 @@ SKIP_SETREUID=yes ;; esac - OSDEFS="${OSDEFS} -D_BSD_SOURCE" if test "${with_skey-'no'}" = "yes"; then SUDOERS_LIBS="${SUDOERS_LIBS} -lmd" fi CHECKSHADOW="false" test -z "$with_pam" && AUTH_EXCL_DEF="PAM" : ${with_logincap='maybe'} + + # Examples go in share/examples/sudo + if test X"$with_exampledir" = X""; then + exampledir='$(datarootdir)/examples/$(PACKAGE_TARNAME)' + fi ;; *-*-*openbsd*) + $as_echo "#define _BSD_SOURCE 1" >>confdefs.h + + # OpenBSD-specific initialization OS_INIT=os_init_openbsd SUDO_OBJS="${SUDO_OBJS} openbsd.o" @@ -15292,7 +15392,6 @@ # OpenBSD has a real setreuid(2) starting with 3.3 but # we will use setresuid(2) instead. SKIP_SETREUID=yes - OSDEFS="${OSDEFS} -D_BSD_SOURCE" CHECKSHADOW="false" # OpenBSD >= 3.0 supports BSD auth if test -z "$with_bsdauth"; then @@ -15301,6 +15400,11 @@ fi fi : ${with_logincap='maybe'} + + # Examples go in share/examples/sudo + if test X"$with_exampledir" = X""; then + exampledir='$(datarootdir)/examples/$(PACKAGE_TARNAME)' + fi ;; *-*-*netbsd*) # NetBSD has a real setreuid(2) starting with 1.3.2 @@ -15312,18 +15416,34 @@ CHECKSHADOW="false" test -z "$with_pam" && AUTH_EXCL_DEF="PAM" : ${with_logincap='maybe'} + + # Examples go in share/examples/sudo + if test X"$with_exampledir" = X""; then + exampledir='$(datarootdir)/examples/$(PACKAGE_TARNAME)' + fi ;; *-*-dragonfly*) - OSDEFS="${OSDEFS} -D_BSD_SOURCE" + $as_echo "#define _BSD_SOURCE 1" >>confdefs.h + + if test "${with_skey-'no'}" = "yes"; then SUDOERS_LIBS="${SUDOERS_LIBS} -lmd" fi CHECKSHADOW="false" test -z "$with_pam" && AUTH_EXCL_DEF="PAM" : ${with_logincap='yes'} + + # Examples go in share/examples/sudo + if test X"$with_exampledir" = X""; then + exampledir='$(datarootdir)/examples/$(PACKAGE_TARNAME)' + fi ;; *-*-*bsd*) CHECKSHADOW="false" + # Examples go in share/examples/sudo + if test X"$with_exampledir" = X""; then + exampledir='$(datarootdir)/examples/$(PACKAGE_TARNAME)' + fi ;; *-*-darwin*) # Darwin has a real setreuid(2) starting with 9.0 @@ -15344,11 +15464,54 @@ RTLD_PRELOAD_ENABLE_VAR="DYLD_FORCE_FLAT_NAMESPACE" fi RTLD_PRELOAD_VAR="DYLD_INSERT_LIBRARIES" + + # We need to force a flat namespace to make libc + # symbol hooking work like it does on ELF. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the linker accepts -Wl,-force_flat_namespace" >&5 +$as_echo_n "checking whether the linker accepts -Wl,-force_flat_namespace... " >&6; } +if ${ax_cv_check_ldflags___Wl__force_flat_namespace+:} false; then : + $as_echo_n "(cached) " >&6 +else + + ax_check_save_flags=$LDFLAGS + LDFLAGS="$LDFLAGS -Wl,-force_flat_namespace" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ax_cv_check_ldflags___Wl__force_flat_namespace=yes +else + ax_cv_check_ldflags___Wl__force_flat_namespace=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$ax_check_save_flags +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_ldflags___Wl__force_flat_namespace" >&5 +$as_echo "$ax_cv_check_ldflags___Wl__force_flat_namespace" >&6; } +if test x"$ax_cv_check_ldflags___Wl__force_flat_namespace" = xyes; then : + SUDO_LDFLAGS="${SUDO_LDFLAGS}${SUDO_LDFLAGS+ }-Wl,-force_flat_namespace" +else + : +fi + + + # Examples go in share/examples/sudo + if test X"$with_exampledir" = X""; then + exampledir='$(datarootdir)/examples/$(PACKAGE_TARNAME)' + fi ;; *-*-nextstep*) - # lockf() is broken on the NeXT -- use flock instead + # lockf() is broken on the NeXT ac_cv_func_lockf=no - ac_cv_func_flock=yes RTLD_PRELOAD_VAR="DYLD_INSERT_LIBRARIES" RTLD_PRELOAD_ENABLE_VAR="DYLD_FORCE_FLAT_NAMESPACE" ;; @@ -15360,9 +15523,6 @@ : ${mansectsu='1m'} : ${mansectform='4'} ;; - *-gnu*) - OSDEFS="${OSDEFS} -D_GNU_SOURCE" - ;; esac if test -n "$with_noexec"; then @@ -15391,10 +15551,6 @@ AUTH_REG=${AUTH_REG# } AUTH_EXCL=${AUTH_EXCL# } if test -n "$AUTH_EXCL"; then - set -- $AUTH_EXCL - if test $# != 1; then - as_fn_error $? "More than one mutually exclusive authentication method specified: $AUTH_EXCL" "$LINENO" 5 - fi if test -n "$AUTH_REG"; then as_fn_error $? "Cannot mix mutually exclusive ($AUTH_EXCL) and regular ($AUTH_REG) authentication methods" "$LINENO" 5 fi @@ -15807,6 +15963,48 @@ fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if ${ac_cv_c_inline+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_inline=$ac_kw +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_inline" != no && break +done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } + +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working volatile" >&5 $as_echo_n "checking for working volatile... " >&6; } if ${ac_cv_c_volatile+:} false; then : @@ -16221,118 +16419,6 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $logfac" >&5 $as_echo "$logfac" >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#include -#include - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no -fi -rm -f conftest* - -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : - -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi - -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then - -$as_echo "#define STDC_HEADERS 1" >>confdefs.h - -fi - ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` @@ -16705,10 +16791,6 @@ - - - - for ac_header in endian.h sys/endian.h machine/endian.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` @@ -17021,10 +17103,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $sudo_cv_xopen_source_extended" >&5 $as_echo "$sudo_cv_xopen_source_extended" >&6; } if test "$sudo_cv_xopen_source_extended" = "yes"; then - OSDEFS="${OSDEFS} -D_XOPEN_SOURCE_EXTENDED" - cat >>confdefs.h <<\EOF -#define _XOPEN_SOURCE_EXTENDED 1 -EOF + $as_echo "#define _XOPEN_SOURCE_EXTENDED 1" >>confdefs.h fi ;; @@ -17198,18 +17277,7 @@ fi - - case "${CPPFLAGS}" in - *"-D__STDC_WANT_LIB_EXT1__=1"|*"-D__STDC_WANT_LIB_EXT1__=1 ") - ;; - *) - if test X"${CPPFLAGS}" = X""; then - CPPFLAGS="-D__STDC_WANT_LIB_EXT1__=1" - else - CPPFLAGS="${CPPFLAGS} -D__STDC_WANT_LIB_EXT1__=1" - fi - ;; - esac +$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 : @@ -17284,21 +17352,6 @@ fi -ac_fn_c_check_type "$LINENO" "struct timespec" "ac_cv_type_struct_timespec" "#include -#ifdef TIME_WITH_SYS_TIME -# include -#endif -#include -" -if test "x$ac_cv_type_struct_timespec" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_TIMESPEC 1 -_ACEOF - - -fi - ac_fn_c_check_type "$LINENO" "struct in6_addr" "ac_cv_type_struct_in6_addr" "#include #include " @@ -17431,39 +17484,6 @@ if test X"$ac_cv_type_long_long_int" != X"yes"; then as_fn_error $? "\"C compiler does not appear to support the long long int type\"" "$LINENO" 5 fi -# The cast to long int works around a bug in the HP C Compiler -# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects -# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. -# This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long int" >&5 -$as_echo_n "checking size of long int... " >&6; } -if ${ac_cv_sizeof_long_int+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long int))" "ac_cv_sizeof_long_int" "$ac_includes_default"; then : - -else - if test "$ac_cv_type_long_int" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "cannot compute sizeof (long int) -See \`config.log' for more details" "$LINENO" 5; } - else - ac_cv_sizeof_long_int=0 - fi -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_int" >&5 -$as_echo "$ac_cv_sizeof_long_int" >&6; } - - - -cat >>confdefs.h <<_ACEOF -#define SIZEOF_LONG_INT $ac_cv_sizeof_long_int -_ACEOF - - ac_fn_c_check_type "$LINENO" "id_t" "ac_cv_type_id_t" "$ac_includes_default" if test "x$ac_cv_type_id_t" = xyes; then : @@ -17519,6 +17539,39 @@ fi +ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" +if test "x$ac_cv_type_ptrdiff_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define ptrdiff_t long +_ACEOF + +fi + +ac_fn_c_check_type "$LINENO" "intmax_t" "ac_cv_type_intmax_t" "$ac_includes_default" +if test "x$ac_cv_type_intmax_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define intmax_t long long +_ACEOF + +fi + +ac_fn_c_check_type "$LINENO" "uintmax_t" "ac_cv_type_uintmax_t" "$ac_includes_default" +if test "x$ac_cv_type_uintmax_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define uintmax_t unsigned long long +_ACEOF + +fi + ac_fn_c_check_type "$LINENO" "uint8_t" "ac_cv_type_uint8_t" "$ac_includes_default" if test "x$ac_cv_type_uint8_t" = xyes; then : @@ -17663,8 +17716,6 @@ fi -_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS $OSDEFS" if test $ac_cv_header_utmpx_h = "yes"; then ac_fn_c_check_member "$LINENO" "struct utmpx" "ut_id" "ac_cv_member_struct_utmpx_ut_id" " # include @@ -17853,7 +17904,6 @@ fi fi -CFLAGS="$_CFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking type of array argument to getgroups" >&5 $as_echo_n "checking type of array argument to getgroups... " >&6; } @@ -18057,6 +18107,37 @@ + + + + + + +case "$host_os" in + hpux*) + if test X"$ac_cv_func_pread" = X"yes"; then + O_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE" + for ac_func in pread64 pwrite64 +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 + + +$as_echo "#define _LARGEFILE64_SOURCE 1" >>confdefs.h + + +fi +done + + CPPFLAGS="$O_CPPFLAGS" + fi + ;; +esac for ac_func in getgrouplist do : ac_fn_c_check_func "$LINENO" "getgrouplist" "ac_cv_func_getgrouplist" @@ -18230,9 +18311,48 @@ fi done +for ac_func in reallocarray +do : + ac_fn_c_check_func "$LINENO" "reallocarray" "ac_cv_func_reallocarray" +if test "x$ac_cv_func_reallocarray" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_REALLOCARRAY 1 +_ACEOF + +else + + case " $LIBOBJS " in + *" reallocarray.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS reallocarray.$ac_objext" + ;; +esac + + + for _sym in sudo_reallocarray; do + COMPAT_EXP="${COMPAT_EXP}${_sym} +" + done + + +fi +done + if test "$enable_hardening" != "no"; then + found=false O_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS -D_FORTIFY_SOURCE=2" + + case "${CPPFLAGS}" in + *"-D_FORTIFY_SOURCE=2"|*"-D_FORTIFY_SOURCE=2 ") + ;; + *) + if test X"${CPPFLAGS}" = X""; then + CPPFLAGS="-D_FORTIFY_SOURCE=2" + else + CPPFLAGS="${CPPFLAGS} -D_FORTIFY_SOURCE=2" + fi + ;; + esac + ac_fn_c_check_func "$LINENO" "__sprintf_chk" "ac_cv_func___sprintf_chk" if test "x$ac_cv_func___sprintf_chk" = xyes; then : @@ -18248,14 +18368,16 @@ } _ACEOF if ac_fn_c_try_link "$LINENO"; then : - OSDEFS="${OSDEFS} -D_FORTIFY_SOURCE=2" + found=true fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi - CPPFLAGS="$O_CPPFLAGS" + if test X"$found" != X"true"; then + CPPFLAGS="$O_CPPFLAGS" + fi fi utmp_style=LEGACY @@ -18689,13 +18811,12 @@ done fi -for ac_func in lockf flock +for ac_func in lockf 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 : + ac_fn_c_check_func "$LINENO" "lockf" "ac_cv_func_lockf" +if test "x$ac_cv_func_lockf" = xyes; then : cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_LOCKF 1 _ACEOF break fi @@ -18814,10 +18935,32 @@ done -fi -done +fi +done + +for ac_func in utimensat +do : + ac_fn_c_check_func "$LINENO" "utimensat" "ac_cv_func_utimensat" +if test "x$ac_cv_func_utimensat" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_UTIMENSAT 1 +_ACEOF + +else + + case " $LIBOBJS " in + *" utimens.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS utimens.$ac_objext" + ;; +esac + + + for _sym in sudo_utimensat; do + COMPAT_EXP="${COMPAT_EXP}${_sym} +" + done -for ac_func in utimes + for ac_func in utimes do : ac_fn_c_check_func "$LINENO" "utimes" "ac_cv_func_utimes" if test "x$ac_cv_func_utimes" = xyes; then : @@ -18825,46 +18968,44 @@ #define HAVE_UTIMES 1 _ACEOF - for ac_func in futimes futimesat -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 + +for ac_func in futimens +do : + ac_fn_c_check_func "$LINENO" "futimens" "ac_cv_func_futimens" +if test "x$ac_cv_func_futimens" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_FUTIMENS 1 +_ACEOF + else case " $LIBOBJS " in - *" utimes.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS utimes.$ac_objext" + *" utimens.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS utimens.$ac_objext" ;; esac - for _sym in sudo_utimes; do + for _sym in sudo_futimens; do COMPAT_EXP="${COMPAT_EXP}${_sym} " done - for ac_func in futime + for ac_func in futimes futimesat futime do : - ac_fn_c_check_func "$LINENO" "futime" "ac_cv_func_futime" -if test "x$ac_cv_func_futime" = xyes; then : + 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 HAVE_FUTIME 1 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF - - for _sym in sudo_futimes; do - COMPAT_EXP="${COMPAT_EXP}${_sym} -" - done - + break fi done @@ -19122,6 +19263,125 @@ fi done +ac_fn_c_check_func "$LINENO" "strnlen" "ac_cv_func_strnlen" +if test "x$ac_cv_func_strnlen" = xyes; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strnlen" >&5 +$as_echo_n "checking for working strnlen... " >&6; } +if ${ac_cv_func_strnlen_working+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + # Guess no on AIX systems, yes otherwise. + case "$host_os" in + aix*) ac_cv_func_strnlen_working=no;; + *) ac_cv_func_strnlen_working=yes;; + esac +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + +#define S "foobar" +#define S_LEN (sizeof S - 1) + + /* At least one implementation is buggy: that of AIX 4.3 would + give strnlen (S, 1) == 3. */ + + int i; + for (i = 0; i < S_LEN + 1; ++i) + { + int expected = i <= S_LEN ? i : S_LEN; + if (strnlen (S, i) != expected) + return 1; + } + return 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_strnlen_working=yes +else + ac_cv_func_strnlen_working=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strnlen_working" >&5 +$as_echo "$ac_cv_func_strnlen_working" >&6; } +test $ac_cv_func_strnlen_working = no && case " $LIBOBJS " in + *" strnlen.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS strnlen.$ac_objext" + ;; +esac + + +else + case " $LIBOBJS " in + *" strnlen.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS strnlen.$ac_objext" + ;; +esac + +fi + +if test X"$ac_cv_func_strnlen_working" = X"yes"; then + $as_echo "#define HAVE_STRNLEN 1" >>confdefs.h + + for ac_func in strndup +do : + ac_fn_c_check_func "$LINENO" "strndup" "ac_cv_func_strndup" +if test "x$ac_cv_func_strndup" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STRNDUP 1 +_ACEOF + +else + + case " $LIBOBJS " in + *" strndup.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS strndup.$ac_objext" + ;; +esac + + + for _sym in sudo_strndup; do + COMPAT_EXP="${COMPAT_EXP}${_sym} +" + done + + +fi +done + +else + # Broken or missing strnlen, use our own. + + for _sym in sudo_strnlen; do + COMPAT_EXP="${COMPAT_EXP}${_sym} +" + done + + # Avoid libc strndup() since it is usually implemented using strnlen() + case " $LIBOBJS " in + *" strndup.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS strndup.$ac_objext" + ;; +esac + + + for _sym in sudo_strndup; do + COMPAT_EXP="${COMPAT_EXP}${_sym} +" + done + +fi for ac_func in clock_gettime do : ac_fn_c_check_func "$LINENO" "clock_gettime" "ac_cv_func_clock_gettime" @@ -19173,22 +19433,7 @@ $as_echo "#define HAVE_CLOCK_GETTIME 1" >>confdefs.h - SUDOERS_LIBS="${SUDOERS_LIBS} -lrt" - -else - - case " $LIBOBJS " in - *" clock_gettime.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS clock_gettime.$ac_objext" - ;; -esac - - - for _sym in sudo_clock_gettime; do - COMPAT_EXP="${COMPAT_EXP}${_sym} -" - done - + LIBRT="-lrt" fi @@ -19328,6 +19573,7 @@ " done + COMPAT_TEST_PROGS="${COMPAT_TEST_PROGS}${COMPAT_TEST_PROGS+ }mktemp_test" fi for ac_func in snprintf vsnprintf do : @@ -19530,12 +19776,11 @@ " done -if test X"$ac_cv_type_struct_timespec" != X"no"; then - ac_fn_c_check_member "$LINENO" "struct stat" "st_mtim" "ac_cv_member_struct_stat_st_mtim" "$ac_includes_default" +ac_fn_c_check_member "$LINENO" "struct stat" "st_mtim" "ac_cv_member_struct_stat_st_mtim" "$ac_includes_default" if test "x$ac_cv_member_struct_stat_st_mtim" = xyes; then : $as_echo "#define HAVE_ST_MTIM 1" >>confdefs.h - ac_fn_c_check_member "$LINENO" "struct stat" "st_mtim.st__tim" "ac_cv_member_struct_stat_st_mtim_st__tim" "$ac_includes_default" + ac_fn_c_check_member "$LINENO" "struct stat" "st_mtim.st__tim" "ac_cv_member_struct_stat_st_mtim_st__tim" "$ac_includes_default" if test "x$ac_cv_member_struct_stat_st_mtim_st__tim" = xyes; then : $as_echo "#define HAVE_ST__TIM 1" >>confdefs.h @@ -19550,7 +19795,6 @@ fi -fi FOUND_SHA2=no ac_fn_c_check_header_mongrel "$LINENO" "sha2.h" "ac_cv_header_sha2_h" "$ac_includes_default" if test "x$ac_cv_header_sha2_h" = xyes; then : @@ -19644,260 +19888,70 @@ $as_echo_n "checking whether the data argument of SHA224Update() is void *... " >&6; } if ${sudo_cv_func_sha2_void_ptr+:} false; then : $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$ac_includes_default -#include -void SHA224Update(SHA2_CTX *context, const void *data, size_t len) {return;} -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - sudo_cv_func_sha2_void_ptr=yes -else - sudo_cv_func_sha2_void_ptr=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sudo_cv_func_sha2_void_ptr" >&5 -$as_echo "$sudo_cv_func_sha2_void_ptr" >&6; } - if test $sudo_cv_func_sha2_void_ptr = yes; then - -$as_echo "#define SHA2_VOID_PTR 1" >>confdefs.h - - fi - - LIBMD="-lmd" - -else - - # Does not have SHA224Update - FOUND_SHA2=no - -fi - - -fi -done - - -fi - - -if test X"$FOUND_SHA2" = X"no"; then - case " $LIBOBJS " in - *" sha2.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS sha2.$ac_objext" - ;; -esac - - - for _sym in SHA224Final SHA224Init SHA224Pad SHA224Transform SHA224Update SHA256Final SHA256Init SHA256Pad SHA256Transform SHA256Update SHA384Final SHA384Init SHA384Pad SHA384Transform SHA384Update SHA512Final SHA512Init SHA512Pad SHA512Transform SHA512Update; do - COMPAT_EXP="${COMPAT_EXP}${_sym} -" - done - -fi -if test X"$with_noexec" != X"no"; then - # Check for underscore versions of standard exec functions - # unless we are using dyld symbole interposition - if test X"$dlyld_interpose" != X"yes"; then - for ac_func in _execl __execl -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 - -fi -done - - for ac_func in _execle __execle -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 - -fi -done - - for ac_func in _execlp __execlp -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 - -fi -done - - for ac_func in _execv __execv -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 - -fi -done - - for ac_func in _execve __execve -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 - -fi -done - - for ac_func in _execvp __execvp -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 - -fi -done - - fi - # Check for non-standard exec functions including underscore versions - for ac_func in exect -do : - ac_fn_c_check_func "$LINENO" "exect" "ac_cv_func_exect" -if test "x$ac_cv_func_exect" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_EXECT 1 -_ACEOF +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +#include +void SHA224Update(SHA2_CTX *context, const void *data, size_t len) {return;} +int +main () +{ - if test X"$dlyld_interpose" != X"yes"; then - for ac_func in _exect __exect -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 + ; + return 0; +} _ACEOF - +if ac_fn_c_try_compile "$LINENO"; then : + sudo_cv_func_sha2_void_ptr=yes +else + sudo_cv_func_sha2_void_ptr=no fi -done - - fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -done +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sudo_cv_func_sha2_void_ptr" >&5 +$as_echo "$sudo_cv_func_sha2_void_ptr" >&6; } + if test $sudo_cv_func_sha2_void_ptr = yes; then - for ac_func in execvP -do : - ac_fn_c_check_func "$LINENO" "execvP" "ac_cv_func_execvP" -if test "x$ac_cv_func_execvP" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_EXECVP 1 -_ACEOF +$as_echo "#define SHA2_VOID_PTR 1" >>confdefs.h - if test X"$dlyld_interpose" != X"yes"; then - for ac_func in _execvP __execvP -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 + fi -fi -done + LIBMD="-lmd" - fi +else -fi -done + # Does not have SHA224Update + FOUND_SHA2=no - for ac_func in execvpe -do : - ac_fn_c_check_func "$LINENO" "execvpe" "ac_cv_func_execvpe" -if test "x$ac_cv_func_execvpe" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_EXECVPE 1 -_ACEOF +fi - if test X"$dlyld_interpose" != X"yes"; then - for ac_func in _execvpe __execvpe -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 fi done - fi fi -done - for ac_func in fexecve -do : - ac_fn_c_check_func "$LINENO" "fexecve" "ac_cv_func_fexecve" -if test "x$ac_cv_func_fexecve" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_FEXECVE 1 -_ACEOF - if test X"$dlyld_interpose" != X"yes"; then - for ac_func in _fexecve __fexecve -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 +if test X"$FOUND_SHA2" = X"no"; then + case " $LIBOBJS " in + *" sha2.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS sha2.$ac_objext" + ;; +esac -fi -done - fi + for _sym in sudo_SHA224Final sudo_SHA224Init sudo_SHA224Pad sudo_SHA224Transform sudo_SHA224Update sudo_SHA256Final sudo_SHA256Init sudo_SHA256Pad sudo_SHA256Transform sudo_SHA256Update sudo_SHA384Final sudo_SHA384Init sudo_SHA384Pad sudo_SHA384Transform sudo_SHA384Update sudo_SHA512Final sudo_SHA512Init sudo_SHA512Pad sudo_SHA512Transform sudo_SHA512Update; do + COMPAT_EXP="${COMPAT_EXP}${_sym} +" + done fi -done - - # Check for posix_spawn, posix_spawnp and any underscore versions - for ac_func in posix_spawn -do : - ac_fn_c_check_func "$LINENO" "posix_spawn" "ac_cv_func_posix_spawn" -if test "x$ac_cv_func_posix_spawn" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_POSIX_SPAWN 1 -_ACEOF - - if test X"$dlyld_interpose" != X"yes"; then - for ac_func in _posix_spawn __posix_spawn +if test X"$with_noexec" != X"no"; then + # Check for non-standard exec functions + for ac_func in exect execvP execvpe 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" @@ -19909,21 +19963,9 @@ fi done - fi - -fi -done - - for ac_func in posix_spawnp -do : - ac_fn_c_check_func "$LINENO" "posix_spawnp" "ac_cv_func_posix_spawnp" -if test "x$ac_cv_func_posix_spawnp" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_POSIX_SPAWNP 1 -_ACEOF - - if test X"$dlyld_interpose" != X"yes"; then - for ac_func in _posix_spawnp __posix_spawnp + # Check for posix_spawn, and posix_spawnp + if test X"$ac_cv_header_spawn_h" = X"yes"; then + for ac_func in posix_spawn posix_spawnp 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" @@ -19935,11 +19977,7 @@ fi done - fi - -fi -done - + fi fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -19992,6 +20030,19 @@ fi +ac_fn_c_check_member "$LINENO" "struct dirent" "d_namlen" "ac_cv_member_struct_dirent_d_namlen" " +$ac_includes_default +#include <$ac_header_dirent> + +" +if test "x$ac_cv_member_struct_dirent_d_namlen" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_DIRENT_D_NAMLEN 1 +_ACEOF + + +fi OLIBS="$LIBS" LIBS="${LIBS} ${NET_LIBS}" @@ -20070,11 +20121,12 @@ OLIBS="$LIBS" LIBS="${LIBS} ${NET_LIBS}" found=false -ac_fn_c_check_func "$LINENO" "inet_ntop" "ac_cv_func_inet_ntop" -if test "x$ac_cv_func_inet_ntop" = xyes; then : +INET_PTON_LIBS= +ac_fn_c_check_func "$LINENO" "inet_pton" "ac_cv_func_inet_pton" +if test "x$ac_cv_func_inet_pton" = xyes; then : found=true - $as_echo "#define HAVE_INET_NTOP 1" >>confdefs.h + $as_echo "#define HAVE_INET_PTON 1" >>confdefs.h else @@ -20093,9 +20145,9 @@ extralibs="`echo \"$libs\"|sed 's/^-l[^ ]*//'`" _sudo_check_lib_extras=`echo "$extralibs"|sed -e 's/ *//g' -e 's/-l/_/g'` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_ntop in -l$lib${5+ }$extralibs" >&5 -$as_echo_n "checking for inet_ntop in -l$lib${5+ }$extralibs... " >&6; } - if { as_var=sudo_cv_lib_$lib''_inet_ntop$_sudo_check_lib_extras; eval \${$as_var+:} false; }; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_pton in -l$lib${5+ }$extralibs" >&5 +$as_echo_n "checking for inet_pton in -l$lib${5+ }$extralibs... " >&6; } + if { as_var=sudo_cv_lib_$lib''_inet_pton$_sudo_check_lib_extras; eval \${$as_var+:} false; }; then : $as_echo_n "(cached) " >&6 else @@ -20110,19 +20162,19 @@ #ifdef __cplusplus extern "C" #endif -char inet_ntop (); +char inet_pton (); int main () { -return inet_ntop (); +return inet_pton (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : - eval sudo_cv_lib_$lib''_inet_ntop$_sudo_check_lib_extras=yes + eval sudo_cv_lib_$lib''_inet_pton$_sudo_check_lib_extras=yes else - eval sudo_cv_lib_$lib''_inet_ntop$_sudo_check_lib_extras=no + eval sudo_cv_lib_$lib''_inet_pton$_sudo_check_lib_extras=no fi rm -f core conftest.err conftest.$ac_objext \ @@ -20131,14 +20183,21 @@ fi - if eval test \$sudo_cv_lib_$lib''_inet_ntop$_sudo_check_lib_extras = "yes"; then + if eval test \$sudo_cv_lib_$lib''_inet_pton$_sudo_check_lib_extras = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } found=true - $as_echo "#define HAVE_INET_NTOP 1" >>confdefs.h + $as_echo "#define HAVE_INET_PTON 1" >>confdefs.h NET_LIBS="${NET_LIBS} $libs" + INET_PTON_LIBS="$libs" + case "$libs" in + *-lresolv*) + $as_echo "#define NEED_RESOLV_H 1" >>confdefs.h + + ;; + esac break else @@ -20154,13 +20213,13 @@ LIBS="$OLIBS" if test X"$found" != X"true"; then case " $LIBOBJS " in - *" inet_ntop.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS inet_ntop.$ac_objext" + *" inet_pton.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS inet_pton.$ac_objext" ;; esac - for _sym in sudo_inet_ntop; do + for _sym in sudo_inet_pton; do COMPAT_EXP="${COMPAT_EXP}${_sym} " done @@ -20169,12 +20228,11 @@ OLIBS="$LIBS" LIBS="${LIBS} ${NET_LIBS}" found=false -INET_PTON_LIBS= -ac_fn_c_check_func "$LINENO" "inet_pton" "ac_cv_func_inet_pton" -if test "x$ac_cv_func_inet_pton" = xyes; then : +ac_fn_c_check_func "$LINENO" "inet_ntop" "ac_cv_func_inet_ntop" +if test "x$ac_cv_func_inet_ntop" = xyes; then : found=true - $as_echo "#define HAVE_INET_PTON 1" >>confdefs.h + $as_echo "#define HAVE_INET_NTOP 1" >>confdefs.h else @@ -20193,9 +20251,9 @@ extralibs="`echo \"$libs\"|sed 's/^-l[^ ]*//'`" _sudo_check_lib_extras=`echo "$extralibs"|sed -e 's/ *//g' -e 's/-l/_/g'` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_pton in -l$lib${5+ }$extralibs" >&5 -$as_echo_n "checking for inet_pton in -l$lib${5+ }$extralibs... " >&6; } - if { as_var=sudo_cv_lib_$lib''_inet_pton$_sudo_check_lib_extras; eval \${$as_var+:} false; }; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_ntop in -l$lib${5+ }$extralibs" >&5 +$as_echo_n "checking for inet_ntop in -l$lib${5+ }$extralibs... " >&6; } + if { as_var=sudo_cv_lib_$lib''_inet_ntop$_sudo_check_lib_extras; eval \${$as_var+:} false; }; then : $as_echo_n "(cached) " >&6 else @@ -20210,19 +20268,19 @@ #ifdef __cplusplus extern "C" #endif -char inet_pton (); +char inet_ntop (); int main () { -return inet_pton (); +return inet_ntop (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : - eval sudo_cv_lib_$lib''_inet_pton$_sudo_check_lib_extras=yes + eval sudo_cv_lib_$lib''_inet_ntop$_sudo_check_lib_extras=yes else - eval sudo_cv_lib_$lib''_inet_pton$_sudo_check_lib_extras=no + eval sudo_cv_lib_$lib''_inet_ntop$_sudo_check_lib_extras=no fi rm -f core conftest.err conftest.$ac_objext \ @@ -20231,15 +20289,14 @@ fi - if eval test \$sudo_cv_lib_$lib''_inet_pton$_sudo_check_lib_extras = "yes"; then + if eval test \$sudo_cv_lib_$lib''_inet_ntop$_sudo_check_lib_extras = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } found=true - $as_echo "#define HAVE_INET_PTON 1" >>confdefs.h + $as_echo "#define HAVE_INET_NTOP 1" >>confdefs.h NET_LIBS="${NET_LIBS} $libs" - INET_PTON_LIBS="$libs" break else @@ -20255,13 +20312,13 @@ LIBS="$OLIBS" if test X"$found" != X"true"; then case " $LIBOBJS " in - *" inet_pton.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS inet_pton.$ac_objext" + *" inet_ntop.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS inet_ntop.$ac_objext" ;; esac - for _sym in sudo_inet_pton; do + for _sym in sudo_inet_ntop; do COMPAT_EXP="${COMPAT_EXP}${_sym} " done @@ -20766,24 +20823,28 @@ LIBS="$OLIBS" if test "$sudo_cv_gettext" = "yes"; then - $as_echo "#define HAVE_LIBINTL_H 1" >>confdefs.h - SUDO_NLS=enabled # For Solaris we need links from lang to lang.UTF-8 in localedir case "$host_os" in solaris2*) LOCALEDIR_SUFFIX=".UTF-8";; esac elif test "$sudo_cv_gettext_lintl" = "yes"; then - $as_echo "#define HAVE_LIBINTL_H 1" >>confdefs.h - SUDO_NLS=enabled LIBINTL="-lintl" elif test "$sudo_cv_gettext_lintl_liconv" = "yes"; then - $as_echo "#define HAVE_LIBINTL_H 1" >>confdefs.h - SUDO_NLS=enabled LIBINTL="-lintl -liconv" fi + if test X"$SUDO_NLS" = X"enabled"; then + $as_echo "#define HAVE_LIBINTL_H 1" >>confdefs.h + + + for _sym in sudo_warn_gettext_v1; do + COMPAT_EXP="${COMPAT_EXP}${_sym} +" + done + + fi fi case "$enable_zlib" in @@ -20938,22 +20999,6 @@ _ACEOF -_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS $OSDEFS" -ac_fn_c_check_decl "$LINENO" "OPEN_MAX" "ac_cv_have_decl_OPEN_MAX" " -#include -#include - -" -if test "x$ac_cv_have_decl_OPEN_MAX" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_OPEN_MAX $ac_have_decl -_ACEOF ac_fn_c_check_decl "$LINENO" "LLONG_MAX" "ac_cv_have_decl_LLONG_MAX" " #include #include @@ -21010,20 +21055,6 @@ cat >>confdefs.h <<_ACEOF #define HAVE_DECL_PATH_MAX $ac_have_decl _ACEOF -ac_fn_c_check_decl "$LINENO" "HOST_NAME_MAX" "ac_cv_have_decl_HOST_NAME_MAX" " -#include -#include - -" -if test "x$ac_cv_have_decl_HOST_NAME_MAX" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_HOST_NAME_MAX $ac_have_decl -_ACEOF ac_fn_c_check_decl "$LINENO" "SIZE_MAX" "ac_cv_have_decl_SIZE_MAX" " #include @@ -21045,7 +21076,6 @@ #define HAVE_DECL_SIZE_MAX $ac_have_decl _ACEOF -CFLAGS="$_CFLAGS" if test "$ac_cv_have_decl_LLONG_MAX" != "yes"; then ac_fn_c_check_decl "$LINENO" "QUAD_MAX" "ac_cv_have_decl_QUAD_MAX" " #include @@ -21131,23 +21161,6 @@ _ACEOF fi -if test "$ac_cv_have_decl_HOST_NAME_MAX" != "yes"; then - ac_fn_c_check_decl "$LINENO" "_POSIX_HOST_NAME_MAX" "ac_cv_have_decl__POSIX_HOST_NAME_MAX" " -#include -#include - -" -if test "x$ac_cv_have_decl__POSIX_HOST_NAME_MAX" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL__POSIX_HOST_NAME_MAX $ac_have_decl -_ACEOF - -fi for ac_func in strsignal do : @@ -21172,39 +21185,19 @@ done HAVE_SIGLIST="false" - ac_fn_c_check_decl "$LINENO" "sys_siglist" "ac_cv_have_decl_sys_siglist" " -$ac_includes_default -#include - -" -if test "x$ac_cv_have_decl_sys_siglist" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_SYS_SIGLIST $ac_have_decl -_ACEOF -if test $ac_have_decl = 1; then : - - HAVE_SIGLIST="true" - break - -fi -ac_fn_c_check_decl "$LINENO" "_sys_siglist" "ac_cv_have_decl__sys_siglist" " + ac_fn_c_check_decl "$LINENO" "sys_siglist" "ac_cv_have_decl_sys_siglist" " $ac_includes_default #include " -if test "x$ac_cv_have_decl__sys_siglist" = xyes; then : +if test "x$ac_cv_have_decl_sys_siglist" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF -#define HAVE_DECL__SYS_SIGLIST $ac_have_decl +#define HAVE_DECL_SYS_SIGLIST $ac_have_decl _ACEOF if test $ac_have_decl = 1; then : @@ -21212,19 +21205,19 @@ break fi -ac_fn_c_check_decl "$LINENO" "__sys_siglist" "ac_cv_have_decl___sys_siglist" " +ac_fn_c_check_decl "$LINENO" "_sys_siglist" "ac_cv_have_decl__sys_siglist" " $ac_includes_default #include " -if test "x$ac_cv_have_decl___sys_siglist" = xyes; then : +if test "x$ac_cv_have_decl__sys_siglist" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF -#define HAVE_DECL___SYS_SIGLIST $ac_have_decl +#define HAVE_DECL__SYS_SIGLIST $ac_have_decl _ACEOF if test $ac_have_decl = 1; then : @@ -21254,6 +21247,20 @@ #define HAVE_SIG2STR 1 _ACEOF + ac_fn_c_check_decl "$LINENO" "SIG2STR_MAX" "ac_cv_have_decl_SIG2STR_MAX" " +# include + +" +if test "x$ac_cv_have_decl_SIG2STR_MAX" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_SIG2STR_MAX $ac_have_decl +_ACEOF + else case " $LIBOBJS " in @@ -21309,26 +21316,6 @@ break fi -ac_fn_c_check_decl "$LINENO" "__sys_signame" "ac_cv_have_decl___sys_signame" " -$ac_includes_default -#include - -" -if test "x$ac_cv_have_decl___sys_signame" = xyes; then : - ac_have_decl=1 -else - ac_have_decl=0 -fi - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL___SYS_SIGNAME $ac_have_decl -_ACEOF -if test $ac_have_decl = 1; then : - - HAVE_SIGNAME="true" - break - -fi ac_fn_c_check_decl "$LINENO" "sys_sigabbrev" "ac_cv_have_decl_sys_sigabbrev" " $ac_includes_default #include @@ -21579,7 +21566,18 @@ fi if test ${with_aixauth-'no'} != "no"; then - if test X"$with_aixauth" != X"maybe" -o X"$AUTH_EXCL" = X""; then + for ac_func in authenticate +do : + ac_fn_c_check_func "$LINENO" "authenticate" "ac_cv_func_authenticate" +if test "x$ac_cv_func_authenticate" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_AUTHENTICATE 1 +_ACEOF + with_aixauth=yes +fi +done + + if test "${with_aixauth}" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: using AIX general authentication" >&5 $as_echo "$as_me: using AIX general authentication" >&6;} $as_echo "#define HAVE_AIXAUTH 1" >>confdefs.h @@ -23181,7 +23179,6 @@ SUDOERS_LDFLAGS="${SUDOERS_LDFLAGS} --tag=disable-shared -static" LT_STATIC="" else - SUDO_OBJS="$SUDO_OBJS locale_stub.o" LT_STATIC="--tag=disable-static" fi ;; @@ -23196,7 +23193,6 @@ SUDOERS_LDFLAGS="${SUDOERS_LDFLAGS} --tag=disable-shared -static" LT_STATIC="" else - SUDO_OBJS="$SUDO_OBJS locale_stub.o" LT_STATIC="--tag=disable-static" fi ;; @@ -23275,7 +23271,8 @@ SUDO_LIBS="${SUDO_LIBS} -lpthread" fi - OSDEFS="${OSDEFS} -D_REENTRANT" + $as_echo "#define _REENTRANT 1" >>confdefs.h + ;; esac @@ -23730,6 +23727,123 @@ fi fi +if test "$enable_asan" = "yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fsanitize=address,undefined" >&5 +$as_echo_n "checking whether C compiler accepts -fsanitize=address,undefined... " >&6; } +if ${ax_cv_check_cflags___fsanitize_address_undefined+:} false; then : + $as_echo_n "(cached) " >&6 +else + + ax_check_save_flags=$CFLAGS + CFLAGS="$CFLAGS -fsanitize=address,undefined" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ax_cv_check_cflags___fsanitize_address_undefined=yes +else + ax_cv_check_cflags___fsanitize_address_undefined=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS=$ax_check_save_flags +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fsanitize_address_undefined" >&5 +$as_echo "$ax_cv_check_cflags___fsanitize_address_undefined" >&6; } +if test x"$ax_cv_check_cflags___fsanitize_address_undefined" = xyes; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the linker accepts -fsanitize=address,undefined" >&5 +$as_echo_n "checking whether the linker accepts -fsanitize=address,undefined... " >&6; } +if ${ax_cv_check_ldflags___fsanitize_address_undefined+:} false; then : + $as_echo_n "(cached) " >&6 +else + + ax_check_save_flags=$LDFLAGS + LDFLAGS="$LDFLAGS -fsanitize=address,undefined" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ax_cv_check_ldflags___fsanitize_address_undefined=yes +else + ax_cv_check_ldflags___fsanitize_address_undefined=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$ax_check_save_flags +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_ldflags___fsanitize_address_undefined" >&5 +$as_echo "$ax_cv_check_ldflags___fsanitize_address_undefined" >&6; } +if test x"$ax_cv_check_ldflags___fsanitize_address_undefined" = xyes; then : + + LDFLAGS="$LDFLAGS -fsanitize=address,undefined" + CFLAGS="$CFLAGS -fsanitize=address,undefined" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fno-omit-frame-pointer" >&5 +$as_echo_n "checking whether C compiler accepts -fno-omit-frame-pointer... " >&6; } +if ${ax_cv_check_cflags___fno_omit_frame_pointer+:} false; then : + $as_echo_n "(cached) " >&6 +else + + ax_check_save_flags=$CFLAGS + CFLAGS="$CFLAGS -fno-omit-frame-pointer" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ax_cv_check_cflags___fno_omit_frame_pointer=yes +else + ax_cv_check_cflags___fno_omit_frame_pointer=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS=$ax_check_save_flags +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fno_omit_frame_pointer" >&5 +$as_echo "$ax_cv_check_cflags___fno_omit_frame_pointer" >&6; } +if test x"$ax_cv_check_cflags___fno_omit_frame_pointer" = xyes; then : + + CFLAGS="$CFLAGS -fno-omit-frame-pointer" + +else + : +fi + + $as_echo "#define NO_LEAKS 1" >>confdefs.h + + +else + : +fi + + +else + : +fi + +fi + if test -n "$GCC"; then if test -z "$enable_pie"; then case "$host_os" in @@ -23981,236 +24095,107 @@ fi if test "$enable_hardening" != "no"; then - if test -n "$GCC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fstack-protector-strong" >&5 -$as_echo_n "checking whether C compiler accepts -fstack-protector-strong... " >&6; } -if ${ax_cv_check_cflags___fstack_protector_strong+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for compiler stack protector support" >&5 +$as_echo_n "checking for compiler stack protector support... " >&6; } +if ${sudo_cv_var_stack_protector+:} false; then : $as_echo_n "(cached) " >&6 else - ax_check_save_flags=$CFLAGS - CFLAGS="$CFLAGS -fstack-protector-strong" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + # Avoid CFLAGS since the compiler might optimize away our test. + # We don't want CPPFLAGS or LIBS to interfere with the test but + # keep LDFLAGS as it may have an rpath needed to find the ssp lib. + _CPPFLAGS="$CPPFLAGS" + _CFLAGS="$CFLAGS" + _LDFLAGS="$LDFLAGS" + _LIBS="$LIBS" + CPPFLAGS= + LIBS= + + sudo_cv_var_stack_protector="-fstack-protector-strong" + CFLAGS="$sudo_cv_var_stack_protector" + LDFLAGS="$_LDFLAGS $sudo_cv_var_stack_protector" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ + $ac_includes_default int main () { - +char buf[1024]; buf[1023] = '\0'; ; return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv_check_cflags___fstack_protector_strong=yes -else - ax_cv_check_cflags___fstack_protector_strong=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_check_save_flags -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fstack_protector_strong" >&5 -$as_echo "$ax_cv_check_cflags___fstack_protector_strong" >&6; } -if test x"$ax_cv_check_cflags___fstack_protector_strong" = xyes; then : - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the linker accepts -fstack-protector-strong" >&5 -$as_echo_n "checking whether the linker accepts -fstack-protector-strong... " >&6; } -if ${ax_cv_check_ldflags___fstack_protector_strong+:} false; then : - $as_echo_n "(cached) " >&6 -else - - ax_check_save_flags=$LDFLAGS - LDFLAGS="$LDFLAGS -fstack-protector-strong" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - ; - return 0; -} _ACEOF if ac_fn_c_try_link "$LINENO"; then : - ax_cv_check_ldflags___fstack_protector_strong=yes -else - ax_cv_check_ldflags___fstack_protector_strong=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$ax_check_save_flags -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_ldflags___fstack_protector_strong" >&5 -$as_echo "$ax_cv_check_ldflags___fstack_protector_strong" >&6; } -if test x"$ax_cv_check_ldflags___fstack_protector_strong" = xyes; then : - - SSP_CFLAGS="-fstack-protector-strong" - SSP_LDFLAGS="-Wc,-fstack-protector-strong" - -else - : -fi - - -else - : -fi - if test -z "$SSP_CFLAGS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fstack-protector-all" >&5 -$as_echo_n "checking whether C compiler accepts -fstack-protector-all... " >&6; } -if ${ax_cv_check_cflags___fstack_protector_all+:} false; then : - $as_echo_n "(cached) " >&6 else - ax_check_save_flags=$CFLAGS - CFLAGS="$CFLAGS -fstack-protector-all" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + sudo_cv_var_stack_protector="-fstack-protector-all" + CFLAGS="$sudo_cv_var_stack_protector" + LDFLAGS="$_LDFLAGS $sudo_cv_var_stack_protector" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ + $ac_includes_default int main () { - +char buf[1024]; buf[1023] = '\0'; ; return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv_check_cflags___fstack_protector_all=yes -else - ax_cv_check_cflags___fstack_protector_all=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_check_save_flags -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fstack_protector_all" >&5 -$as_echo "$ax_cv_check_cflags___fstack_protector_all" >&6; } -if test x"$ax_cv_check_cflags___fstack_protector_all" = xyes; then : - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the linker accepts -fstack-protector-all" >&5 -$as_echo_n "checking whether the linker accepts -fstack-protector-all... " >&6; } -if ${ax_cv_check_ldflags___fstack_protector_all+:} false; then : - $as_echo_n "(cached) " >&6 -else - - ax_check_save_flags=$LDFLAGS - LDFLAGS="$LDFLAGS -fstack-protector-all" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - ; - return 0; -} _ACEOF if ac_fn_c_try_link "$LINENO"; then : - ax_cv_check_ldflags___fstack_protector_all=yes -else - ax_cv_check_ldflags___fstack_protector_all=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$ax_check_save_flags -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_ldflags___fstack_protector_all" >&5 -$as_echo "$ax_cv_check_ldflags___fstack_protector_all" >&6; } -if test x"$ax_cv_check_ldflags___fstack_protector_all" = xyes; then : - - SSP_CFLAGS="-fstack-protector-all" - SSP_LDFLAGS="-Wc,-fstack-protector-all" - -else - : -fi - - -else - : -fi - if test -z "$SSP_CFLAGS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts -fstack-protector" >&5 -$as_echo_n "checking whether C compiler accepts -fstack-protector... " >&6; } -if ${ax_cv_check_cflags___fstack_protector+:} false; then : - $as_echo_n "(cached) " >&6 else - ax_check_save_flags=$CFLAGS - CFLAGS="$CFLAGS -fstack-protector" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + sudo_cv_var_stack_protector="-fstack-protector" + CFLAGS="$sudo_cv_var_stack_protector" + LDFLAGS="$_LDFLAGS $sudo_cv_var_stack_protector" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ + $ac_includes_default int main () { - +char buf[1024]; buf[1023] = '\0'; ; return 0; } -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ax_cv_check_cflags___fstack_protector=yes -else - ax_cv_check_cflags___fstack_protector=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_check_save_flags -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags___fstack_protector" >&5 -$as_echo "$ax_cv_check_cflags___fstack_protector" >&6; } -if test x"$ax_cv_check_cflags___fstack_protector" = xyes; then : - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the linker accepts -fstack-protector" >&5 -$as_echo_n "checking whether the linker accepts -fstack-protector... " >&6; } -if ${ax_cv_check_ldflags___fstack_protector+:} false; then : - $as_echo_n "(cached) " >&6 -else - - ax_check_save_flags=$LDFLAGS - LDFLAGS="$LDFLAGS -fstack-protector" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - ; - return 0; -} _ACEOF if ac_fn_c_try_link "$LINENO"; then : - ax_cv_check_ldflags___fstack_protector=yes + else - ax_cv_check_ldflags___fstack_protector=no + + sudo_cv_var_stack_protector=no + fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$ax_check_save_flags -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_ldflags___fstack_protector" >&5 -$as_echo "$ax_cv_check_ldflags___fstack_protector" >&6; } -if test x"$ax_cv_check_ldflags___fstack_protector" = xyes; then : - SSP_CFLAGS="-fstack-protector" - SSP_LDFLAGS="-Wc,-fstack-protector" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext -else - : fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + CPPFLAGS="$_CPPFLAGS" + CFLAGS="$_CFLAGS" + LDFLAGS="$_LDFLAGS" + LIBS="$_LIBS" -else - : fi - - fi - fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $sudo_cv_var_stack_protector" >&5 +$as_echo "$sudo_cv_var_stack_protector" >&6; } + if test X"$sudo_cv_var_stack_protector" != X"no"; then + SSP_CFLAGS="$sudo_cv_var_stack_protector" + SSP_LDFLAGS="-Wc,$sudo_cv_var_stack_protector" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the linker accepts -Wl,-z,relro" >&5 $as_echo_n "checking whether the linker accepts -Wl,-z,relro... " >&6; } @@ -24378,9 +24363,16 @@ test "$docdir" = '${datarootdir}/doc/${PACKAGE_TARNAME}' && docdir='$(datarootdir)/doc/$(PACKAGE_TARNAME)' test "$localedir" = '${datarootdir}/locale' && localedir='$(datarootdir)/locale' test "$localstatedir" = '${prefix}/var' && localstatedir='$(prefix)/var' -test "$sysconfdir" = '${prefix}/etc' -a X"$with_stow" != X"yes" && sysconfdir='/etc' +test "$sysconfdir" = '${prefix}/etc' && sysconfdir='/etc' + +if test X"$INIT_SCRIPT" != X""; then + ac_config_files="$ac_config_files init.d/$INIT_SCRIPT" + +elif test X"$TMPFILES_D" != X""; then + ac_config_files="$ac_config_files init.d/sudo.conf" -ac_config_files="$ac_config_files Makefile doc/Makefile examples/Makefile include/Makefile init.d/aix.sh init.d/hpux.sh lib/util/Makefile lib/util/util.exp src/sudo_usage.h src/Makefile plugins/sample/Makefile plugins/group_file/Makefile plugins/system_group/Makefile plugins/sudoers/Makefile plugins/sudoers/sudoers" +fi +ac_config_files="$ac_config_files Makefile doc/Makefile examples/Makefile include/Makefile lib/util/Makefile lib/util/util.exp src/sudo_usage.h src/Makefile plugins/sample/Makefile plugins/group_file/Makefile plugins/system_group/Makefile plugins/sudoers/Makefile plugins/sudoers/sudoers" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -24888,7 +24880,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by sudo $as_me 1.8.12, which was +This file was extended by sudo $as_me 1.8.16, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -24948,13 +24940,13 @@ Configuration commands: $config_commands -Report bugs to ." +Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -sudo config.status 1.8.12 +sudo config.status 1.8.16 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -25370,12 +25362,12 @@ "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "lib/zlib/zconf.h") CONFIG_HEADERS="$CONFIG_HEADERS lib/zlib/zconf.h" ;; "lib/zlib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/zlib/Makefile" ;; + "init.d/$INIT_SCRIPT") CONFIG_FILES="$CONFIG_FILES init.d/$INIT_SCRIPT" ;; + "init.d/sudo.conf") CONFIG_FILES="$CONFIG_FILES init.d/sudo.conf" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; - "init.d/aix.sh") CONFIG_FILES="$CONFIG_FILES init.d/aix.sh" ;; - "init.d/hpux.sh") CONFIG_FILES="$CONFIG_FILES init.d/hpux.sh" ;; "lib/util/Makefile") CONFIG_FILES="$CONFIG_FILES lib/util/Makefile" ;; "lib/util/util.exp") CONFIG_FILES="$CONFIG_FILES lib/util/util.exp" ;; "src/sudo_usage.h") CONFIG_FILES="$CONFIG_FILES src/sudo_usage.h" ;; @@ -26491,6 +26483,9 @@ + + + diff -Nru sudo-1.8.12/configure.ac sudo-1.8.16/configure.ac --- sudo-1.8.12/configure.ac 2015-02-08 14:05:54.000000000 +0000 +++ sudo-1.8.16/configure.ac 2016-03-17 16:13:11.000000000 +0000 @@ -1,10 +1,10 @@ dnl dnl Use the top-level autogen.sh script to generate configure and config.h.in dnl -dnl Copyright (c) 1994-1996,1998-2015 Todd C. Miller +dnl Copyright (c) 1994-1996,1998-2016 Todd C. Miller dnl AC_PREREQ([2.59]) -AC_INIT([sudo], [1.8.12], [http://www.sudo.ws/bugs/], [sudo]) +AC_INIT([sudo], [1.8.16], [https://bugzilla.sudo.ws/], [sudo]) AC_CONFIG_HEADER([config.h pathnames.h]) AC_CONFIG_SRCDIR([src/sudo.c]) dnl @@ -20,6 +20,7 @@ AC_SUBST([PROGS]) AC_SUBST([CPPFLAGS]) AC_SUBST([LDFLAGS]) +AC_SUBST([SUDO_LDFLAGS]) AC_SUBST([SUDOERS_LDFLAGS]) AC_SUBST([LIBUTIL_LDFLAGS]) AC_SUBST([ZLIB_LDFLAGS]) @@ -39,7 +40,6 @@ AC_SUBST([AFS_LIBS]) AC_SUBST([REPLAY_LIBS]) AC_SUBST([GETGROUPS_LIB]) -AC_SUBST([OSDEFS]) AC_SUBST([AUTH_OBJS]) AC_SUBST([MANTYPE]) AC_SUBST([MANDIRTYPE]) @@ -74,6 +74,7 @@ AC_SUBST([LIBTOOL_DEPS]) AC_SUBST([CONFIGURE_ARGS]) AC_SUBST([LIBDL]) +AC_SUBST([LIBRT]) AC_SUBST([LIBINTL]) AC_SUBST([LIBMD]) AC_SUBST([SUDO_NLS]) @@ -89,6 +90,8 @@ AC_SUBST([INIT_DIR]) AC_SUBST([RC_LINK]) AC_SUBST([COMPAT_EXP]) +AC_SUBST([TMPFILES_D]) +AC_SUBST([exampledir]) dnl dnl Variables that get substituted in docs (not overridden by environment) dnl @@ -184,6 +187,7 @@ dnl May be overridden by environment variables.. dnl INSTALL_NOEXEC= +exampledir='$(docdir)/examples' devdir='$(srcdir)' PROGS="sudo" : ${MANDIRTYPE='man'} @@ -219,9 +223,11 @@ dnl dnl Other vaiables dnl +WEAK_ALIAS=no CHECKSHADOW=true shadow_funcs= shadow_libs= +TMPFILES_D= CONFIGURE_ARGS="$@" dnl @@ -237,6 +243,11 @@ dnl AC_CONFIG_LIBOBJ_DIR(lib/util) +dnl +dnl We must call AC_USE_SYSTEM_EXTENSIONS before the compiler is run. +dnl +AC_USE_SYSTEM_EXTENSIONS + # # Prior to sudo 1.8.7, sudo stored libexec files in $libexecdir. # Starting with sudo 1.8.7, $libexecdir/sudo is used so strip @@ -274,7 +285,7 @@ AC_ARG_WITH(devel, [AS_HELP_STRING([--with-devel], [add development options])], [case $with_devel in yes) AC_MSG_NOTICE([Setting up for development: -Wall, flex, yacc]) - OSDEFS="${OSDEFS} -DSUDO_DEVEL" + SUDO_APPEND_CPPFLAGS(-DSUDO_DEVEL) DEVEL="true" devdir=. ;; @@ -292,7 +303,7 @@ AC_ARG_WITH(rpath, [AS_HELP_STRING([--with-rpath], [deprecated, use --disable-rpath])], [AC_MSG_WARN([--with-rpath deprecated, rpath is now the default])]) -AC_ARG_WITH(blibpath, [AS_HELP_STRING([--with-blibpath[=PATH]], [deprecated])], +AC_ARG_WITH(blibpath, [AS_HELP_STRING([--with-blibpath[[=PATH]]], [deprecated])], [AC_MSG_WARN([--with-blibpath deprecated, use --with-libpath])]) dnl @@ -434,7 +445,7 @@ ;; esac]) -AC_ARG_WITH(skey, [AS_HELP_STRING([--with-skey[=DIR]], [enable S/Key support ])], +AC_ARG_WITH(skey, [AS_HELP_STRING([--with-skey[[=DIR]]], [enable S/Key support ])], [case $with_skey in no) ;; *) AC_DEFINE(HAVE_SKEY) @@ -444,7 +455,7 @@ ;; esac]) -AC_ARG_WITH(opie, [AS_HELP_STRING([--with-opie[=DIR]], [enable OPIE support ])], +AC_ARG_WITH(opie, [AS_HELP_STRING([--with-opie[[=DIR]]], [enable OPIE support ])], [case $with_opie in no) ;; *) AC_DEFINE(HAVE_OPIE) @@ -815,9 +826,9 @@ AC_ARG_WITH(vardir, [AS_HELP_STRING([--with-vardir=DIR], [path to the sudo var dir])], [case $with_vardir in - yes) AC_MSG_ERROR(["must give --with-vardirdir an argument."]) + yes) AC_MSG_ERROR(["must give --with-vardir an argument."]) ;; - no) AC_MSG_ERROR(["--without-vardirdir not supported."]) + no) AC_MSG_ERROR(["--without-vardir not supported."]) ;; esac]) @@ -1171,12 +1182,6 @@ ;; esac], AC_MSG_RESULT(yes)) -AC_ARG_WITH(stow, [AS_HELP_STRING([--with-stow], [deprecated])], -[case $with_stow in - *) AC_MSG_NOTICE([--with-stow option deprecated, now is defalt behavior]) - ;; -esac]) - AC_MSG_CHECKING(whether to use an askpass helper) AC_ARG_WITH(askpass, [AS_HELP_STRING([--with-askpass=PATH], [Fully qualified pathname of askpass helper])], [case $with_askpass in @@ -1194,6 +1199,15 @@ SUDO_DEFINE_UNQUOTED(_PATH_SUDO_ASKPASS, NULL) fi +AC_ARG_WITH(exampledir, [AS_HELP_STRING([--with-exampledir=DIR], [path to install sudo examples in])], +[case $with_exampledir in + yes) AC_MSG_ERROR(["must give --with-exampledir an argument."]) + ;; + no) AC_MSG_ERROR(["--without-exampledir not supported."]) + ;; + *) exampledir="$with_exampledir" +esac]) + AC_ARG_WITH(plugindir, [AS_HELP_STRING([--with-plugindir=DIR], [set directory to load plugins from])], [case $with_plugindir in no) AC_MSG_ERROR(["illegal argument: --without-plugindir."]) @@ -1431,6 +1445,9 @@ AC_ARG_ENABLE(pie, [AS_HELP_STRING([--enable-pie], [Build sudo as a position independent executable.])]) +AC_ARG_ENABLE(asan, +[AS_HELP_STRING([--enable-asan], [Build sudo with address sanitizer support.])]) + AC_ARG_ENABLE(poll, [AS_HELP_STRING([--disable-poll], [Use select() instead of poll().])]) @@ -1461,6 +1478,18 @@ [AS_HELP_STRING([--disable-shared-libutil], [Disable use of the libsudo_util shared library.])], [], [enable_shared_libutil=yes]) +AC_ARG_ENABLE(tmpfiles.d, +[AS_HELP_STRING([--enable-tmpfiles.d=DIR], [Set the path to the systemd tmpfiles.d directory.])], +[case $enableval in + yes) TMPFILES_D=/usr/lib/tmpfiles.d + ;; + no) TMPFILES_D= + ;; + *) TMPFILES_D="$enableval" +esac], [ + test -f /usr/lib/tmpfiles.d/systemd.conf && TMPFILES_D=/usr/lib/tmpfiles.d +]) + AC_ARG_WITH(selinux, [AS_HELP_STRING([--with-selinux], [enable SELinux support])], [case $with_selinux in yes) SELINUX_USAGE="[[-r role]] [[-t type]] " @@ -1562,7 +1591,7 @@ SHLIB_ENABLE="$enable_dlopen" AC_MSG_CHECKING(path to sudo_noexec.so) -AC_ARG_WITH(noexec, [AS_HELP_STRING([--with-noexec[=PATH]], [fully qualified pathname of sudo_noexec.so])], +AC_ARG_WITH(noexec, [AS_HELP_STRING([--with-noexec[[=PATH]]], [fully qualified pathname of sudo_noexec.so])], [case $with_noexec in yes) with_noexec="$libexecdir/sudo/sudo_noexec.so" ;; @@ -1650,12 +1679,14 @@ # system headers lack prototypes but gcc helps... if test -n "$GCC"; then - OSDEFS="${OSDEFS} -D__USE_FIXED_PROTOTYPES__" + AC_DEFINE([__USE_FIXED_PROTOTYPES__]) fi shadow_funcs="getpwanam issecure" ;; *-*-solaris2*) + AC_DEFINE([PAM_SUN_CODEBASE]) + # LD_PRELOAD is space-delimited RTLD_PRELOAD_DELIM=" " @@ -1663,8 +1694,6 @@ OS_INIT=os_init_solaris SUDO_OBJS="${SUDO_OBJS} solaris.o" - # To get the crypt(3) prototype (so we pass -Wall) - OSDEFS="${OSDEFS} -D__EXTENSIONS__" # AFS support needs -lucb if test "$with_AFS" = "yes"; then AFS_LIBS="-lc -lucb" @@ -1675,19 +1704,17 @@ AC_CHECK_FUNCS([priv_set], [PSMAN=1]) ;; *-*-aix*) + AC_DEFINE([PAM_SUN_CODEBASE]) + # To get all prototypes (so we pass -Wall) - OSDEFS="${OSDEFS} -D_ALL_SOURCE -D_LINUX_SOURCE_COMPAT" + AC_DEFINE([_LINUX_SOURCE_COMPAT]) SUDOERS_LDFLAGS="${SUDOERS_LDFLAGS} -Wl,-bI:\$(srcdir)/aixcrypt.exp" - # On AIX 6 and higher default to PAM, else default to LAM - if test $OSMAJOR -ge 6; then - if test X"$with_pam" = X""; then - AUTH_EXCL_DEF="PAM" - fi - else - if test X"$with_aixauth" = X""; then - AC_CHECK_FUNCS([authenticate], [AUTH_EXCL_DEF="AIX_AUTH"]) - fi + # For AIX we build in support for both LAM and PAM + # and choose which to use based on auth_type in + # /etc/security/login.cfg + if test X"${with_pam}${with_aixauth}" = X""; then + AUTH_EXCL_DEF="AIX_AUTH PAM" fi # AIX analog of nsswitch.conf, enabled by default @@ -1715,9 +1742,12 @@ RC_LINK=/etc/rc.d/rc2.d/S90sudo # AIX-specific functions - AC_CHECK_FUNCS([getuserattr setauthdb setrlimit64]) + AC_CHECK_FUNCS([getuserattr setrlimit64]) + AC_CHECK_FUNCS([setauthdb], + [AC_CHECK_TYPES([authdb_t], [], [], [#include ])]) + COMMON_OBJS="${COMMON_OBJS} aix.lo" - SUDO_APPEND_COMPAT_EXP(aix_prep_user_v1 aix_restoreauthdb_v1 aix_setauthdb_v1) + SUDO_APPEND_COMPAT_EXP(aix_prep_user_v1 aix_restoreauthdb_v1 aix_setauthdb_v1 aix_setauthdb_v2 aix_getauthregistry_v1) # These prototypes may be missing AC_CHECK_DECLS([usrinfo], [], [], [ @@ -1730,6 +1760,8 @@ ]) ;; *-*-hiuxmpp*) + AC_DEFINE([PAM_SUN_CODEBASE]) + : ${mansectsu='1m'} : ${mansectform='4'} @@ -1745,6 +1777,8 @@ AC_CHECK_FUNCS([pstat_getproc]) ;; *-*-hpux*) + AC_DEFINE([PAM_SUN_CODEBASE]) + # AFS support needs -lBSD if test "$with_AFS" = "yes"; then AFS_LIBS="-lc -lBSD" @@ -1802,12 +1836,7 @@ esac case "$host_os" in - hpux[[1-8]].*) - AC_DEFINE(BROKEN_SYSLOG) - ;; hpux9.*) - AC_DEFINE(BROKEN_SYSLOG) - shadow_funcs="getspwuid" # DCE support (requires ANSI C compiler) @@ -1815,7 +1844,7 @@ # order of libs in 9.X is important. -lc_r must be last SUDOERS_LIBS="${SUDOERS_LIBS} -ldce -lM -lc_r" LIBS="${LIBS} -ldce -lM -lc_r" - SUDO_APPEND_CPPFLAGS(-D_REENTRANT) + AC_DEFINE(_REENTRANT) SUDO_APPEND_CPPFLAGS(-I/usr/include/reentrant) fi ;; @@ -1886,7 +1915,7 @@ : ${mansectform='4'} ;; *-*-irix*) - OSDEFS="${OSDEFS} -D_BSD_TYPES" + AC_DEFINE([_BSD_TYPES]) if test -z "$NROFFPROG"; then if test "$prefix" = "/usr/local" -a "$mandir" = '${datarootdir}/man'; then if test -d /usr/share/catman/local; then @@ -1918,15 +1947,12 @@ : ${mansectform='4'} ;; *-*-linux*|*-*-k*bsd*-gnu) - OSDEFS="${OSDEFS} -D_GNU_SOURCE" shadow_funcs="getspnam" test -z "$with_pam" && AUTH_EXCL_DEF="PAM" ;; *-*-gnu*) - OSDEFS="${OSDEFS} -D_GNU_SOURCE" - # lockf() is broken on the Hurd -- use flock instead + # lockf() is broken on the Hurd ac_cv_func_lockf=no - ac_cv_func_flock=yes ;; *-*-ultrix*) OS="ultrix" @@ -1937,12 +1963,12 @@ LIBS="${LIBS} -lsun -lbsd" SUDO_APPEND_CPPFLAGS(-I/usr/include) SUDO_APPEND_CPPFLAGS(-I/usr/include/bsd) - OSDEFS="${OSDEFS} -D_MIPS" + SUDO_APPEND_CPPFLAGS(-D_MIPS) : ${mansectsu='1m'} : ${mansectform='4'} ;; *-*-isc*) - OSDEFS="${OSDEFS} -D_ISC" + SUDO_APPEND_CPPFLAGS(-D_ISC) LIB_CRYPT=1 SUDOERS_LIBS="${SUDOERS_LIBS} -lcrypt" @@ -1988,6 +2014,8 @@ fi ;; *-*-freebsd*) + AC_DEFINE([_BSD_SOURCE]) + # FreeBSD has a real setreuid(2) starting with 2.1 and # backported to 2.0.5. We just take 2.1 and above... case "$OSREV" in @@ -1995,15 +2023,21 @@ SKIP_SETREUID=yes ;; esac - OSDEFS="${OSDEFS} -D_BSD_SOURCE" if test "${with_skey-'no'}" = "yes"; then SUDOERS_LIBS="${SUDOERS_LIBS} -lmd" fi CHECKSHADOW="false" test -z "$with_pam" && AUTH_EXCL_DEF="PAM" : ${with_logincap='maybe'} + + # Examples go in share/examples/sudo + if test X"$with_exampledir" = X""; then + exampledir='$(datarootdir)/examples/$(PACKAGE_TARNAME)' + fi ;; *-*-*openbsd*) + AC_DEFINE([_BSD_SOURCE]) + # OpenBSD-specific initialization OS_INIT=os_init_openbsd SUDO_OBJS="${SUDO_OBJS} openbsd.o" @@ -2011,7 +2045,6 @@ # OpenBSD has a real setreuid(2) starting with 3.3 but # we will use setresuid(2) instead. SKIP_SETREUID=yes - OSDEFS="${OSDEFS} -D_BSD_SOURCE" CHECKSHADOW="false" # OpenBSD >= 3.0 supports BSD auth if test -z "$with_bsdauth"; then @@ -2020,6 +2053,11 @@ fi fi : ${with_logincap='maybe'} + + # Examples go in share/examples/sudo + if test X"$with_exampledir" = X""; then + exampledir='$(datarootdir)/examples/$(PACKAGE_TARNAME)' + fi ;; *-*-*netbsd*) # NetBSD has a real setreuid(2) starting with 1.3.2 @@ -2031,18 +2069,33 @@ CHECKSHADOW="false" test -z "$with_pam" && AUTH_EXCL_DEF="PAM" : ${with_logincap='maybe'} + + # Examples go in share/examples/sudo + if test X"$with_exampledir" = X""; then + exampledir='$(datarootdir)/examples/$(PACKAGE_TARNAME)' + fi ;; *-*-dragonfly*) - OSDEFS="${OSDEFS} -D_BSD_SOURCE" + AC_DEFINE([_BSD_SOURCE]) + if test "${with_skey-'no'}" = "yes"; then SUDOERS_LIBS="${SUDOERS_LIBS} -lmd" fi CHECKSHADOW="false" test -z "$with_pam" && AUTH_EXCL_DEF="PAM" : ${with_logincap='yes'} + + # Examples go in share/examples/sudo + if test X"$with_exampledir" = X""; then + exampledir='$(datarootdir)/examples/$(PACKAGE_TARNAME)' + fi ;; *-*-*bsd*) CHECKSHADOW="false" + # Examples go in share/examples/sudo + if test X"$with_exampledir" = X""; then + exampledir='$(datarootdir)/examples/$(PACKAGE_TARNAME)' + fi ;; *-*-darwin*) # Darwin has a real setreuid(2) starting with 9.0 @@ -2062,11 +2115,19 @@ RTLD_PRELOAD_ENABLE_VAR="DYLD_FORCE_FLAT_NAMESPACE" fi RTLD_PRELOAD_VAR="DYLD_INSERT_LIBRARIES" + + # We need to force a flat namespace to make libc + # symbol hooking work like it does on ELF. + AX_CHECK_LINK_FLAG([-Wl,-force_flat_namespace], [SUDO_LDFLAGS="${SUDO_LDFLAGS}${SUDO_LDFLAGS+ }-Wl,-force_flat_namespace"]) + + # Examples go in share/examples/sudo + if test X"$with_exampledir" = X""; then + exampledir='$(datarootdir)/examples/$(PACKAGE_TARNAME)' + fi ;; *-*-nextstep*) - # lockf() is broken on the NeXT -- use flock instead + # lockf() is broken on the NeXT ac_cv_func_lockf=no - ac_cv_func_flock=yes RTLD_PRELOAD_VAR="DYLD_INSERT_LIBRARIES" RTLD_PRELOAD_ENABLE_VAR="DYLD_FORCE_FLAT_NAMESPACE" ;; @@ -2078,9 +2139,6 @@ : ${mansectsu='1m'} : ${mansectform='4'} ;; - *-gnu*) - OSDEFS="${OSDEFS} -D_GNU_SOURCE" - ;; esac dnl @@ -2103,10 +2161,6 @@ AUTH_REG=${AUTH_REG# } AUTH_EXCL=${AUTH_EXCL# } if test -n "$AUTH_EXCL"; then - set -- $AUTH_EXCL - if test $# != 1; then - AC_MSG_ERROR([More than one mutually exclusive authentication method specified: $AUTH_EXCL]) - fi if test -n "$AUTH_REG"; then AC_MSG_ERROR([Cannot mix mutually exclusive ($AUTH_EXCL) and regular ($AUTH_REG) authentication methods]) fi @@ -2149,6 +2203,7 @@ dnl AC_PROG_CC_STDC AC_C_CONST +AC_C_INLINE AC_C_VOLATILE AC_MSG_CHECKING([for variadic macro support in cpp]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ @@ -2189,12 +2244,11 @@ dnl dnl Header file checks dnl -AC_HEADER_STDC AC_HEADER_DIRENT AC_HEADER_TIME AC_HEADER_STDBOOL AC_HEADER_MAJOR -AC_CHECK_HEADERS_ONCE([malloc.h netgroup.h paths.h spawn.h utime.h utmpx.h sys/sockio.h sys/bsdtypes.h sys/select.h sys/stropts.h sys/sysmacros.h]) +AC_CHECK_HEADERS_ONCE([netgroup.h paths.h spawn.h utmpx.h sys/sockio.h sys/bsdtypes.h sys/select.h sys/stropts.h sys/sysmacros.h]) AC_CHECK_HEADERS([endian.h] [sys/endian.h] [machine/endian.h], [break]) AC_CHECK_HEADERS([procfs.h] [sys/procfs.h], [AC_CHECK_MEMBERS(struct psinfo.pr_ttydev, [AC_CHECK_FUNCS([_ttyname_dev])], [], [AC_INCLUDES_DEFAULT #ifdef HAVE_PROCFS_H @@ -2228,8 +2282,7 @@ [sudo_cv_xopen_source_extended=error]) ])]) if test "$sudo_cv_xopen_source_extended" = "yes"; then - OSDEFS="${OSDEFS} -D_XOPEN_SOURCE_EXTENDED" - SUDO_DEFINE(_XOPEN_SOURCE_EXTENDED) + AC_DEFINE([_XOPEN_SOURCE_EXTENDED]) fi ;; esac @@ -2260,7 +2313,7 @@ dnl typedef checks dnl We need to define __STDC_WANT_LIB_EXT1__ for errno_t and rsize_t dnl -SUDO_APPEND_CPPFLAGS(-D__STDC_WANT_LIB_EXT1__=1) +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 @@ -2269,23 +2322,20 @@ #include ]) AC_CHECK_TYPES([sigaction_t], [], [], [#include #include ]) -AC_CHECK_TYPES([struct timespec], [], [], [#include -#ifdef TIME_WITH_SYS_TIME -# include -#endif -#include ]) AC_CHECK_TYPES([struct in6_addr], [], [], [#include #include ]) AC_TYPE_LONG_LONG_INT if test X"$ac_cv_type_long_long_int" != X"yes"; then AC_MSG_ERROR(["C compiler does not appear to support the long long int type"]) fi -AC_CHECK_SIZEOF([long int]) AC_CHECK_TYPE(id_t, unsigned int) AC_CHECK_TYPE(size_t, unsigned int) AC_CHECK_TYPE(ssize_t, int) AC_CHECK_TYPE(dev_t, int) AC_CHECK_TYPE(ino_t, unsigned int) +AC_CHECK_TYPE(ptrdiff_t, long) +AC_CHECK_TYPE(intmax_t, long long) +AC_CHECK_TYPE(uintmax_t, unsigned long long) AC_CHECK_TYPE(uint8_t, unsigned char) AC_CHECK_TYPE(uint32_t, unsigned int) AC_CHECK_TYPE(uint64_t, unsigned long long) @@ -2299,11 +2349,9 @@ SUDO_SOCK_SIN_LEN dnl dnl Check for utmp/utmpx struct members. -dnl We need to include OSDEFS for glibc which only has __e_termination -dnl visible when _GNU_SOURCE is *not* defined. +dnl We need to have already defined _GNU_SOURCE on glibc which only has +dnl __e_termination visible when _GNU_SOURCE is *not* defined. dnl -_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS $OSDEFS" if test $ac_cv_header_utmpx_h = "yes"; then AC_CHECK_MEMBERS([struct utmpx.ut_id, struct utmpx.ut_pid, struct utmpx.ut_tv, struct utmpx.ut_type], [], [], [ # include @@ -2339,13 +2387,24 @@ # include ]) fi -CFLAGS="$_CFLAGS" dnl dnl Function checks dnl AC_FUNC_GETGROUPS -AC_CHECK_FUNCS_ONCE([killpg nl_langinfo strftime sysconf tzset]) +AC_CHECK_FUNCS_ONCE([fexecve killpg nl_langinfo strftime pread pwrite openat faccessat]) +case "$host_os" in + hpux*) + if test X"$ac_cv_func_pread" = X"yes"; then + O_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS -D_LARGEFILE64_SOURCE" + AC_CHECK_FUNCS([pread64 pwrite64], [ + AC_DEFINE([_LARGEFILE64_SOURCE], [1], [Define to 1 to enable 64-bit versions of standard C functions on 32-bit systems.]) + ]) + CPPFLAGS="$O_CPPFLAGS" + fi + ;; +esac AC_CHECK_FUNCS([getgrouplist], [], [ case "$host_os" in aix*) @@ -2390,16 +2449,23 @@ SUDO_APPEND_COMPAT_EXP(sudo_getline) AC_CHECK_FUNCS([fgetln]) ]) +AC_CHECK_FUNCS([reallocarray], [], [ + AC_LIBOBJ(reallocarray) + SUDO_APPEND_COMPAT_EXP(sudo_reallocarray) +]) dnl dnl If libc supports _FORTIFY_SOURCE check functions, use it. dnl if test "$enable_hardening" != "no"; then + found=false O_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS -D_FORTIFY_SOURCE=2" + SUDO_APPEND_CPPFLAGS(-D_FORTIFY_SOURCE=2) AC_CHECK_FUNC([__sprintf_chk], [ - AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[char buf[4]; (void)sprintf(buf, "%s", "foo");]])], [OSDEFS="${OSDEFS} -D_FORTIFY_SOURCE=2"], []) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[char buf[4]; (void)sprintf(buf, "%s", "foo");]])], [found=true], []) ], []) - CPPFLAGS="$O_CPPFLAGS" + if test X"$found" != X"true"; then + CPPFLAGS="$O_CPPFLAGS" + fi fi utmp_style=LEGACY @@ -2468,7 +2534,7 @@ if test X"$with_interfaces" != X"no"; then AC_CHECK_FUNCS([getifaddrs], [AC_CHECK_FUNCS([freeifaddrs])]) fi -AC_CHECK_FUNCS([lockf flock], [break]) +AC_CHECK_FUNCS([lockf], [break]) AC_CHECK_FUNCS([innetgr], [ AC_CHECK_DECLS([innetgr], [], [], [ AC_INCLUDES_DEFAULT @@ -2497,12 +2563,15 @@ ], [ AC_CHECK_FUNCS([sysinfo], [AC_CHECK_HEADERS([sys/systeminfo.h])]) ]) -AC_CHECK_FUNCS([utimes], [ - AC_CHECK_FUNCS([futimes futimesat], [break]) -], [ - AC_LIBOBJ(utimes) - SUDO_APPEND_COMPAT_EXP(sudo_utimes) - AC_CHECK_FUNCS([futime], [SUDO_APPEND_COMPAT_EXP(sudo_futimes)]) +AC_CHECK_FUNCS([utimensat], [], [ + AC_LIBOBJ(utimens) + SUDO_APPEND_COMPAT_EXP(sudo_utimensat) + AC_CHECK_FUNCS([utimes]) +]) +AC_CHECK_FUNCS([futimens], [], [ + AC_LIBOBJ(utimens) + SUDO_APPEND_COMPAT_EXP(sudo_futimens) + AC_CHECK_FUNCS([futimes futimesat futime], [break]) ]) SUDO_FUNC_FNMATCH([AC_DEFINE(HAVE_FNMATCH)], [ AC_LIBOBJ(fnmatch) @@ -2534,14 +2603,25 @@ AC_LIBOBJ(strlcat) SUDO_APPEND_COMPAT_EXP(sudo_strlcat) ]) +AC_CHECK_FUNC([strnlen], [AC_FUNC_STRNLEN], [AC_LIBOBJ(strnlen)]) +if test X"$ac_cv_func_strnlen_working" = X"yes"; then + AC_DEFINE(HAVE_STRNLEN) + AC_CHECK_FUNCS([strndup], [], [ + AC_LIBOBJ(strndup) + SUDO_APPEND_COMPAT_EXP(sudo_strndup) + ]) +else + # Broken or missing strnlen, use our own. + SUDO_APPEND_COMPAT_EXP(sudo_strnlen) + # Avoid libc strndup() since it is usually implemented using strnlen() + AC_LIBOBJ(strndup) + SUDO_APPEND_COMPAT_EXP(sudo_strndup) +fi AC_CHECK_FUNCS([clock_gettime], [], [ # On Solaris, clock_gettime is in librt AC_CHECK_LIB(rt, clock_gettime, [ AC_DEFINE(HAVE_CLOCK_GETTIME) - SUDOERS_LIBS="${SUDOERS_LIBS} -lrt" - ], [ - AC_LIBOBJ(clock_gettime) - SUDO_APPEND_COMPAT_EXP(sudo_clock_gettime) + LIBRT="-lrt" ]) ]) AC_CHECK_FUNCS([getopt_long], [], [ @@ -2567,6 +2647,7 @@ AC_LIBOBJ(mktemp) # If either mkdtemp() or mkstemps() is missing, replace both. SUDO_APPEND_COMPAT_EXP(sudo_mkdtemp sudo_mkstemps) + COMPAT_TEST_PROGS="${COMPAT_TEST_PROGS}${COMPAT_TEST_PROGS+ }mktemp_test" fi AX_FUNC_SNPRINTF if test X"$ac_cv_have_working_snprintf$ac_cv_have_working_vsnprintf" = X"yesyes"; then @@ -2587,11 +2668,9 @@ AC_CHECK_FUNCS([strtonum]) AC_LIBOBJ(strtonum) SUDO_APPEND_COMPAT_EXP(sudo_strtonum) -if test X"$ac_cv_type_struct_timespec" != X"no"; then - AC_CHECK_MEMBER([struct stat.st_mtim], [AC_DEFINE(HAVE_ST_MTIM)] - [AC_CHECK_MEMBER([struct stat.st_mtim.st__tim], AC_DEFINE(HAVE_ST__TIM))], - [AC_CHECK_MEMBER([struct stat.st_mtimespec], AC_DEFINE([HAVE_ST_MTIMESPEC]))]) -fi +AC_CHECK_MEMBER([struct stat.st_mtim], [AC_DEFINE(HAVE_ST_MTIM)] + [AC_CHECK_MEMBER([struct stat.st_mtim.st__tim], AC_DEFINE(HAVE_ST__TIM))], + [AC_CHECK_MEMBER([struct stat.st_mtimespec], AC_DEFINE([HAVE_ST_MTIMESPEC]))]) FOUND_SHA2=no AC_CHECK_HEADER([sha2.h], [ FOUND_SHA2=yes @@ -2609,54 +2688,18 @@ ]) if test X"$FOUND_SHA2" = X"no"; then AC_LIBOBJ(sha2) - SUDO_APPEND_COMPAT_EXP(SHA224Final SHA224Init SHA224Pad SHA224Transform SHA224Update SHA256Final SHA256Init SHA256Pad SHA256Transform SHA256Update SHA384Final SHA384Init SHA384Pad SHA384Transform SHA384Update SHA512Final SHA512Init SHA512Pad SHA512Transform SHA512Update) + SUDO_APPEND_COMPAT_EXP(sudo_SHA224Final sudo_SHA224Init sudo_SHA224Pad sudo_SHA224Transform sudo_SHA224Update sudo_SHA256Final sudo_SHA256Init sudo_SHA256Pad sudo_SHA256Transform sudo_SHA256Update sudo_SHA384Final sudo_SHA384Init sudo_SHA384Pad sudo_SHA384Transform sudo_SHA384Update sudo_SHA512Final sudo_SHA512Init sudo_SHA512Pad sudo_SHA512Transform sudo_SHA512Update) fi dnl dnl Function checks for sudo_noexec dnl if test X"$with_noexec" != X"no"; then - # Check for underscore versions of standard exec functions - # unless we are using dyld symbole interposition - if test X"$dlyld_interpose" != X"yes"; then - AC_CHECK_FUNCS([_execl __execl]) - AC_CHECK_FUNCS([_execle __execle]) - AC_CHECK_FUNCS([_execlp __execlp]) - AC_CHECK_FUNCS([_execv __execv]) - AC_CHECK_FUNCS([_execve __execve]) - AC_CHECK_FUNCS([_execvp __execvp]) - fi - # Check for non-standard exec functions including underscore versions - AC_CHECK_FUNCS([exect], [ - if test X"$dlyld_interpose" != X"yes"; then - AC_CHECK_FUNCS([_exect __exect]) - fi - ]) - AC_CHECK_FUNCS([execvP], [ - if test X"$dlyld_interpose" != X"yes"; then - AC_CHECK_FUNCS([_execvP __execvP]) - fi - ]) - AC_CHECK_FUNCS([execvpe], [ - if test X"$dlyld_interpose" != X"yes"; then - AC_CHECK_FUNCS([_execvpe __execvpe]) - fi - ]) - AC_CHECK_FUNCS([fexecve], [ - if test X"$dlyld_interpose" != X"yes"; then - AC_CHECK_FUNCS([_fexecve __fexecve]) - fi - ]) - # Check for posix_spawn, posix_spawnp and any underscore versions - AC_CHECK_FUNCS([posix_spawn], [ - if test X"$dlyld_interpose" != X"yes"; then - AC_CHECK_FUNCS([_posix_spawn __posix_spawn]) - fi - ]) - AC_CHECK_FUNCS([posix_spawnp], [ - if test X"$dlyld_interpose" != X"yes"; then - AC_CHECK_FUNCS([_posix_spawnp __posix_spawnp]) - fi - ]) + # Check for non-standard exec functions + AC_CHECK_FUNCS([exect execvP execvpe]) + # Check for posix_spawn, and posix_spawnp + if test X"$ac_cv_header_spawn_h" = X"yes"; then + AC_CHECK_FUNCS([posix_spawn posix_spawnp]) + fi fi dnl @@ -2665,7 +2708,7 @@ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include #include <$ac_header_dirent>]], [[DIR *d; (void)dirfd(d);]])], [AC_DEFINE(HAVE_DIRFD)], [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include #include <$ac_header_dirent>]], [[DIR d; memset(&d, 0, sizeof(d)); return(d.dd_fd);]])], [AC_DEFINE(HAVE_DD_FD)], [])]) -AC_CHECK_MEMBERS([struct dirent.d_type], [], [], [ +AC_CHECK_MEMBERS([struct dirent.d_type, struct dirent.d_namlen], [], [], [ AC_INCLUDES_DEFAULT #include <$ac_header_dirent> ]) @@ -2693,16 +2736,17 @@ ]) LIBS="$OLIBS" dnl -dnl If inet_ntop(3) not in libc, check -lnsl and -linet +dnl If inet_pton(3) not in libc, check -lnsl and -linet dnl May need to link with *both* -lnsl and -lsocket due to unresolved symbols -dnl Some systems may have inet_ntop() in libresolv. +dnl Some systems may have inet_pton() in libresolv. dnl OLIBS="$LIBS" LIBS="${LIBS} ${NET_LIBS}" found=false -AC_CHECK_FUNC([inet_ntop], [ +INET_PTON_LIBS= +AC_CHECK_FUNC([inet_pton], [ found=true - AC_DEFINE(HAVE_INET_NTOP) + AC_DEFINE(HAVE_INET_PTON) ], [ for libs in "-lsocket" "-linet" "-lsocket -lnsl" "-lresolv"; do _libs= @@ -2716,31 +2760,36 @@ test -z "$libs" && continue lib="`echo \"$libs\"|sed -e 's/^-l//' -e 's/ .*$//'`" extralibs="`echo \"$libs\"|sed 's/^-l[[^ ]]*//'`" - SUDO_CHECK_LIB($lib, inet_ntop, [ + SUDO_CHECK_LIB($lib, inet_pton, [ found=true - AC_DEFINE(HAVE_INET_NTOP) + AC_DEFINE(HAVE_INET_PTON) NET_LIBS="${NET_LIBS} $libs" + INET_PTON_LIBS="$libs" + case "$libs" in + *-lresolv*) + AC_DEFINE(NEED_RESOLV_H) + ;; + esac break ], [], [$extralibs]) done ]) LIBS="$OLIBS" if test X"$found" != X"true"; then - AC_LIBOBJ(inet_ntop) - SUDO_APPEND_COMPAT_EXP(sudo_inet_ntop) + AC_LIBOBJ(inet_pton) + SUDO_APPEND_COMPAT_EXP(sudo_inet_pton) fi dnl -dnl If inet_pton(3) not in libc, check -lnsl and -linet +dnl If inet_ntop(3) not in libc, check -lnsl and -linet dnl May need to link with *both* -lnsl and -lsocket due to unresolved symbols -dnl Some systems may have inet_pton() in libresolv. +dnl Some systems may have inet_ntop() in libresolv. dnl OLIBS="$LIBS" LIBS="${LIBS} ${NET_LIBS}" found=false -INET_PTON_LIBS= -AC_CHECK_FUNC([inet_pton], [ +AC_CHECK_FUNC([inet_ntop], [ found=true - AC_DEFINE(HAVE_INET_PTON) + AC_DEFINE(HAVE_INET_NTOP) ], [ for libs in "-lsocket" "-linet" "-lsocket -lnsl" "-lresolv"; do _libs= @@ -2754,19 +2803,18 @@ test -z "$libs" && continue lib="`echo \"$libs\"|sed -e 's/^-l//' -e 's/ .*$//'`" extralibs="`echo \"$libs\"|sed 's/^-l[[^ ]]*//'`" - SUDO_CHECK_LIB($lib, inet_pton, [ + SUDO_CHECK_LIB($lib, inet_ntop, [ found=true - AC_DEFINE(HAVE_INET_PTON) + AC_DEFINE(HAVE_INET_NTOP) NET_LIBS="${NET_LIBS} $libs" - INET_PTON_LIBS="$libs" break ], [], [$extralibs]) done ]) LIBS="$OLIBS" if test X"$found" != X"true"; then - AC_LIBOBJ(inet_pton) - SUDO_APPEND_COMPAT_EXP(sudo_inet_pton) + AC_LIBOBJ(inet_ntop) + SUDO_APPEND_COMPAT_EXP(sudo_inet_ntop) fi dnl dnl If syslog(3) not in libc, check -lsocket, -lnsl and -linet @@ -2909,21 +2957,22 @@ LIBS="$OLIBS" if test "$sudo_cv_gettext" = "yes"; then - AC_DEFINE(HAVE_LIBINTL_H) SUDO_NLS=enabled # For Solaris we need links from lang to lang.UTF-8 in localedir case "$host_os" in solaris2*) LOCALEDIR_SUFFIX=".UTF-8";; esac elif test "$sudo_cv_gettext_lintl" = "yes"; then - AC_DEFINE(HAVE_LIBINTL_H) SUDO_NLS=enabled LIBINTL="-lintl" elif test "$sudo_cv_gettext_lintl_liconv" = "yes"; then - AC_DEFINE(HAVE_LIBINTL_H) SUDO_NLS=enabled LIBINTL="-lintl -liconv" fi + if test X"$SUDO_NLS" = X"enabled"; then + AC_DEFINE(HAVE_LIBINTL_H) + SUDO_APPEND_COMPAT_EXP(sudo_warn_gettext_v1) + fi fi dnl @@ -2990,11 +3039,8 @@ dnl dnl Check for incomplete limits.h and missing SIZE_MAX. -dnl We need to add OSDEFS to CFLAGS to expose LLONG_MAX et al on glibc. dnl -_CFLAGS="$CFLAGS" -CFLAGS="$CFLAGS $OSDEFS" -AC_CHECK_DECLS([OPEN_MAX, LLONG_MAX, LLONG_MIN, ULLONG_MAX, PATH_MAX, HOST_NAME_MAX], [], [], [ +AC_CHECK_DECLS([LLONG_MAX, LLONG_MIN, ULLONG_MAX, PATH_MAX], [], [], [ #include #include ]) @@ -3007,7 +3053,6 @@ # include #endif ]) -CFLAGS="$_CFLAGS" dnl dnl Try to find equivalents for missing types dnl @@ -3041,12 +3086,6 @@ #include ]]) fi -if test "$ac_cv_have_decl_HOST_NAME_MAX" != "yes"; then - AC_CHECK_DECLS([_POSIX_HOST_NAME_MAX], [], [], [[ -#include -#include - ]]) -fi dnl dnl Check for strsignal() or sys_siglist @@ -3055,7 +3094,7 @@ AC_LIBOBJ(strsignal) SUDO_APPEND_COMPAT_EXP(sudo_strsignal) HAVE_SIGLIST="false" - AC_CHECK_DECLS([sys_siglist, _sys_siglist, __sys_siglist], [ + AC_CHECK_DECLS([sys_siglist, _sys_siglist], [ HAVE_SIGLIST="true" break ], [ ], [ @@ -3070,11 +3109,14 @@ dnl dnl Check for sig2str(), sys_signame or sys_sigabbrev dnl -AC_CHECK_FUNCS([sig2str], [], [ +AC_CHECK_FUNCS([sig2str], [ + AC_CHECK_DECLS(SIG2STR_MAX, [], [], [ +# include +])], [ AC_LIBOBJ(sig2str) SUDO_APPEND_COMPAT_EXP(sudo_sig2str) HAVE_SIGNAME="false" - AC_CHECK_DECLS([sys_signame, _sys_signame, __sys_signame, sys_sigabbrev], [ + AC_CHECK_DECLS([sys_signame, _sys_signame, sys_sigabbrev], [ HAVE_SIGNAME="true" break ], [ ], [ @@ -3209,10 +3251,12 @@ dnl dnl AIX general authentication -dnl If set to "maybe" only enable if no other exclusive method in use. +dnl We may build in support for both AIX LAM and PAM and select +dnl which one to use at run-time. dnl if test ${with_aixauth-'no'} != "no"; then - if test X"$with_aixauth" != X"maybe" -o X"$AUTH_EXCL" = X""; then + AC_CHECK_FUNCS([authenticate], [with_aixauth=yes]) + if test "${with_aixauth}" = "yes"; then AC_MSG_NOTICE([using AIX general authentication]) AC_DEFINE(HAVE_AIXAUTH) AUTH_OBJS="$AUTH_OBJS aix_auth.lo"; @@ -3694,7 +3738,6 @@ SUDOERS_LDFLAGS="${SUDOERS_LDFLAGS} --tag=disable-shared -static" LT_STATIC="" else - SUDO_OBJS="$SUDO_OBJS locale_stub.o" LT_STATIC="--tag=disable-static" fi ;; @@ -3707,7 +3750,6 @@ SUDOERS_LDFLAGS="${SUDOERS_LDFLAGS} --tag=disable-shared -static" LT_STATIC="" else - SUDO_OBJS="$SUDO_OBJS locale_stub.o" LT_STATIC="--tag=disable-static" fi ;; @@ -3752,7 +3794,7 @@ case "$host_os" in hpux*) AC_CHECK_LIB(pthread, main, [SUDO_LIBS="${SUDO_LIBS} -lpthread"]) - OSDEFS="${OSDEFS} -D_REENTRANT" + AC_DEFINE(_REENTRANT) ;; esac @@ -3771,7 +3813,7 @@ dnl dnl Turn warnings into errors. dnl All compiler/loader tests after this point will fail if -dnl a warning is displayed (nornally, warnings are not fata). +dnl a warning is displayed (normally, warnings are not fatal). dnl AC_LANG_WERROR @@ -3903,6 +3945,23 @@ fi dnl +dnl Check for -fsanitize=address,undefined support +dnl This test relies on AC_LANG_WERROR +dnl +if test "$enable_asan" = "yes"; then + AX_CHECK_COMPILE_FLAG([-fsanitize=address,undefined], [ + AX_CHECK_LINK_FLAG([-fsanitize=address,undefined], [ + LDFLAGS="$LDFLAGS -fsanitize=address,undefined" + CFLAGS="$CFLAGS -fsanitize=address,undefined" + AX_CHECK_COMPILE_FLAG([-fno-omit-frame-pointer], [ + CFLAGS="$CFLAGS -fno-omit-frame-pointer" + ]) + AC_DEFINE(NO_LEAKS) + ]) + ]) +fi + +dnl dnl Check for PIE executable support if using gcc. dnl This test relies on AC_LANG_WERROR dnl @@ -3958,29 +4017,53 @@ dnl This test relies on AC_LANG_WERROR dnl if test "$enable_hardening" != "no"; then - if test -n "$GCC"; then - AX_CHECK_COMPILE_FLAG([-fstack-protector-strong], [ - AX_CHECK_LINK_FLAG([-fstack-protector-strong], [ - SSP_CFLAGS="-fstack-protector-strong" - SSP_LDFLAGS="-Wc,-fstack-protector-strong" - ]) - ]) - if test -z "$SSP_CFLAGS"; then - AX_CHECK_COMPILE_FLAG([-fstack-protector-all], [ - AX_CHECK_LINK_FLAG([-fstack-protector-all], [ - SSP_CFLAGS="-fstack-protector-all" - SSP_LDFLAGS="-Wc,-fstack-protector-all" - ]) - ]) - if test -z "$SSP_CFLAGS"; then - AX_CHECK_COMPILE_FLAG([-fstack-protector], [ - AX_CHECK_LINK_FLAG([-fstack-protector], [ - SSP_CFLAGS="-fstack-protector" - SSP_LDFLAGS="-Wc,-fstack-protector" + AC_CACHE_CHECK([for compiler stack protector support], + [sudo_cv_var_stack_protector], + [ + # Avoid CFLAGS since the compiler might optimize away our test. + # We don't want CPPFLAGS or LIBS to interfere with the test but + # keep LDFLAGS as it may have an rpath needed to find the ssp lib. + _CPPFLAGS="$CPPFLAGS" + _CFLAGS="$CFLAGS" + _LDFLAGS="$LDFLAGS" + _LIBS="$LIBS" + CPPFLAGS= + LIBS= + + sudo_cv_var_stack_protector="-fstack-protector-strong" + CFLAGS="$sudo_cv_var_stack_protector" + LDFLAGS="$_LDFLAGS $sudo_cv_var_stack_protector" + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT], + [[char buf[1024]; buf[1023] = '\0';]]) + ], [], [ + sudo_cv_var_stack_protector="-fstack-protector-all" + CFLAGS="$sudo_cv_var_stack_protector" + LDFLAGS="$_LDFLAGS $sudo_cv_var_stack_protector" + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT], + [[char buf[1024]; buf[1023] = '\0';]]) + ], [], [ + sudo_cv_var_stack_protector="-fstack-protector" + CFLAGS="$sudo_cv_var_stack_protector" + LDFLAGS="$_LDFLAGS $sudo_cv_var_stack_protector" + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT], + [[char buf[1024]; buf[1023] = '\0';]]) + ], [], [ + sudo_cv_var_stack_protector=no ]) ]) - fi - fi + ]) + CPPFLAGS="$_CPPFLAGS" + CFLAGS="$_CFLAGS" + LDFLAGS="$_LDFLAGS" + LIBS="$_LIBS" + ] + ) + if test X"$sudo_cv_var_stack_protector" != X"no"; then + SSP_CFLAGS="$sudo_cv_var_stack_protector" + SSP_LDFLAGS="-Wc,$sudo_cv_var_stack_protector" fi AX_CHECK_LINK_FLAG([-Wl,-z,relro], [LDFLAGS="${LDFLAGS} -Wl,-z,relro"]) fi @@ -4123,12 +4206,17 @@ test "$docdir" = '${datarootdir}/doc/${PACKAGE_TARNAME}' && docdir='$(datarootdir)/doc/$(PACKAGE_TARNAME)' test "$localedir" = '${datarootdir}/locale' && localedir='$(datarootdir)/locale' test "$localstatedir" = '${prefix}/var' && localstatedir='$(prefix)/var' -test "$sysconfdir" = '${prefix}/etc' -a X"$with_stow" != X"yes" && sysconfdir='/etc' +test "$sysconfdir" = '${prefix}/etc' && sysconfdir='/etc' dnl dnl Substitute into the Makefile and man pages dnl -AC_CONFIG_FILES([Makefile doc/Makefile examples/Makefile include/Makefile init.d/aix.sh init.d/hpux.sh lib/util/Makefile lib/util/util.exp src/sudo_usage.h src/Makefile plugins/sample/Makefile plugins/group_file/Makefile plugins/system_group/Makefile plugins/sudoers/Makefile plugins/sudoers/sudoers]) +if test X"$INIT_SCRIPT" != X""; then + AC_CONFIG_FILES([init.d/$INIT_SCRIPT]) +elif test X"$TMPFILES_D" != X""; then + AC_CONFIG_FILES([init.d/sudo.conf]) +fi +AC_CONFIG_FILES([Makefile doc/Makefile examples/Makefile include/Makefile lib/util/Makefile lib/util/util.exp src/sudo_usage.h src/Makefile plugins/sample/Makefile plugins/group_file/Makefile plugins/system_group/Makefile plugins/sudoers/Makefile plugins/sudoers/sudoers]) AC_OUTPUT dnl @@ -4166,7 +4254,6 @@ dnl dnl Autoheader templates dnl -AH_TEMPLATE(BROKEN_SYSLOG, [Define to 1 if the `syslog' function returns a non-zero int to denote failure.]) AH_TEMPLATE(CLASSIC_INSULTS, [Define to 1 if you want the insults from the "classic" version sudo.]) AH_TEMPLATE(CSOPS_INSULTS, [Define to 1 if you want insults culled from the twisted minds of CSOps.]) AH_TEMPLATE(DONT_LEAK_PATH_INFO, [Define to 1 if you want sudo to display "command not allowed" instead of "command not found" when a command cannot be found.]) @@ -4231,14 +4318,15 @@ AH_TEMPLATE(LOGGING, [Define to SLOG_SYSLOG, SLOG_FILE, or SLOG_BOTH.]) AH_TEMPLATE(LONG_OTP_PROMPT, [Define to 1 if you want a two line OTP (S/Key or OPIE) prompt.]) AH_TEMPLATE(NO_AUTHENTICATION, [Define to 1 if you don't want sudo to prompt for a password by default.]) +AH_TEMPLATE(NO_LEAKS, [Define to 1 if you want sudo to free up memory before exiting.]) AH_TEMPLATE(NO_LECTURE, [Define to 1 if you don't want users to get the lecture the first they user sudo.]) AH_TEMPLATE(NO_PAM_SESSION, [Define to 1 if you don't want to use sudo's PAM session support.]) AH_TEMPLATE(NO_ROOT_MAILER, [Define to avoid runing the mailer as root.]) AH_TEMPLATE(NO_ROOT_SUDO, [Define to 1 if root should not be allowed to use sudo.]) AH_TEMPLATE(NO_TTY_TICKETS, [Define to 1 if you want a single ticket file instead of per-tty files.]) AH_TEMPLATE(PC_INSULTS, [Define to 1 to replace politically incorrect insults with less offensive ones.]) -AH_TEMPLATE(PREFER_PORTABLE_GETCWD, [Enable replacement getcwd if system getcwd is broken.]) -AH_TEMPLATE(SECURE_PATH, [Define to 1 to override the user's path with a built-in one.]) +AH_TEMPLATE(PREFER_PORTABLE_GETCWD, [Define to 1 to enable replacement getcwd if system getcwd is broken.]) +AH_TEMPLATE(SECURE_PATH, [A colon-separated list of directories to override the user's PATH with.]) AH_TEMPLATE(SEND_MAIL_WHEN_NOT_OK, [Define to 1 to send mail when the user is not allowed to run a command.]) AH_TEMPLATE(SEND_MAIL_WHEN_NO_HOST, [Define to 1 to send mail when the user is not allowed to run sudo on this host.]) AH_TEMPLATE(SEND_MAIL_WHEN_NO_USER, [Define to 1 to send mail when the user is not in the sudoers file.]) @@ -4270,16 +4358,54 @@ AH_TEMPLATE(HAVE___NSS_INITF_GROUP, [Define to 1 if you have the `__nss_initf_group' function.]) AH_TEMPLATE(HAVE__NSS_XBYY_BUF_ALLOC, [Define to 1 if you have the `_nss_XbyY_buf_alloc' function.]) AH_TEMPLATE(HAVE___NSS_XBYY_BUF_ALLOC, [Define to 1 if you have the `__nss_XbyY_buf_alloc' function.]) +AH_TEMPLATE(NEED_RESOLV_H, [Define to 1 if resolv.h must be included to get the `inet_ntop' or `inet_pton' function prototypes.]) +AH_TEMPLATE(HAVE_STRNLEN, [Define to 1 if you have the `strnlen' function.]) +AH_TEMPLATE(PAM_SUN_CODEBASE, [Define to 1 if your system uses a Solaris-derived PAM and not Linux-PAM or OpenPAM.]) dnl dnl Bits to copy verbatim into config.h.in dnl -AH_TOP([#ifndef _SUDO_CONFIG_H -#define _SUDO_CONFIG_H]) +AH_TOP([#ifndef SUDO_CONFIG_H +#define SUDO_CONFIG_H]) AH_BOTTOM([/* BSD compatibility on some SVR4 systems. */ #ifdef __svr4__ # define BSD_COMP -#endif /* __svr4__ */ +#endif + +/* Enable BSD extensions on systems that have them. */ +#ifndef _BSD_SOURCE +# undef _BSD_SOURCE +#endif + +/* Enable BSD types on IRIX. */ +#ifndef _BSD_TYPES +# undef _BSD_TYPES +#endif + +/* Enable Linux-compatible extensions on AIX. */ +#ifndef _LINUX_SOURCE_COMPAT +# undef _LINUX_SOURCE_COMPAT +#endif + +/* Enable prototypes in GCC fixed includes on older systems. */ +#ifndef __USE_FIXED_PROTOTYPES__ +# undef __USE_FIXED_PROTOTYPES__ +#endif + +/* Enable XPG4v2 extensions to POSIX, needed for MSG_WAITALL on older HP-UX. */ +#ifndef _XOPEN_SOURCE_EXTENDED +# undef _XOPEN_SOURCE_EXTENDED +#endif + +/* Enable reentrant versions of the standard C API (obsolete). */ +#ifndef _REENTRANT +# undef _REENTRANT +#endif + +/* Enable "safer" versions of the standard C API (ISO C11). */ +#ifndef __STDC_WANT_LIB_EXT1__ +# undef __STDC_WANT_LIB_EXT1__ +#endif -#endif /* _SUDO_CONFIG_H */]) +#endif /* SUDO_CONFIG_H */]) diff -Nru sudo-1.8.12/debian/changelog sudo-1.8.16/debian/changelog --- sudo-1.8.12/debian/changelog 2015-09-22 15:57:46.000000000 +0000 +++ sudo-1.8.16/debian/changelog 2016-03-30 12:30:31.000000000 +0000 @@ -1,3 +1,60 @@ +sudo (1.8.16-0ubuntu1) xenial; urgency=medium + + * Update to new upstream version 1.8.16. (LP: #1563825) + - Dropped patches no longer needed: + + CVE-2015-5602-6.patch + + CVE-2015-5602-7.patch + * Merge from Debian unstable. Remaining changes: + - Use tmpfs location to store timestamp files + + debian/rules: change --with-rundir to /var/run/sudo + + debian/rules, debian/sudo.service, debian/sudo.sudo.init: stop + shipping init script and service file, as they are no longer + necessary. + + debian/*.preinst, debian/*.postinst, debian/*.postrm: remove old + init script with dpkg-maintscript-helper. + + debian/*.postinst: remove old /var/run/sudo to /var/lib/sudo + transition code, remove old /var/lib/sudo/ts timestamp directory. + - debian/rules: + + compile with --without-lecture --with-tty-tickets --enable-admin-flag + + install man/man8/sudo_root.8 in both flavours + + install apport hooks + - debian/sudoers: + + also grant admin group sudo access + - debian/source_sudo.py, debian/sudo-ldap.dirs, debian/sudo.dirs: + + add usr/share/apport/package-hooks + - debian/sudo.pam: + + Use pam_env to read /etc/environment and /etc/default/locale + environment files. Reading ~/.pam_environment is not permitted due to + security reasons. + - debian/control: + + dh-autoreconf dependency fixes missing-build-dependency-for-dh_-command + - Remaining patches: + + keep_home_by_default.patch: Keep HOME in the default environment + + debian/patches/also_check_sudo_group.diff: also check the sudo group + in plugins/sudoers/sudoers.c to create the admin flag file. Leave the + admin group check for backwards compatibility. + - Dropped patches no longer needed: + + debian/patches/pam_check_untranslated_prompt.patch: upstream. + + -- Marc Deslauriers Wed, 30 Mar 2016 08:03:52 -0400 + +sudo (1.8.15-1.1) unstable; urgency=medium + + * Non-maintainer upload + * Disable editing of files via user-controllable symlinks + (Closes: #804149) (CVE-2015-5602) + - Fix directory writability checks for sudoedit + - Enable sudoedit directory writability checks by default + + -- Ben Hutchings Mon, 04 Jan 2016 23:36:50 +0000 + +sudo (1.8.15-1) unstable; urgency=low + + * new upstream version, closes: #804149 + * use --with-exampledir to deliver example files more cleanly + + -- Bdale Garbee Wed, 23 Dec 2015 11:15:22 -0700 + sudo (1.8.12-1ubuntu3) wily; urgency=medium * debian/patches/pam_check_untranslated_prompt.patch: also check the un- diff -Nru sudo-1.8.12/debian/patches/also_check_sudo_group.diff sudo-1.8.16/debian/patches/also_check_sudo_group.diff --- sudo-1.8.12/debian/patches/also_check_sudo_group.diff 2015-05-13 20:00:25.000000000 +0000 +++ sudo-1.8.16/debian/patches/also_check_sudo_group.diff 2016-03-30 12:08:50.000000000 +0000 @@ -1,18 +1,19 @@ Description: also check the sudo group to create the admin flag file Author: Marc Deslauriers Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/1387347 +Updated: 2016-03-30 -Index: sudo-1.8.12/plugins/sudoers/sudoers.c +Index: sudo-1.8.15/plugins/sudoers/sudoers.c =================================================================== ---- sudo-1.8.12.orig/plugins/sudoers/sudoers.c 2015-05-13 16:00:22.326982756 -0400 -+++ sudo-1.8.12/plugins/sudoers/sudoers.c 2015-05-13 16:00:22.326982756 -0400 -@@ -1142,7 +1142,8 @@ +--- sudo-1.8.15.orig/plugins/sudoers/sudoers.c 2016-03-30 08:07:41.239885338 -0400 ++++ sudo-1.8.15/plugins/sudoers/sudoers.c 2016-03-30 08:08:27.792347977 -0400 +@@ -1236,7 +1236,8 @@ debug_decl(create_admin_success_flag, SUDOERS_DEBUG_PLUGIN) /* Check whether the user is in the admin group. */ - if (!user_in_group(sudo_user.pw, "admin")) + if (!user_in_group(sudo_user.pw, "admin") && + !user_in_group(sudo_user.pw, "sudo")) - debug_return; + debug_return_int(true); /* Build path to flag file. */ diff -Nru sudo-1.8.12/debian/patches/future-timestamp.diff sudo-1.8.16/debian/patches/future-timestamp.diff --- sudo-1.8.12/debian/patches/future-timestamp.diff 2015-02-23 16:03:03.000000000 +0000 +++ sudo-1.8.16/debian/patches/future-timestamp.diff 1970-01-01 00:00:00.000000000 +0000 @@ -1,11 +0,0 @@ ---- a/plugins/sudoers/boottime.c -+++ b/plugins/sudoers/boottime.c -@@ -80,6 +80,8 @@ - if (fp != NULL) { - while ((len = getline(&line, &linesize, fp)) != -1) { - if (strncmp(line, "btime ", 6) == 0) { -+ if (line[len - 1] == '\n') -+ line[len - 1] = '\0'; - long long llval = strtonum(line + 6, 1, LLONG_MAX, NULL); - if (llval > 0) { - tv->tv_sec = (time_t)llval; diff -Nru sudo-1.8.12/debian/patches/keep_home_by_default.patch sudo-1.8.16/debian/patches/keep_home_by_default.patch --- sudo-1.8.12/debian/patches/keep_home_by_default.patch 2015-05-13 20:00:19.000000000 +0000 +++ sudo-1.8.16/debian/patches/keep_home_by_default.patch 2016-03-30 12:27:26.000000000 +0000 @@ -4,11 +4,11 @@ resetting the home for -H and -i options, so this is the only part that's missing. Author: Steve Langasek -Index: sudo-1.8.12/plugins/sudoers/env.c +Index: sudo-1.8.16/plugins/sudoers/env.c =================================================================== ---- sudo-1.8.12.orig/plugins/sudoers/env.c 2015-05-13 16:00:17.838949377 -0400 -+++ sudo-1.8.12/plugins/sudoers/env.c 2015-05-13 16:00:17.834949348 -0400 -@@ -197,6 +197,7 @@ +--- sudo-1.8.16.orig/plugins/sudoers/env.c 2016-03-30 08:27:25.003539832 -0400 ++++ sudo-1.8.16/plugins/sudoers/env.c 2016-03-30 08:27:24.999539794 -0400 +@@ -189,6 +189,7 @@ static const char *initial_keepenv_table[] = { "COLORS", "DISPLAY", diff -Nru sudo-1.8.12/debian/patches/pam_check_untranslated_prompt.patch sudo-1.8.16/debian/patches/pam_check_untranslated_prompt.patch --- sudo-1.8.12/debian/patches/pam_check_untranslated_prompt.patch 2015-09-22 15:57:26.000000000 +0000 +++ sudo-1.8.16/debian/patches/pam_check_untranslated_prompt.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,29 +0,0 @@ -From: Joel Pelaez Jorge -Subject: Check untranslated PAM prompt to match Password: - -When checking whether the PAM prompt matches "Password:", also check -for the untranslated version. The PAM module might not be using the -localized string even though it exists. From Joel Pelaez Jorge. -Fixes Bug #701 - -Origin: upstream, http://www.sudo.ws/repos/sudo/rev/d87f6f2ccb42 -Bug: http://bugzilla.sudo.ws/show_bug.cgi?id=701 -Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/1414303 -Last-Update: 2015-09-22 - -diff -r 09e400445ca2 -r d87f6f2ccb42 plugins/sudoers/auth/pam.c ---- a/plugins/sudoers/auth/pam.c Wed Jun 24 10:32:08 2015 -0600 -+++ b/plugins/sudoers/auth/pam.c Thu Jun 25 09:12:15 2015 -0600 -@@ -299,8 +299,9 @@ - - #ifdef PAM_TEXT_DOMAIN - # define PAM_PROMPT_IS_PASSWORD(_p) \ -- (strcmp((_p), dgt(PAM_TEXT_DOMAIN, "Password: ")) == 0 || \ -- strcmp((_p), dgt(PAM_TEXT_DOMAIN, "Password:")) == 0) -+ (strcmp((_p), dgt(PAM_TEXT_DOMAIN, "Password:")) == 0 || \ -+ strcmp((_p), dgt(PAM_TEXT_DOMAIN, "Password: ")) == 0 || \ -+ PROMPT_IS_PASSWORD(_p)) - #else - # define PAM_PROMPT_IS_PASSWORD(_p) PROMPT_IS_PASSWORD(_p) - #endif /* PAM_TEXT_DOMAIN */ - diff -Nru sudo-1.8.12/debian/patches/series sudo-1.8.16/debian/patches/series --- sudo-1.8.12/debian/patches/series 2015-09-22 15:52:08.000000000 +0000 +++ sudo-1.8.16/debian/patches/series 2016-03-30 12:27:15.000000000 +0000 @@ -1,6 +1,4 @@ typo-in-classic-insults.diff -future-timestamp.diff paths-in-samples.diff keep_home_by_default.patch also_check_sudo_group.diff -pam_check_untranslated_prompt.patch diff -Nru sudo-1.8.12/debian/rules sudo-1.8.16/debian/rules --- sudo-1.8.12/debian/rules 2015-06-05 13:45:22.000000000 +0000 +++ sudo-1.8.16/debian/rules 2016-03-30 12:04:07.000000000 +0000 @@ -37,6 +37,7 @@ --with-logfac=authpriv \ --with-env-editor \ --with-editor=/usr/bin/editor \ + --with-exampledir=/usr/share/doc/sudo/examples \ --with-timeout=15 \ --with-password-timeout=0 \ --with-passprompt="[sudo] password for %p: " \ @@ -63,6 +64,7 @@ --with-logfac=authpriv \ --with-env-editor \ --with-editor=/usr/bin/editor \ + --with-exampledir=/usr/share/doc/sudo-ldap/examples \ --with-timeout=15 \ --with-password-timeout=0 \ --with-passprompt="[sudo] password for %p: " \ @@ -124,12 +126,6 @@ debian/sudo-ldap/usr/share/doc/sudo-ldap/ rmdir debian/sudo-ldap/usr/share/doc/sudo - # move example files to the doc tree per policy - mv debian/sudo/usr/share/examples/sudo \ - debian/sudo/usr/share/doc/sudo/examples - mv debian/sudo-ldap/usr/share/examples/sudo \ - debian/sudo-ldap/usr/share/doc/sudo-ldap/examples - # and install things we do want that make install doesn't know about install -o root -g root -m 0644 debian/sudo.pam \ debian/sudo/etc/pam.d/sudo diff -Nru sudo-1.8.12/doc/CONTRIBUTORS sudo-1.8.16/doc/CONTRIBUTORS --- sudo-1.8.12/doc/CONTRIBUTORS 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/doc/CONTRIBUTORS 2016-03-17 16:13:11.000000000 +0000 @@ -25,6 +25,7 @@ Brooks, Piete Brown, Jerry Burr, Michael E + Burton, Ross Bussjaeger, Andreas Calvin, Gary Campbell, Aaron @@ -57,12 +58,15 @@ Holloway, Nick Hoover, Adam Hunter, Michael T. + Hutchings, Ben Irrgang, Eric Jackson, Brian Jackson, John R. Jackson, Richard L., Jr. Janssen, Mark Jepeway, Chris + Jorge, Joel Peláe + Peláe Jorge, Joel Juhani, Timo KIKUCHI, Ayamura Kadow, Kevin @@ -70,6 +74,7 @@ Kienenberger, Mike King, Dale King, Michael + Klyachkin, Andrey Knoble, Jim Knox, Tim Komarnitsky, Alek O. @@ -90,6 +95,7 @@ Markham, Paul Martinian, Emin Meskes, Michael + Michael, David Miller, Todd C. Minier, Loïc Moffat, Darren @@ -106,6 +112,7 @@ Percival, Ted Perera, Andres Peron, Christian S.J. + Peschel, Aaron Peslyak, Alexander Peterson, Toby Pettenò, Diego Elio @@ -152,12 +159,14 @@ Valery, Reznic Van Dinter, Theo Venckus, Martynas + de Vries, Maarten Wagner, Klaus Walsh, Dan Warburton, John Webb, Kirk Wetzel, Timm Wieringen, Marco van + Wilk, Jakub Winiger, Gary Wood, David Zacarias, Gustavo @@ -182,6 +191,8 @@ Hein, Jochen Jerovšek, Damir Karvonen, Jorma + Kazik, Dušan + Kelemen, Gábor Košir, Klemen Kozlov, Yuri Kramer, Jakob diff -Nru sudo-1.8.12/doc/LICENSE sudo-1.8.16/doc/LICENSE --- sudo-1.8.12/doc/LICENSE 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/doc/LICENSE 2015-10-31 23:34:59.000000000 +0000 @@ -41,7 +41,23 @@ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -The files getcwd.c, glob.c, glob.h, snprintf.c and queue.h bear the +The file reallocarray.c bears the following license: + + Copyright (c) 2008 Otto Moerbeek + + 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. + +The files getcwd.c, glob.c, glob.h, snprintf.c and sudo_queue.h bear the following license: Copyright (c) 1989, 1990, 1991, 1993 diff -Nru sudo-1.8.12/doc/Makefile.in sudo-1.8.16/doc/Makefile.in --- sudo-1.8.12/doc/Makefile.in 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/doc/Makefile.in 2015-10-31 23:34:59.000000000 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 2010-2014 Todd C. Miller +# Copyright (c) 2010-2015 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 @@ -92,6 +92,17 @@ all: $(DEVDOCS) $(DOCS) +lint: all + @if [ "$(mantype)" != "mdoc" ]; then \ + echo "make lint only supported for mdoc manuals" 1>&2; \ + exit 1; \ + else \ + for m in $(DOCS); do \ + echo $(MANDOC) -Tlint $$m; \ + $(MANDOC) -Tlint $$m; \ + done; \ + fi + Makefile: $(srcdir)/Makefile.in (cd $(top_builddir) && ./config.status --file doc/Makefile) @@ -117,13 +128,13 @@ sudo.man.sed: $(srcdir)/fixman.sh BAMAN=@BAMAN@ LCMAN=@LCMAN@ SEMAN=@SEMAN@ PSMAN=@PSMAN@ $(SHELL) $(srcdir)/fixman.sh $@ -$(mansrcdir)/sudo.man: $(srcdir)/sudo.man.in sudo.man.sed +$(mansrcdir)/sudo.man: $(top_builddir)/config.status $(srcdir)/sudo.man.in sudo.man.sed (cd $(top_builddir) && $(SHELL) config.status --file=-) < $(srcdir)/sudo.man.in | $(SED) -f $@.sed > $@ sudo.mdoc.sed: $(srcdir)/fixmdoc.sh BAMAN=@BAMAN@ LCMAN=@LCMAN@ SEMAN=@SEMAN@ PSMAN=@PSMAN@ $(SHELL) $(srcdir)/fixmdoc.sh $@ -$(mansrcdir)/sudo.mdoc: $(srcdir)/sudo.mdoc.in sudo.mdoc.sed +$(mansrcdir)/sudo.mdoc: $(top_builddir)/config.status $(srcdir)/sudo.mdoc.in sudo.mdoc.sed (cd $(top_builddir) && $(SHELL) config.status --file=-) < $(srcdir)/sudo.mdoc.in | $(SED) -f $@.sed > $@ $(srcdir)/sudo.cat: varsub $(srcdir)/sudo.mdoc.in @@ -143,10 +154,10 @@ $(SED) -e "s/$$mansectsu/8/g" -e "s/$$mansectform/5/g" $(srcdir)/visudo.mdoc.in | $(MANDOC) -Tman | $(SED) -e 's/^\(\.TH "VISUDO" \)"8"\(.*"\)OpenBSD \(.*\)/\1"'$$mansectsu'"\2\3/' -e "s/(5)/($$mansectform)/g" -e "s/(8)/($$mansectsu)/g" >> $@; \ fi -$(mansrcdir)/visudo.man: $(srcdir)/visudo.man.in +$(mansrcdir)/visudo.man: $(top_builddir)/config.status $(srcdir)/visudo.man.in (cd $(top_builddir) && $(SHELL) config.status --file=doc/$@) -$(mansrcdir)/visudo.mdoc: $(srcdir)/visudo.mdoc.in +$(mansrcdir)/visudo.mdoc: $(top_builddir)/config.status $(srcdir)/visudo.mdoc.in (cd $(top_builddir) && $(SHELL) config.status --file=doc/$@) $(srcdir)/visudo.cat: varsub $(srcdir)/visudo.mdoc.in @@ -166,10 +177,10 @@ $(SED) -e "s/$$mansectsu/8/g" -e "s/$$mansectform/5/g" $(srcdir)/sudo.conf.mdoc.in | $(MANDOC) -Tman | $(SED) -e 's/^\(\.TH "VISUDO" \)"8"\(.*"\)OpenBSD \(.*\)/\1"'$$mansectsu'"\2\3/' -e "s/(5)/($$mansectform)/g" -e "s/(8)/($$mansectsu)/g" >> $@; \ fi -$(mansrcdir)/sudo.conf.man: $(srcdir)/sudo.conf.man.in +$(mansrcdir)/sudo.conf.man: $(top_builddir)/config.status $(srcdir)/sudo.conf.man.in (cd $(top_builddir) && $(SHELL) config.status --file=doc/$@) -$(mansrcdir)/sudo.conf.mdoc: $(srcdir)/sudo.conf.mdoc.in +$(mansrcdir)/sudo.conf.mdoc: $(top_builddir)/config.status $(srcdir)/sudo.conf.mdoc.in (cd $(top_builddir) && $(SHELL) config.status --file=doc/$@) $(srcdir)/sudo.conf.cat: varsub $(srcdir)/sudo.conf.mdoc.in @@ -192,13 +203,13 @@ sudoers.man.sed: $(srcdir)/fixman.sh LCMAN=@LCMAN@ SEMAN=@SEMAN@ PSMAN=@PSMAN@ $(SHELL) $(srcdir)/fixman.sh $@ -$(mansrcdir)/sudoers.man: $(srcdir)/sudoers.man.in sudoers.man.sed +$(mansrcdir)/sudoers.man: $(top_builddir)/config.status $(srcdir)/sudoers.man.in sudoers.man.sed (cd $(top_builddir) && $(SHELL) config.status --file=-) < $(srcdir)/sudoers.man.in | $(SED) -f $@.sed > $@ sudoers.mdoc.sed: $(srcdir)/fixmdoc.sh LCMAN=@LCMAN@ SEMAN=@SEMAN@ PSMAN=@PSMAN@ $(SHELL) $(srcdir)/fixmdoc.sh $@ -$(mansrcdir)/sudoers.mdoc: $(srcdir)/sudoers.mdoc.in sudoers.mdoc.sed +$(mansrcdir)/sudoers.mdoc: $(top_builddir)/config.status $(srcdir)/sudoers.mdoc.in sudoers.mdoc.sed (cd $(top_builddir) && $(SHELL) config.status --file=-) < $(srcdir)/sudoers.mdoc.in | $(SED) -f $@.sed > $@ $(srcdir)/sudoers.cat: varsub $(srcdir)/sudoers.mdoc.in @@ -218,10 +229,10 @@ $(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"\(.*"\)OpenBSD \(.*\)/\1"'$$mansectsu'"\2\3/' -e "s/(5)/($$mansectform)/g" -e "s/(8)/($$mansectsu)/g" >> $@; \ fi -$(mansrcdir)/sudoers.ldap.man: $(srcdir)/sudoers.ldap.man.in +$(mansrcdir)/sudoers.ldap.man: $(top_builddir)/config.status $(srcdir)/sudoers.ldap.man.in (cd $(top_builddir) && $(SHELL) config.status --file=doc/$@) -$(mansrcdir)/sudoers.ldap.mdoc: $(srcdir)/sudoers.ldap.mdoc.in +$(mansrcdir)/sudoers.ldap.mdoc: $(top_builddir)/config.status $(srcdir)/sudoers.ldap.mdoc.in (cd $(top_builddir) && $(SHELL) config.status --file=doc/$@) $(srcdir)/sudoers.ldap.cat: varsub $(srcdir)/sudoers.ldap.mdoc.in @@ -241,10 +252,10 @@ $(SED) -e "s/$$mansectsu/8/g" -e "s/$$mansectform/5/g" $(srcdir)/sudoreplay.mdoc.in | $(MANDOC) -Tman | $(SED) -e 's/^\(\.TH "SUDOREPLAY" \)"8"\(.*"\)OpenBSD \(.*\)/\1"'$$mansectsu'"\2\3/' -e "s/(5)/($$mansectform)/g" -e "s/(8)/($$mansectsu)/g" >> $@; \ fi -$(mansrcdir)/sudoreplay.man: $(srcdir)/sudoreplay.man.in +$(mansrcdir)/sudoreplay.man: $(top_builddir)/config.status $(srcdir)/sudoreplay.man.in (cd $(top_builddir) && $(SHELL) config.status --file=doc/$@) -$(mansrcdir)/sudoreplay.mdoc: $(srcdir)/sudoreplay.mdoc.in +$(mansrcdir)/sudoreplay.mdoc: $(top_builddir)/config.status $(srcdir)/sudoreplay.mdoc.in (cd $(top_builddir) && $(SHELL) config.status --file=doc/$@) $(srcdir)/sudoreplay.cat: varsub $(srcdir)/sudoreplay.mdoc.in @@ -264,10 +275,10 @@ $(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"\(.*"\)OpenBSD \(.*\)/\1"'$$mansectsu'"\2\3/' -e "s/(5)/($$mansectform)/g" -e "s/(8)/($$mansectsu)/g" >> $@; \ fi -$(mansrcdir)/sudo_plugin.man: $(srcdir)/sudo_plugin.man.in +$(mansrcdir)/sudo_plugin.man: $(top_builddir)/config.status $(srcdir)/sudo_plugin.man.in (cd $(top_builddir) && $(SHELL) config.status --file=doc/$@) -$(mansrcdir)/sudo_plugin.mdoc: $(srcdir)/sudo_plugin.mdoc.in +$(mansrcdir)/sudo_plugin.mdoc: $(top_builddir)/config.status $(srcdir)/sudo_plugin.mdoc.in (cd $(top_builddir) && $(SHELL) config.status --file=doc/$@) $(srcdir)/sudo_plugin.cat: varsub $(srcdir)/sudo_plugin.mdoc.in @@ -327,6 +338,8 @@ $(DESTDIR)$(mandirform)/sudoers.$(mansectform) \ $(DESTDIR)$(mandirform)/sudoers.ldap.$(mansectform) +splint: + cppcheck: check: diff -Nru sudo-1.8.12/doc/sudo.cat sudo-1.8.16/doc/sudo.cat --- sudo-1.8.12/doc/sudo.cat 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/doc/sudo.cat 2016-03-17 16:13:11.000000000 +0000 @@ -16,7 +16,9 @@ DDEESSCCRRIIPPTTIIOONN ssuuddoo allows a permitted user to execute a _c_o_m_m_a_n_d as the superuser or - another user, as specified by the security policy. + another user, as specified by the security policy. The invoking user's + real (_n_o_t effective) user ID is used to determine the user name with + which to query the security policy. ssuuddoo supports a plugin architecture for security policies and input/output logging. Third parties can develop and distribute their own @@ -124,6 +126,24 @@ copied back to their original location and the temporary versions are removed. + To help prevent the editing of unauthorized files, the + following restrictions are enforced unless explicitly allowed + by the security policy: + + ++oo Symbolic links may not be edited (version 1.8.15 and + higher). + + ++oo Symbolic links along the path to be edited are not + followed when the parent directory is writable by the + invoking user unless that user is root (version 1.8.16 + and higher). + + ++oo Files located in a directory that is writable by the + invoking user may not be edited unless that user is root + (version 1.8.16 and higher). + + Users are never allowed to edit device special files. + If the specified file does not exist, it will be created. Note that unlike most commands run by _s_u_d_o, the editor is run with the invoking user's environment unmodified. If, for @@ -275,7 +295,7 @@ --uu _u_s_e_r, ----uusseerr=_u_s_e_r Run the command as a user other than the default target user - (usually _r_o_o_t _)_. The _u_s_e_r may be either a user name or a + (usually _r_o_o_t). The _u_s_e_r may be either a user name or a numeric user ID (UID) prefixed with the `#' character (e.g. #0 for UID 0). When running commands as a UID, many shells require that the `#' be escaped with a backslash (`\'). Some @@ -365,12 +385,12 @@ SSiiggnnaall hhaannddlliinngg When the command is run as a child of the ssuuddoo process, ssuuddoo will relay - signals it receives to the command. Unless the command is being run in a - new pty, the SIGHUP, SIGINT and SIGQUIT signals are not relayed unless - they are sent by a user process, not the kernel. Otherwise, the command - would receive SIGINT twice every time the user entered control-C. Some - signals, such as SIGSTOP and SIGKILL, cannot be caught and thus will not - be relayed to the command. As a general rule, SIGTSTP should be used + signals it receives to the command. The SIGINT and SIGQUIT signals are + only relayed when the command is being run in a new pty or when the + signal was sent by a user process, not the kernel. This prevents the + command from receiving SIGINT twice each time the user enters control-C. + Some signals, such as SIGSTOP and SIGKILL, cannot be caught and thus will + not be relayed to the command. As a general rule, SIGTSTP should be used instead of SIGSTOP when you wish to suspend a command being run by ssuuddoo. As a special case, ssuuddoo will not relay signals that were sent by the @@ -403,19 +423,21 @@ architecture. EEXXIITT VVAALLUUEE - Upon successful execution of a program, the exit status from _s_u_d_o will - simply be the exit status of the program that was executed. + Upon successful execution of a command, the exit status from ssuuddoo will be + the exit status of the program that was executed. If the command + terminated due to receipt of a signal, ssuuddoo will send itself the signal + that terminated the command. Otherwise, ssuuddoo exits with a value of 1 if there is a configuration/permission problem or if ssuuddoo cannot execute the given - command. In the latter case the error string is printed to the standard + command. In the latter case, the error string is printed to the standard error. If ssuuddoo cannot stat(2) one or more entries in the user's PATH, an - error is printed on stderr. (If the directory does not exist or if it is - not really a directory, the entry is ignored and no error is printed.) - This should not happen under normal circumstances. The most common - reason for stat(2) to return ``permission denied'' is if you are running - an automounter and one of the directories in your PATH is on a machine - that is currently unreachable. + error is printed to the standard error. (If the directory does not exist + or if it is not really a directory, the entry is ignored and no error is + printed.) This should not happen under normal circumstances. The most + common reason for stat(2) to return ``permission denied'' is if you are + running an automounter and one of the directories in your PATH is on a + machine that is currently unreachable. SSEECCUURRIITTYY NNOOTTEESS ssuuddoo tries to be safe when executing external commands. @@ -426,6 +448,11 @@ environment variable is _n_o_t modified and is passed unchanged to the program that ssuuddoo executes. + Users should _n_e_v_e_r be granted ssuuddoo privileges to execute files that are + writable by the user or that reside in a directory that is writable by + the user. If the user can modify or replace the command there is no way + to limit what additional commands they can run. + Please note that ssuuddoo will normally only log the command it explicitly runs. If a user runs a command such as sudo su or sudo sh, subsequent commands run from that shell are not subject to ssuuddoo's security policy. @@ -440,9 +467,11 @@ To prevent the disclosure of potentially sensitive information, ssuuddoo disables core dumps by default while it is executing (they are re-enabled - for the command that is run). To aid in debugging ssuuddoo crashes, you may - wish to re-enable core dumps by setting ``disable_coredump'' to false in - the sudo.conf(4) file as follows: + for the command that is run). This historical practice dates from a time + when most operating systems allowed setuid processes to dump core by + default. To aid in debugging ssuuddoo crashes, you may wish to re-enable + core dumps by setting ``disable_coredump'' to false in the sudo.conf(4) + file as follows: Set disable_coredump false @@ -455,13 +484,22 @@ EDITOR Default editor to use in --ee (sudoedit) mode if neither SUDO_EDITOR nor VISUAL is set. - MAIL In --ii mode or when _e_n_v___r_e_s_e_t is enabled in _s_u_d_o_e_r_s, set - to the mail spool of the target user. - - HOME Set to the home directory of the target user if --ii or --HH - are specified, _e_n_v___r_e_s_e_t or _a_l_w_a_y_s___s_e_t___h_o_m_e are set in - _s_u_d_o_e_r_s, or when the --ss option is specified and _s_e_t___h_o_m_e - is set in _s_u_d_o_e_r_s. + MAIL Set to the mail spool of the target user when the --ii + option is specified or when _e_n_v___r_e_s_e_t is enabled in + _s_u_d_o_e_r_s (unless MAIL is present in the _e_n_v___k_e_e_p list). + + HOME Set to the home directory of the target user when the --ii + or --HH options are specified, when the --ss option is + specified and _s_e_t___h_o_m_e is set in _s_u_d_o_e_r_s, when + _a_l_w_a_y_s___s_e_t___h_o_m_e is enabled in _s_u_d_o_e_r_s, or when _e_n_v___r_e_s_e_t + is enabled in _s_u_d_o_e_r_s and _H_O_M_E is not present in the + _e_n_v___k_e_e_p list. + + LOGNAME Set to the login name of the target user when the --ii + option is specified, when the _s_e_t___l_o_g_n_a_m_e option is + enabled in _s_u_d_o_e_r_s or when the _e_n_v___r_e_s_e_t option is + enabled in _s_u_d_o_e_r_s (unless LOGNAME is present in the + _e_n_v___k_e_e_p list). PATH May be overridden by the security policy. @@ -486,8 +524,9 @@ SUDO_USER Set to the login name of the user who invoked sudo. - USER Set to the target user (root unless the --uu option is - specified). + USER Set to the same value as LOGNAME, described above. + + USERNAME Same as USER. VISUAL Default editor to use in --ee (sudoedit) mode if SUDO_EDITOR is not set. @@ -536,7 +575,7 @@ HHIISSTTOORRYY See the HISTORY file in the ssuuddoo distribution - (http://www.sudo.ws/history.html) for a brief history of sudo. + (https://www.sudo.ws/history.html) for a brief history of sudo. AAUUTTHHOORRSS Many people have worked on ssuuddoo over the years; this version consists of @@ -545,7 +584,7 @@ Todd C. Miller See the CONTRIBUTORS file in the ssuuddoo distribution - (http://www.sudo.ws/contributors.html) for an exhaustive list of people + (https://www.sudo.ws/contributors.html) for an exhaustive list of people who have contributed to ssuuddoo. CCAAVVEEAATTSS @@ -568,18 +607,18 @@ BBUUGGSS If you feel you have found a bug in ssuuddoo, please submit a bug report at - http://bugzilla.sudo.ws/ + https://bugzilla.sudo.ws/ SSUUPPPPOORRTT Limited free support is available via the sudo-users mailing list, see - http://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search the - archives. + https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search + the archives. DDIISSCCLLAAIIMMEERR ssuuddoo is provided ``AS IS'' and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the LICENSE - file distributed with ssuuddoo or http://www.sudo.ws/license.html for + file distributed with ssuuddoo or https://www.sudo.ws/license.html for complete details. -Sudo 1.8.12 December 4, 2014 Sudo 1.8.12 +Sudo 1.8.16 January 19, 2016 Sudo 1.8.16 diff -Nru sudo-1.8.12/doc/sudo.conf.cat sudo-1.8.16/doc/sudo.conf.cat --- sudo-1.8.12/doc/sudo.conf.cat 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/doc/sudo.conf.cat 2016-03-17 16:13:10.000000000 +0000 @@ -88,6 +88,10 @@ Path noexec /usr/local/libexec/sudo/sudo_noexec.so Path askpass /usr/X11R6/bin/ssh-askpass + If no path name is specified, features relying on the specified setting + will be disabled. Disabling Path settings is only supported in ssuuddoo + version 1.8.16 and higher. + The following plugin-agnostic paths may be set in the _/_e_t_c_/_s_u_d_o_._c_o_n_f file: @@ -101,10 +105,12 @@ variable. noexec The fully-qualified path to a shared library containing dummy - versions of the eexxeeccvv(), eexxeeccvvee() and ffeexxeeccvvee() library - functions that just return an error. This is used to implement - the _n_o_e_x_e_c functionality on systems that support LD_PRELOAD or - its equivalent. The default value is: + versions of the eexxeeccll(), eexxeeccllee(), eexxeeccllpp(), eexxeecctt(), eexxeeccvv(), + eexxeeccvvee(), eexxeeccvvPP(), eexxeeccvvpp(), eexxeeccvvppee(), ffeexxeeccvvee(), ppooppeenn(), + ppoossiixx__ssppaawwnn(), ppoossiixx__ssppaawwnnpp(), and ssyysstteemm() library functions + that just return an error. This is used to implement the + _n_o_e_x_e_c functionality on systems that support LD_PRELOAD or its + equivalent. The default value is: _/_u_s_r_/_l_o_c_a_l_/_l_i_b_e_x_e_c_/_s_u_d_o_/_s_u_d_o___n_o_e_x_e_c_._s_o. plugin_dir @@ -120,18 +126,20 @@ The ssuuddoo..ccoonnff file also supports the following front end settings: disable_coredump - Core dumps of ssuuddoo itself are disabled by default. To aid in + Core dumps of ssuuddoo itself are disabled by default to prevent + the disclosure of potentially sensitive information. To aid in debugging ssuuddoo crashes, you may wish to re-enable core dumps by setting ``disable_coredump'' to false in ssuuddoo..ccoonnff as follows: Set disable_coredump false - Note that most operating systems disable core dumps from setuid - programs, including ssuuddoo. To actually get a ssuuddoo core file you - will likely need to enable core dumps for setuid processes. On - BSD and Linux systems this is accomplished in the sysctl - command. On Solaris, the coreadm command is used to configure - core dump behavior. + All modern operating systems place restrictions on core dumps + from setuid processes like ssuuddoo so this option can be enabled + without compromising security. To actually get a ssuuddoo core + file you will likely need to enable core dumps for setuid + processes. On BSD and Linux systems this is accomplished in + the sysctl command. On Solaris, the coreadm command is used to + configure core dump behavior. This setting is only available in ssuuddoo version 1.8.4 and higher. @@ -380,7 +388,7 @@ HHIISSTTOORRYY See the HISTORY file in the ssuuddoo distribution - (http://www.sudo.ws/history.html) for a brief history of sudo. + (https://www.sudo.ws/history.html) for a brief history of sudo. AAUUTTHHOORRSS Many people have worked on ssuuddoo over the years; this version consists of @@ -389,23 +397,23 @@ Todd C. Miller See the CONTRIBUTORS file in the ssuuddoo distribution - (http://www.sudo.ws/contributors.html) for an exhaustive list of people + (https://www.sudo.ws/contributors.html) for an exhaustive list of people who have contributed to ssuuddoo. BBUUGGSS If you feel you have found a bug in ssuuddoo, please submit a bug report at - http://bugzilla.sudo.ws/ + https://bugzilla.sudo.ws/ SSUUPPPPOORRTT Limited free support is available via the sudo-users mailing list, see - http://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search the - archives. + https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search + the archives. DDIISSCCLLAAIIMMEERR ssuuddoo is provided ``AS IS'' and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the LICENSE - file distributed with ssuuddoo or http://www.sudo.ws/license.html for + file distributed with ssuuddoo or https://www.sudo.ws/license.html for complete details. -Sudo 1.8.12 December 4, 2014 Sudo 1.8.12 +Sudo 1.8.16 November 20, 2015 Sudo 1.8.16 diff -Nru sudo-1.8.12/doc/sudo.conf.man.in sudo-1.8.16/doc/sudo.conf.man.in --- sudo-1.8.12/doc/sudo.conf.man.in 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/doc/sudo.conf.man.in 2016-03-17 16:13:10.000000000 +0000 @@ -1,7 +1,7 @@ .\" DO NOT EDIT THIS FILE, IT IS NOT THE MASTER! .\" IT IS GENERATED AUTOMATICALLY FROM sudo.conf.mdoc.in .\" -.\" Copyright (c) 2010-2014 Todd C. Miller +.\" Copyright (c) 2010-2015 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 @@ .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.TH "SUDO" "5" "December 4, 2014" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDO" "5" "November 20, 2015" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -79,7 +79,7 @@ The \fBsudo.conf\fR file is always parsed in the -\(lq\fRC\fR\(rq +\(Lq\fRC\fR\(Rq locale. .SS "Plugin configuration" \fBsudo\fR @@ -206,6 +206,14 @@ .RE .fi .PP +If no path name is specified, features relying on the specified +setting will be disabled. +Disabling +\fRPath\fR +settings is only supported in +\fBsudo\fR +version 1.8.16 and higher. +.PP The following plugin-agnostic paths may be set in the \fI@sysconfdir@/sudo.conf\fR file: @@ -229,10 +237,21 @@ noexec The fully-qualified path to a shared library containing dummy versions of the +\fBexecl\fR(), +\fBexecle\fR(), +\fBexeclp\fR(), +\fBexect\fR(), \fBexecv\fR(), -\fBexecve\fR() +\fBexecve\fR(), +\fBexecvP\fR(), +\fBexecvp\fR(), +\fBexecvpe\fR(), +\fBfexecve\fR(), +\fBpopen\fR(), +\fBposix_spawn\fR(), +\fBposix_spawnp\fR(), and -\fBfexecve\fR() +\fBsystem\fR() library functions that just return an error. This is used to implement the \fInoexec\fR @@ -265,11 +284,12 @@ disable_coredump Core dumps of \fBsudo\fR -itself are disabled by default. +itself are disabled by default to prevent the disclosure of potentially +sensitive information. To aid in debugging \fBsudo\fR crashes, you may wish to re-enable core dumps by setting -\(lqdisable_coredump\(rq +\(Lqdisable_coredump\(Rq to false in \fBsudo.conf\fR as follows: @@ -281,9 +301,10 @@ .fi .RS 10n .sp -Note that most operating systems disable core dumps from setuid programs, -including -\fBsudo\fR. +All modern operating systems place restrictions on core dumps +from setuid processes like +\fBsudo\fR +so this option can be enabled without compromising security. To actually get a \fBsudo\fR core file you will likely need to enable core dumps for setuid processes. @@ -338,7 +359,7 @@ Retrieving the group list this way is very fast but it is subject to an upper limit as described above. It is -\(lqstatic\(rq +\(Lqstatic\(Rq in that it does not reflect changes to the group database made after the user logs in. This was the default behavior prior to @@ -348,7 +369,7 @@ dynamic Always query the group database directly. It is -\(lqdynamic\(rq +\(Lqdynamic\(Rq in that changes made to the group database after the user logs in will be reflected in the group list. On some systems, querying the group database for all of a user's @@ -661,7 +682,7 @@ .SH "HISTORY" See the HISTORY file in the \fBsudo\fR -distribution (http://www.sudo.ws/history.html) for a brief +distribution (https://www.sudo.ws/history.html) for a brief history of sudo. .SH "AUTHORS" Many people have worked on @@ -674,24 +695,24 @@ .PP See the CONTRIBUTORS file in the \fBsudo\fR -distribution (http://www.sudo.ws/contributors.html) for an +distribution (https://www.sudo.ws/contributors.html) for an exhaustive list of people who have contributed to \fBsudo\fR. .SH "BUGS" If you feel you have found a bug in \fBsudo\fR, -please submit a bug report at http://bugzilla.sudo.ws/ +please submit a bug report at https://bugzilla.sudo.ws/ .SH "SUPPORT" Limited free support is available via the sudo-users mailing list, -see http://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or +see https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search the archives. .SH "DISCLAIMER" \fBsudo\fR is provided -\(lqAS IS\(rq +\(LqAS IS\(Rq and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the LICENSE file distributed with \fBsudo\fR -or http://www.sudo.ws/license.html for complete details. +or https://www.sudo.ws/license.html for complete details. diff -Nru sudo-1.8.12/doc/sudo.conf.mdoc.in sudo-1.8.16/doc/sudo.conf.mdoc.in --- sudo-1.8.12/doc/sudo.conf.mdoc.in 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/doc/sudo.conf.mdoc.in 2016-03-17 16:13:10.000000000 +0000 @@ -1,5 +1,5 @@ .\" -.\" Copyright (c) 2010-2014 Todd C. Miller +.\" Copyright (c) 2010-2015 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 @@ -14,7 +14,7 @@ .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd December 4, 2014 +.Dd November 20, 2015 .Dt SUDO @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -184,6 +184,14 @@ Path askpass /usr/X11R6/bin/ssh-askpass .Ed .Pp +If no path name is specified, features relying on the specified +setting will be disabled. +Disabling +.Li Path +settings is only supported in +.Nm sudo +version 1.8.16 and higher. +.Pp The following plugin-agnostic paths may be set in the .Pa @sysconfdir@/sudo.conf file: @@ -206,10 +214,21 @@ .It noexec The fully-qualified path to a shared library containing dummy versions of the +.Fn execl , +.Fn execle , +.Fn execlp , +.Fn exect , .Fn execv , -.Fn execve +.Fn execve , +.Fn execvP , +.Fn execvp , +.Fn execvpe , +.Fn fexecve , +.Fn popen , +.Fn posix_spawn , +.Fn posix_spawnp , and -.Fn fexecve +.Fn system library functions that just return an error. This is used to implement the .Em noexec @@ -241,7 +260,8 @@ .It disable_coredump Core dumps of .Nm sudo -itself are disabled by default. +itself are disabled by default to prevent the disclosure of potentially +sensitive information. To aid in debugging .Nm sudo crashes, you may wish to re-enable core dumps by setting @@ -253,9 +273,10 @@ Set disable_coredump false .Ed .Pp -Note that most operating systems disable core dumps from setuid programs, -including -.Nm sudo . +All modern operating systems place restrictions on core dumps +from setuid processes like +.Nm sudo +so this option can be enabled without compromising security. To actually get a .Nm sudo core file you will likely need to enable core dumps for setuid processes. @@ -598,28 +619,28 @@ .Sh HISTORY See the HISTORY file in the .Nm sudo -distribution (http://www.sudo.ws/history.html) for a brief +distribution (https://www.sudo.ws/history.html) for a brief history of sudo. .Sh AUTHORS Many people have worked on .Nm sudo over the years; this version consists of code written primarily by: .Bd -ragged -offset indent -Todd C. Miller +.An Todd C. Miller .Ed .Pp See the CONTRIBUTORS file in the .Nm sudo -distribution (http://www.sudo.ws/contributors.html) for an +distribution (https://www.sudo.ws/contributors.html) for an exhaustive list of people who have contributed to .Nm sudo . .Sh BUGS If you feel you have found a bug in .Nm sudo , -please submit a bug report at http://bugzilla.sudo.ws/ +please submit a bug report at https://bugzilla.sudo.ws/ .Sh SUPPORT Limited free support is available via the sudo-users mailing list, -see http://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or +see https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search the archives. .Sh DISCLAIMER .Nm sudo @@ -630,4 +651,4 @@ particular purpose are disclaimed. See the LICENSE file distributed with .Nm sudo -or http://www.sudo.ws/license.html for complete details. +or https://www.sudo.ws/license.html for complete details. diff -Nru sudo-1.8.12/doc/sudoers.cat sudo-1.8.16/doc/sudoers.cat --- sudo-1.8.12/doc/sudoers.cat 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/doc/sudoers.cat 2016-03-17 16:13:11.000000000 +0000 @@ -7,7 +7,7 @@ The ssuuddooeerrss policy plugin determines a user's ssuuddoo privileges. It is the default ssuuddoo policy plugin. The policy is driven by the _/_e_t_c_/_s_u_d_o_e_r_s file or, optionally in LDAP. The policy format is described in detail in - the _S_U_D_O_E_R_S _F_I_L_E _F_O_R_M_A_T section. For information on storing _s_u_d_o_e_r_s + the _S_U_D_O_E_R_S _F_I_L_E _F_O_R_M_A_T section. For information on storing ssuuddooeerrss policy information in LDAP, please see sudoers.ldap(4). CCoonnffiigguurriinngg ssuuddoo..ccoonnff ffoorr ssuuddooeerrss @@ -60,12 +60,12 @@ For more information on configuring sudo.conf(4), please refer to its manual. - AAuutthheennttiiccaattiioonn aanndd llooggggiinngg - The _s_u_d_o_e_r_s security policy requires that most users authenticate + UUsseerr AAuutthheennttiiccaattiioonn + The ssuuddooeerrss security policy requires that most users authenticate themselves before they can use ssuuddoo. A password is not required if the invoking user is root, if the target user is the same as the invoking user, or if the policy has disabled authentication for the user or - command. Unlike su(1), when _s_u_d_o_e_r_s requires authentication, it + command. Unlike su(1), when ssuuddooeerrss requires authentication, it validates the invoking user's credentials, not the target user's (or root's) credentials. This can be changed via the _r_o_o_t_p_w, _t_a_r_g_e_t_p_w and _r_u_n_a_s_p_w flags, described later. @@ -83,38 +83,41 @@ regardless of whether or not mail is sent. If ssuuddoo is run by root and the SUDO_USER environment variable is set, the - _s_u_d_o_e_r_s policy will use this value to determine who the actual user is. + ssuuddooeerrss policy will use this value to determine who the actual user is. This can be used by a user to log commands through sudo even when a root shell has been invoked. It also allows the --ee option to remain useful even when invoked via a sudo-run script or program. Note, however, that - the _s_u_d_o_e_r_s lookup is still done for root, not the user specified by + the _s_u_d_o_e_r_s file lookup is still done for root, not the user specified by SUDO_USER. - _s_u_d_o_e_r_s uses per-user time stamp files for credential caching. Once a + ssuuddooeerrss uses per-user time stamp files for credential caching. Once a user has been authenticated, a record is written containing the uid that was used to authenticate, the terminal session ID, and a time stamp (using a monotonic clock if one is available). The user may then use ssuuddoo without a password for a short period of time (5 minutes unless - overridden by the _t_i_m_e_o_u_t option). By default, _s_u_d_o_e_r_s uses a separate + overridden by the _t_i_m_e_o_u_t option). By default, ssuuddooeerrss uses a separate record for each tty, which means that a user's login sessions are authenticated separately. The _t_t_y___t_i_c_k_e_t_s option can be disabled to force the use of a single time stamp for all of a user's sessions. - _s_u_d_o_e_r_s can log both successful and unsuccessful attempts (as well as - errors) to syslog(3), a log file, or both. By default, _s_u_d_o_e_r_s will log + LLooggggiinngg + ssuuddooeerrss can log both successful and unsuccessful attempts (as well as + errors) to syslog(3), a log file, or both. By default, ssuuddooeerrss will log via syslog(3) but this is changeable via the _s_y_s_l_o_g and _l_o_g_f_i_l_e Defaults - settings. + settings. See _L_O_G _F_O_R_M_A_T for a description of the log file format. - _s_u_d_o_e_r_s also supports logging a command's input and output streams. I/O - logging is not on by default but can be enabled using the _l_o_g___i_n_p_u_t and - _l_o_g___o_u_t_p_u_t Defaults flags as well as the LOG_INPUT and LOG_OUTPUT command - tags. + ssuuddooeerrss is also capable of running a command in a pseudo-tty and logging + all input and/or output. The standard input, standard output and + standard error can be logged even when not associated with a terminal. + I/O logging is not on by default but can be enabled using the _l_o_g___i_n_p_u_t + and _l_o_g___o_u_t_p_u_t options as well as the LOG_INPUT and LOG_OUTPUT command + tags. See _I_/_O _L_O_G _F_I_L_E_S for details on how I/O log files are stored. CCoommmmaanndd eennvviirroonnmmeenntt - Since environment variables can influence program behavior, _s_u_d_o_e_r_s + Since environment variables can influence program behavior, ssuuddooeerrss provides a means to restrict which variables from the user's environment are inherited by the command to be run. There are two distinct ways - _s_u_d_o_e_r_s can deal with environment variables. + ssuuddooeerrss can deal with environment variables. By default, the _e_n_v___r_e_s_e_t option is enabled. This causes commands to be executed with a new, minimal environment. On AIX (and Linux systems @@ -173,7 +176,7 @@ them. As a special case, if ssuuddoo's --ii option (initial login) is specified, - _s_u_d_o_e_r_s will initialize the environment regardless of the value of + ssuuddooeerrss will initialize the environment regardless of the value of _e_n_v___r_e_s_e_t. The DISPLAY, PATH and TERM variables remain unchanged; HOME, MAIL, SHELL, USER, and LOGNAME are set based on the target user. On AIX (and Linux systems without PAM), the contents of _/_e_t_c_/_e_n_v_i_r_o_n_m_e_n_t are @@ -193,8 +196,8 @@ there are multiple matches, the last match is used (which is not necessarily the most specific match). - The _s_u_d_o_e_r_s grammar will be described below in Extended Backus-Naur Form - (EBNF). Don't despair if you are unfamiliar with EBNF; it is fairly + The _s_u_d_o_e_r_s file grammar will be described below in Extended Backus-Naur + Form (EBNF). Don't despair if you are unfamiliar with EBNF; it is fairly simple, and the definitions below are annotated. QQuuiicckk gguuiiddee ttoo EEBBNNFF @@ -252,6 +255,10 @@ Alias_Type NAME = item1, item2, item3 : NAME = item4, item5 + It is a syntax error to redefine an existing _a_l_i_a_s. It is possible to + use the same name for _a_l_i_a_s_e_s of different types, but this is not + recommended. + The definitions of what constitutes a valid _a_l_i_a_s member follow. User_List ::= User | @@ -272,7 +279,8 @@ IDs (prefixed with `%:' and `%:#' respectively) and User_Aliases. Each list item may be prefixed with zero or more `!' operators. An odd number of `!' operators negate the value of the item; an even number just cancel - each other out. + each other out. User netgroups are matched using the user and domain + members only; the host member is not used when matching. A user name, uid, group, gid, netgroup, nonunix_group or nonunix_gid may be enclosed in double quotes to avoid the need for escaping special @@ -327,17 +335,19 @@ A Host_List is made up of one or more host names, IP addresses, network numbers, netgroups (prefixed with `+') and other aliases. Again, the - value of an item may be negated with the `!' operator. If you do not - specify a netmask along with the network number, ssuuddoo will query each of - the local host's network interfaces and, if the network number - corresponds to one of the hosts's network interfaces, the corresponding - netmask will be used. The netmask may be specified either in standard IP - address notation (e.g. 255.255.255.0 or ffff:ffff:ffff:ffff::), or CIDR - notation (number of bits, e.g. 24 or 64). A host name may include shell- - style wildcards (see the _W_i_l_d_c_a_r_d_s section below), but unless the host - name command on your machine returns the fully qualified host name, - you'll need to use the _f_q_d_n option for wildcards to be useful. Note that - ssuuddoo only inspects actual network interfaces; this means that IP address + value of an item may be negated with the `!' operator. Host netgroups + are matched using the host (both qualified and unqualified) and domain + members only; the user member is not used when matching. If you specify + a network number without a netmask, ssuuddoo will query each of the local + host's network interfaces and, if the network number corresponds to one + of the hosts's network interfaces, will use the netmask of that + interface. The netmask may be specified either in standard IP address + notation (e.g. 255.255.255.0 or ffff:ffff:ffff:ffff::), or CIDR notation + (number of bits, e.g. 24 or 64). A host name may include shell-style + wildcards (see the _W_i_l_d_c_a_r_d_s section below), but unless the host name + command on your machine returns the fully qualified host name, you'll + need to use the _f_q_d_n option for wildcards to be useful. Note that ssuuddoo + only inspects actual network interfaces; this means that IP address 127.0.0.1 (localhost) will never match. Also, the host name ``localhost'' will only match if that is the actual host name, which is usually only the case for non-networked systems. @@ -381,17 +391,15 @@ to permit a user to run ssuuddoo with the --ee option (or as ssuuddooeeddiitt). It may take command line arguments just as a normal command does. Note that ``sudoedit'' is a command built into ssuuddoo itself and must be specified in - _s_u_d_o_e_r_s without a leading path. + the _s_u_d_o_e_r_s file without a leading path. If a command name is prefixed with a Digest_Spec, the command will only match successfully if it can be verified using the specified SHA-2 - digest. This may be useful in situations where the user invoking ssuuddoo - has write access to the command or its parent directory. The following - digest formats are supported: sha224, sha256, sha384 and sha512. The - string may be specified in either hex or base64 format (base64 is more - compact). There are several utilities capable of generating SHA-2 - digests in hex format such as openssl, shasum, sha224sum, sha256sum, - sha384sum, sha512sum. + digest. The following digest formats are supported: sha224, sha256, + sha384 and sha512. The string may be specified in either hex or base64 + format (base64 is more compact). There are several utilities capable of + generating SHA-2 digests in hex format such as openssl, shasum, + sha224sum, sha256sum, sha384sum, sha512sum. For example, using openssl: @@ -403,6 +411,13 @@ $ openssl dgst -binary -sha224 /bin/ls | openssl base64 EYGH2oNk1JC0p9679IMATo8+BT7JVDCd4sQaJQ== + Warning, if the user has write access to the command itself (directly or + via a ssuuddoo command), it may be possible for the user to replace the + command after the digest check has been performed but before the command + is executed. A similar race condition exists on systems that lack the + fexecve(2) system call when the directory in which the command is located + is writable by the user. + Command digests are only supported by version 1.8.7 or higher. DDeeffaauullttss @@ -461,9 +476,10 @@ Solaris_Priv_Spec ::= ('PRIVS=privset' | 'LIMITPRIVS=privset') - Tag_Spec ::= ('NOPASSWD:' | 'PASSWD:' | 'NOEXEC:' | 'EXEC:' | - 'SETENV:' | 'NOSETENV:' | 'LOG_INPUT:' | 'NOLOG_INPUT:' | - 'LOG_OUTPUT:' | 'NOLOG_OUTPUT:') + Tag_Spec ::= ('EXEC:' | 'NOEXEC:' | 'FOLLOW:' | 'NOFOLLOW' | + 'LOG_INPUT:' | 'NOLOG_INPUT:' | 'LOG_OUTPUT:' | + 'NOLOG_OUTPUT:' | 'MAIL:' | 'NOMAIL:' | 'PASSWD:' | + 'NOPASSWD:' | 'SETENV:' | 'NOSETENV:') A uusseerr ssppeecciiffiiccaattiioonn determines which commands a user may run (and as what user) on specified hosts. By default, commands are run as rroooott, but @@ -543,14 +559,14 @@ setting the group to operator or system. SSEELLiinnuuxx__SSppeecc - On systems with SELinux support, _s_u_d_o_e_r_s entries may optionally have an - SELinux role and/or type associated with a command. If a role or type is - specified with the command it will override any default values specified - in _s_u_d_o_e_r_s. A role or type specified on the command line, however, will - supersede the values in _s_u_d_o_e_r_s. + On systems with SELinux support, _s_u_d_o_e_r_s file entries may optionally have + an SELinux role and/or type associated with a command. If a role or type + is specified with the command it will override any default values + specified in _s_u_d_o_e_r_s. A role or type specified on the command line, + however, will supersede the values in _s_u_d_o_e_r_s. SSoollaarriiss__PPrriivv__SSppeecc - On Solaris systems, _s_u_d_o_e_r_s entries may optionally specify Solaris + On Solaris systems, _s_u_d_o_e_r_s file entries may optionally specify Solaris privilege set and/or limit privilege set associated with a command. If privileges or limit privileges are specified with the command it will override any default values specified in _s_u_d_o_e_r_s. @@ -577,13 +593,57 @@ TTaagg__SSppeecc A command may have zero or more tags associated with it. There are ten - possible tag values: NOPASSWD, PASSWD, NOEXEC, EXEC, SETENV, NOSETENV, - LOG_INPUT, NOLOG_INPUT, LOG_OUTPUT and NOLOG_OUTPUT. Once a tag is set - on a Cmnd, subsequent Cmnds in the Cmnd_Spec_List, inherit the tag unless - it is overridden by the opposite tag (in other words, PASSWD overrides - NOPASSWD and NOEXEC overrides EXEC). + possible tag values: EXEC, NOEXEC, FOLLOW, NOFOLLOW, LOG_INPUT, + NOLOG_INPUT, LOG_OUTPUT, NOLOG_OUTPUT, MAIL, NOMAIL, PASSWD, NOPASSWD, + SETENV, and NOSETENV. Once a tag is set on a Cmnd, subsequent Cmnds in + the Cmnd_Spec_List, inherit the tag unless it is overridden by the + opposite tag (in other words, PASSWD overrides NOPASSWD and NOEXEC + overrides EXEC). + + _E_X_E_C and _N_O_E_X_E_C + + If ssuuddoo has been compiled with _n_o_e_x_e_c support and the underlying + operating system supports it, the NOEXEC tag can be used to prevent a + dynamically-linked executable from running further commands itself. + + In the following example, user aaaarroonn may run _/_u_s_r_/_b_i_n_/_m_o_r_e and + _/_u_s_r_/_b_i_n_/_v_i but shell escapes will be disabled. + + aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi + + See the _P_r_e_v_e_n_t_i_n_g _s_h_e_l_l _e_s_c_a_p_e_s section below for more details on how + NOEXEC works and whether or not it will work on your system. + + _F_O_L_L_O_W and _N_O_F_O_L_L_O_W Starting with version 1.8.15, ssuuddooeeddiitt will not open + a file that is a symbolic link unless the _s_u_d_o_e_d_i_t___f_o_l_l_o_w option is + enabled. The _F_O_L_L_O_W and _N_O_F_O_L_L_O_W tags override the value of + _s_u_d_o_e_d_i_t___f_o_l_l_o_w and can be used to permit (or deny) the editing of + symbolic links on a per-command basis. These tags are only effective + for the _s_u_d_o_e_d_i_t command and are ignored for all other commands. - _N_O_P_A_S_S_W_D and _P_A_S_S_W_D + _L_O_G___I_N_P_U_T and _N_O_L_O_G___I_N_P_U_T + + These tags override the value of the _l_o_g___i_n_p_u_t option on a per-command + basis. For more information, see the description of _l_o_g___i_n_p_u_t in the + _S_U_D_O_E_R_S _O_P_T_I_O_N_S section below. + + _L_O_G___O_U_T_P_U_T and _N_O_L_O_G___O_U_T_P_U_T + + These tags override the value of the _l_o_g___o_u_t_p_u_t option on a per-command + basis. For more information, see the description of _l_o_g___o_u_t_p_u_t in the + _S_U_D_O_E_R_S _O_P_T_I_O_N_S section below. + + _M_A_I_L and _N_O_M_A_I_L + + These tags provide fine-grained control over whether mail will be sent + when a user runs a command by overriding the value of the + _m_a_i_l___a_l_l___c_m_n_d_s option on a per-command basis. They have no effect when + ssuuddoo is run with the --ll or --vv options. A _N_O_M_A_I_L tag will also override + the _m_a_i_l___a_l_w_a_y_s and _m_a_i_l___n_o___p_e_r_m_s options. For more information, see + the descriptions of _m_a_i_l___a_l_l___c_m_n_d_s, _m_a_i_l___a_l_w_a_y_s, and _m_a_i_l___n_o___p_e_r_m_s in + the _S_U_D_O_E_R_S _O_P_T_I_O_N_S section below. + + _P_A_S_S_W_D and _N_O_P_A_S_S_W_D By default, ssuuddoo requires that a user authenticate him or herself before running a command. This behavior can be modified via the @@ -610,20 +670,6 @@ entries that pertain to the current host. This behavior may be overridden via the _v_e_r_i_f_y_p_w and _l_i_s_t_p_w options. - _N_O_E_X_E_C and _E_X_E_C - - If ssuuddoo has been compiled with _n_o_e_x_e_c support and the underlying - operating system supports it, the NOEXEC tag can be used to prevent a - dynamically-linked executable from running further commands itself. - - In the following example, user aaaarroonn may run _/_u_s_r_/_b_i_n_/_m_o_r_e and - _/_u_s_r_/_b_i_n_/_v_i but shell escapes will be disabled. - - aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi - - See the _P_r_e_v_e_n_t_i_n_g _s_h_e_l_l _e_s_c_a_p_e_s section below for more details on how - NOEXEC works and whether or not it will work on your system. - _S_E_T_E_N_V and _N_O_S_E_T_E_N_V These tags override the value of the _s_e_t_e_n_v option on a per-command @@ -636,59 +682,51 @@ tag is implied for that command; this default may be overridden by use of the NOSETENV tag. - _L_O_G___I_N_P_U_T and _N_O_L_O_G___I_N_P_U_T - - These tags override the value of the _l_o_g___i_n_p_u_t option on a per-command - basis. For more information, see the description of _l_o_g___i_n_p_u_t in the - _S_U_D_O_E_R_S _O_P_T_I_O_N_S section below. - - _L_O_G___O_U_T_P_U_T and _N_O_L_O_G___O_U_T_P_U_T - - These tags override the value of the _l_o_g___o_u_t_p_u_t option on a per-command - basis. For more information, see the description of _l_o_g___o_u_t_p_u_t in the - _S_U_D_O_E_R_S _O_P_T_I_O_N_S section below. - WWiillddccaarrddss ssuuddoo allows shell-style _w_i_l_d_c_a_r_d_s (aka meta or glob characters) to be used in host names, path names and command line arguments in the _s_u_d_o_e_r_s file. Wildcard matching is done via the glob(3) and fnmatch(3) functions - as specified by IEEE Std 1003.1 (``POSIX.1''). Note that these are _n_o_t - regular expressions. + as specified by IEEE Std 1003.1 (``POSIX.1''). - * Matches any set of zero or more characters. + * Matches any set of zero or more characters (including white + space). - ? Matches any single character. + ? Matches any single character (including white space). [...] Matches any character in the specified range. - [!...] Matches any character nnoott in the specified range. + [!...] Matches any character _n_o_t in the specified range. \x For any character `x', evaluates to `x'. This is used to escape special characters such as: `*', `?', `[', and `]'. - Character classes may also be used if your system's glob(3) and - fnmatch(3) functions support them. However, because the `:' character - has special meaning in _s_u_d_o_e_r_s, it must be escaped. For example: + NNoottee tthhaatt tthheessee aarree nnoott rreegguullaarr eexxpprreessssiioonnss.. Unlike a regular expression + there is no way to match one or more characters within a range. + + Character classes may be used if your system's glob(3) and fnmatch(3) + functions support them. However, because the `:' character has special + meaning in _s_u_d_o_e_r_s, it must be escaped. For example: - /bin/ls [[:alpha:]]* + /bin/ls [[\:alpha\:]]* Would match any file name beginning with a letter. - Note that a forward slash (`/') will nnoott be matched by wildcards used in - the path name. This is to make a path like: + Note that a forward slash (`/') will _n_o_t be matched by wildcards used in + the file name portion of the command. This is to make a path like: /usr/bin/* match _/_u_s_r_/_b_i_n_/_w_h_o but not _/_u_s_r_/_b_i_n_/_X_1_1_/_x_t_e_r_m. - When matching the command line arguments, however, a slash ddooeess get + When matching the command line arguments, however, a slash _d_o_e_s get matched by wildcards since command line arguments may contain arbitrary strings and not just path names. - Wildcards in command line arguments should be used with care. Because - command line arguments are matched as a single, concatenated string, a - wildcard such as `?' or `*' can match multiple words. For example, while - a sudoers entry like: + WWiillddccaarrddss iinn ccoommmmaanndd lliinnee aarrgguummeennttss sshhoouulldd bbee uusseedd wwiitthh ccaarree.. + Command line arguments are matched as a single, concatenated string. + This mean a wildcard character such as `?' or `*' will match across word + boundaries, which may be unexpected. For example, while a sudoers entry + like: %operator ALL = /bin/cat /var/log/messages* @@ -700,14 +738,16 @@ $ sudo cat /var/log/messages /etc/shadow - which is probably not what was intended. + which is probably not what was intended. In most cases it is better to + do command line processing outside of the _s_u_d_o_e_r_s file in a scripting + language. EExxcceeppttiioonnss ttoo wwiillddccaarrdd rruulleess The following exceptions apply to the above rules: "" If the empty string "" is the only command line argument in the - _s_u_d_o_e_r_s entry it means that command is not allowed to be run - with aannyy arguments. + _s_u_d_o_e_r_s file entry it means that command is not allowed to be + run with _a_n_y arguments. sudoedit Command line arguments to the _s_u_d_o_e_d_i_t built-in command should always be path names, so a forward slash (`/') will not be @@ -720,8 +760,8 @@ This can be used, for example, to keep a site-wide _s_u_d_o_e_r_s file in addition to a local, per-machine file. For the sake of this example the - site-wide _s_u_d_o_e_r_s will be _/_e_t_c_/_s_u_d_o_e_r_s and the per-machine one will be - _/_e_t_c_/_s_u_d_o_e_r_s_._l_o_c_a_l. To include _/_e_t_c_/_s_u_d_o_e_r_s_._l_o_c_a_l from within + site-wide _s_u_d_o_e_r_s file will be _/_e_t_c_/_s_u_d_o_e_r_s and the per-machine one will + be _/_e_t_c_/_s_u_d_o_e_r_s_._l_o_c_a_l. To include _/_e_t_c_/_s_u_d_o_e_r_s_._l_o_c_a_l from within _/_e_t_c_/_s_u_d_o_e_r_s we would use the following line in _/_e_t_c_/_s_u_d_o_e_r_s: #include /etc/sudoers.local @@ -749,8 +789,8 @@ will cause ssuuddoo to include the file _/_e_t_c_/_s_u_d_o_e_r_s_._x_e_r_x_e_s. The #includedir directive can be used to create a _s_u_d_o_e_r_s_._d directory - that the system package manager can drop _s_u_d_o_e_r_s rules into as part of - package installation. For example, given: + that the system package manager can drop _s_u_d_o_e_r_s file rules into as part + of package installation. For example, given: #includedir /etc/sudoers.d @@ -759,14 +799,15 @@ manager or editor temporary/backup files. Files are parsed in sorted lexical order. That is, _/_e_t_c_/_s_u_d_o_e_r_s_._d_/_0_1___f_i_r_s_t will be parsed before _/_e_t_c_/_s_u_d_o_e_r_s_._d_/_1_0___s_e_c_o_n_d. Be aware that because the sorting is lexical, - not numeric, _/_e_t_c_/_s_u_d_o_e_r_s_._d_/_1___w_h_o_o_p_s would be loaded aafftteerr + not numeric, _/_e_t_c_/_s_u_d_o_e_r_s_._d_/_1___w_h_o_o_p_s would be loaded _a_f_t_e_r _/_e_t_c_/_s_u_d_o_e_r_s_._d_/_1_0___s_e_c_o_n_d. Using a consistent number of leading zeroes in the file names can be used to avoid such problems. Note that unlike files included via #include, vviissuuddoo will not edit the files in a #includedir directory unless one of them contains a syntax error. It is still possible to run vviissuuddoo with the --ff flag to edit the - files directly. + files directly, but this will not catch the redefinition of an _a_l_i_a_s that + is also present in a different file. OOtthheerr ssppeecciiaall cchhaarraacctteerrss aanndd rreesseerrvveedd wwoorrddss The pound sign (`#') is used to indicate a comment (unless it is part of @@ -780,7 +821,7 @@ User_Alias, Runas_Alias, or Host_Alias. You should not try to define your own _a_l_i_a_s called AALLLL as the built-in alias will be used in preference to your own. Please note that using AALLLL can be dangerous - since in a command context, it allows the user to run aannyy command on the + since in a command context, it allows the user to run _a_n_y command on the system. An exclamation point (`!') can be used as a logical _n_o_t operator in a @@ -819,12 +860,20 @@ BBoooolleeaann FFllaaggss: + always_query_group_plugin + If a _g_r_o_u_p___p_l_u_g_i_n is configured, use it to resolve + groups of the form %group as long as there is not also + a system group of the same name. Normally, only groups + of the form %:group are passed to the _g_r_o_u_p___p_l_u_g_i_n. + This flag is _o_f_f by default. + always_set_home If enabled, ssuuddoo will set the HOME environment variable to the home directory of the target user (which is root unless the --uu option is used). This effectively means - that the --HH option is always implied. Note that HOME - is already set when the _e_n_v___r_e_s_e_t option is enabled, so - _a_l_w_a_y_s___s_e_t___h_o_m_e is only effective for configurations + that the --HH option is always implied. Note that by + default, HOME will be set to the home directory of the + target user when the _e_n_v___r_e_s_e_t option is enabled, so + _a_l_w_a_y_s___s_e_t___h_o_m_e only has an effect for configurations where either _e_n_v___r_e_s_e_t is disabled or HOME is present in the _e_n_v___k_e_e_p list. This flag is _o_f_f by default. @@ -845,13 +894,6 @@ This flag is _o_n by default when ssuuddoo is compiled with zzlliibb support. - use_netgroups If set, netgroups (prefixed with `+'), may be used in - place of a user or host. For LDAP-based sudoers, - netgroup support requires an expensive substring match - on the server. If netgroups are not needed, this - option can be disabled to reduce the load on the LDAP - server. This flag is _o_n by default. - exec_background By default, ssuuddoo runs a command as the foreground process as long as ssuuddoo itself is running in the foreground. When the _e_x_e_c___b_a_c_k_g_r_o_u_n_d flag is enabled @@ -908,12 +950,12 @@ Any variables in the caller's environment that match the env_keep and env_check lists are then added, followed by any variables present in the file specified - by the _e_n_v___f_i_l_e option (if any). The default contents - of the env_keep and env_check lists are displayed when - ssuuddoo is run by root with the --VV option. If the - _s_e_c_u_r_e___p_a_t_h option is set, its value will be used for - the PATH environment variable. This flag is _o_n by - default. + by the _e_n_v___f_i_l_e option (if any). The contents of the + env_keep and env_check lists, as modified by global + Defaults parameters in _s_u_d_o_e_r_s, are displayed when ssuuddoo + is run by root with the --VV option. If the _s_e_c_u_r_e___p_a_t_h + option is set, its value will be used for the PATH + environment variable. This flag is _o_n by default. fast_glob Normally, ssuuddoo uses the glob(3) function to do shell- style globbing when matching path names. However, @@ -929,9 +971,9 @@ names that include globbing characters are used with the negation operator, `!', as such rules can be trivially bypassed. As such, this option should not be - used when _s_u_d_o_e_r_s contains rules that contain negated - path names which include globbing characters. This - flag is _o_f_f by default. + used when the _s_u_d_o_e_r_s file contains rules that contain + negated path names which include globbing characters. + This flag is _o_f_f by default. fqdn Set this flag if you want to put fully qualified host names in the _s_u_d_o_e_r_s file when the local host name (as @@ -1001,44 +1043,18 @@ log_host If set, the host name will be logged in the (non- syslog) ssuuddoo log file. This flag is _o_f_f by default. - log_input If set, ssuuddoo will run the command in a _p_s_e_u_d_o _t_t_y and + log_input If set, ssuuddoo will run the command in a pseudo-tty and log all user input. If the standard input is not connected to the user's tty, due to I/O redirection or because the command is part of a pipeline, that input is also captured and stored in a separate log file. + For more information, see the _I_/_O _L_O_G _F_I_L_E_S section. This flag is _o_f_f by default. - Input is logged to the directory specified by the - _i_o_l_o_g___d_i_r option (_/_v_a_r_/_l_o_g_/_s_u_d_o_-_i_o by default) using a - unique session ID that is included in the normal ssuuddoo - log line, prefixed with ``TSID=''. The _i_o_l_o_g___f_i_l_e - option may be used to control the format of the session - ID. - - Note that user input may contain sensitive information - such as passwords (even if they are not echoed to the - screen), which will be stored in the log file - unencrypted. In most cases, logging the command output - via _l_o_g___o_u_t_p_u_t is all that is required. - - log_output If set, ssuuddoo will run the command in a _p_s_e_u_d_o _t_t_y and + log_output If set, ssuuddoo will run the command in a pseudo-tty and log all output that is sent to the screen, similar to - the script(1) command. If the standard output or - standard error is not connected to the user's tty, due - to I/O redirection or because the command is part of a - pipeline, that output is also captured and stored in - separate log files. This flag is _o_f_f by default. - - Output is logged to the directory specified by the - _i_o_l_o_g___d_i_r option (_/_v_a_r_/_l_o_g_/_s_u_d_o_-_i_o by default) using a - unique session ID that is included in the normal ssuuddoo - log line, prefixed with ``TSID=''. The _i_o_l_o_g___f_i_l_e - option may be used to control the format of the session - ID. - - Output logs may be viewed with the sudoreplay(1m) - utility, which can also be used to list or search the - available logs. + the script(1) command. For more information, see the + _I_/_O _L_O_G _F_I_L_E_S section. This flag is _o_f_f by default. log_year If set, the four-digit year will be logged in the (non- syslog) ssuuddoo log file. This flag is _o_f_f by default. @@ -1050,19 +1066,23 @@ some people find it more convenient. This flag is _o_f_f by default. - mail_always Send mail to the _m_a_i_l_t_o user every time a user attempts - to run a command via ssuuddoo. Mail will be sent for both - successful and unsuccessful attempts. No mail will be - sent if the user runs ssuuddoo with the --ll or --vv option - unless there is an authentication error. This flag is - _o_f_f by default. + mail_all_cmnds Send mail to the _m_a_i_l_t_o user every time a user attempts + to run a command via ssuuddoo (this includes ssuuddooeeddiitt). No + mail will be sent if the user runs ssuuddoo with the --ll or + --vv option unless there is an authentication error and + the _m_a_i_l___b_a_d_p_a_s_s flag is also set. This flag is _o_f_f by + default. + + mail_always Send mail to the _m_a_i_l_t_o user every time a user runs + ssuuddoo. This flag is _o_f_f by default. mail_badpass Send mail to the _m_a_i_l_t_o user if the user running ssuuddoo does not enter the correct password. If the command the user is attempting to run is not permitted by - _s_u_d_o_e_r_s and one of the _m_a_i_l___a_l_w_a_y_s, _m_a_i_l___n_o___h_o_s_t, - _m_a_i_l___n_o___p_e_r_m_s or _m_a_i_l___n_o___u_s_e_r flags are set, this flag - will have no effect. This flag is _o_f_f by default. + ssuuddooeerrss and one of the _m_a_i_l___a_l_l___c_m_n_d_s, _m_a_i_l___a_l_w_a_y_s, + _m_a_i_l___n_o___h_o_s_t, _m_a_i_l___n_o___p_e_r_m_s or _m_a_i_l___n_o___u_s_e_r flags are + set, this flag will have no effect. This flag is _o_f_f + by default. mail_no_host If set, mail will be sent to the _m_a_i_l_t_o user if the invoking user exists in the _s_u_d_o_e_r_s file, but is not @@ -1079,9 +1099,16 @@ invoking user is not in the _s_u_d_o_e_r_s file. This flag is _o_n by default. + netgroup_tuple If set, netgroup lookups will be performed using the + full netgroup tuple: host name, user name and domain + (if one is set). Historically, ssuuddoo only matched the + user name and domain for netgroups used in a User_List + and only matched the host name and domain for netgroups + used in a Host_List. This flag is _o_f_f by default. + noexec If set, all commands run via ssuuddoo will behave as if the NOEXEC tag has been set, unless overridden by an EXEC - tag. See the description of _N_O_E_X_E_C _a_n_d _E_X_E_C below as + tag. See the description of _E_X_E_C _a_n_d _N_O_E_X_E_C above as well as the _P_r_e_v_e_n_t_i_n_g _s_h_e_l_l _e_s_c_a_p_e_s section at the end of this manual. This flag is _o_f_f by default. @@ -1190,9 +1217,10 @@ system) use LOGNAME to determine the real identity of the user, it may be desirable to change this behavior. This can be done by negating the set_logname option. - Note that if the _e_n_v___r_e_s_e_t option has not been - disabled, entries in the _e_n_v___k_e_e_p list will override - the value of _s_e_t___l_o_g_n_a_m_e. This flag is _o_n by default. + Note that _s_e_t___l_o_g_n_a_m_e will have no effect if the + _e_n_v___r_e_s_e_t option has not been disabled and the _e_n_v___k_e_e_p + list contains LOGNAME, USER or USERNAME. This flag is + _o_n by default. set_utmp When enabled, ssuuddoo will create an entry in the utmp (or utmpx) file when a pseudo-tty is allocated. A pseudo- @@ -1228,6 +1256,32 @@ that support either the setreuid(2) or setresuid(2) system call. This flag is _o_f_f by default. + sudoedit_checkdir + If set, ssuuddooeeddiitt will check all directory components of + the path to be edited for writability by the invoking + user. Symbolic links will not be followed in writable + directories and ssuuddooeeddiitt will refuse to edit a file + located in a writable directory. These restrictions + are not enforced when ssuuddooeeddiitt is run by root. On some + systems, if all directory components of the path to be + edited are not readable by the target user, ssuuddooeeddiitt + will be unable to edit the file. This flag is _o_n by + default. + + This setting was first introduced in version 1.8.15 but + initially suffered from a race condition. The check + for symbolic links in writable intermediate directories + was added in version 1.8.16. + + sudoedit_follow By default, ssuuddooeeddiitt will not follow symbolic links + when opening files. The _s_u_d_o_e_d_i_t___f_o_l_l_o_w option can be + enabled to allow ssuuddooeeddiitt to open symbolic links. It + may be overridden on a per-command basis by the _F_O_L_L_O_W + and _N_O_F_O_L_L_O_W tags. This flag is _o_f_f by default. + + This setting is only supported by version 1.8.15 or + higher. + targetpw If set, ssuuddoo will prompt for the password of the user specified by the --uu option (defaults to root) instead of the password of the invoking user when running a @@ -1242,19 +1296,28 @@ single record is used for all login sessions. This flag is _o_n by default. - umask_override If set, ssuuddoo will set the umask as specified by _s_u_d_o_e_r_s - without modification. This makes it possible to - specify a more permissive umask in _s_u_d_o_e_r_s than the - user's own umask and matches historical behavior. If - _u_m_a_s_k___o_v_e_r_r_i_d_e is not set, ssuuddoo will set the umask to - be the union of the user's umask and what is specified - in _s_u_d_o_e_r_s. This flag is _o_f_f by default. + umask_override If set, ssuuddoo will set the umask as specified in the + _s_u_d_o_e_r_s file without modification. This makes it + possible to specify a umask in the _s_u_d_o_e_r_s file that is + more permissive than the user's own umask and matches + historical behavior. If _u_m_a_s_k___o_v_e_r_r_i_d_e is not set, + ssuuddoo will set the umask to be the union of the user's + umask and what is specified in _s_u_d_o_e_r_s. This flag is + _o_f_f by default. use_loginclass If set, ssuuddoo will apply the defaults specified for the target user's login class if one exists. Only available if ssuuddoo is configured with the --with-logincap option. This flag is _o_f_f by default. + use_netgroups If set, netgroups (prefixed with `+'), may be used in + place of a user or host. For LDAP-based sudoers, + netgroup support requires an expensive substring match + on the server unless the NNEETTGGRROOUUPP__BBAASSEE directive is + present in the _/_e_t_c_/_l_d_a_p_._c_o_n_f file. If netgroups are + not needed, this option can be disabled to reduce the + load on the LDAP server. This flag is _o_n by default. + use_pty If set, ssuuddoo will run the command in a pseudo-pty even if no I/O logging is being gone. A malicious program run under ssuuddoo could conceivably fork a background @@ -1286,6 +1349,24 @@ file descriptor at which to start closing. The default is 3. + maxseq The maximum sequence number that will be substituted + for the ``%{seq}'' escape in the I/O log file (see the + _i_o_l_o_g___d_i_r description above for more information). + While the value substituted for ``%{seq}'' is in base + 36, _m_a_x_s_e_q itself should be expressed in decimal. + Values larger than 2176782336 (which corresponds to the + base 36 sequence number ``ZZZZZZ'') will be silently + truncated to 2176782336. The default value is + 2176782336. + + Once the local sequence number reaches the value of + _m_a_x_s_e_q, it will ``roll over'' to zero, after which + ssuuddooeerrss will truncate and re-use any existing I/O log + path names. + + This setting is only supported by version 1.8.7 or + higher. + passwd_tries The number of tries a user gets to enter his/her password before ssuuddoo logs the failure and exits. The default is 3. @@ -1421,24 +1502,6 @@ escape %h will expand to the host name of the machine. Default is ``*** SECURITY information for %h ***''. - maxseq The maximum sequence number that will be substituted - for the ``%{seq}'' escape in the I/O log file (see the - _i_o_l_o_g___d_i_r description above for more information). - While the value substituted for ``%{seq}'' is in base - 36, _m_a_x_s_e_q itself should be expressed in decimal. - Values larger than 2176782336 (which corresponds to the - base 36 sequence number ``ZZZZZZ'') will be silently - truncated to 2176782336. The default value is - 2176782336. - - Once the local sequence number reaches the value of - _m_a_x_s_e_q, it will ``roll over'' to zero, after which - ssuuddooeerrss will truncate and re-use any existing I/O log - path names. - - This setting is only supported by version 1.8.7 or - higher. - noexec_file As of ssuuddoo version 1.8.1 this option is no longer supported. The path to the noexec file should now be set in the sudo.conf(4) file. @@ -1499,8 +1562,8 @@ role The default SELinux role to use when constructing a new security context to run the command. The default role - may be overridden on a per-command basis in _s_u_d_o_e_r_s or - via command line options. This option is only + may be overridden on a per-command basis in the _s_u_d_o_e_r_s + file or via command line options. This option is only available when ssuuddoo is built with SELinux support. runas_default The default user to run commands as if the --uu option is @@ -1534,8 +1597,8 @@ type The default SELinux type to use when constructing a new security context to run the command. The default type - may be overridden on a per-command basis in _s_u_d_o_e_r_s or - via command line options. This option is only + may be overridden on a per-command basis in the _s_u_d_o_e_r_s + file or via command line options. This option is only available when ssuuddoo is built with SELinux support. SSttrriinnggss tthhaatt ccaann bbee uusseedd iinn aa bboooolleeaann ccoonntteexxtt: @@ -1553,7 +1616,7 @@ requirements. The group name specified should not include a % prefix. This is not set by default. - group_plugin A string containing a _s_u_d_o_e_r_s group plugin with optional + group_plugin A string containing a ssuuddooeerrss group plugin with optional arguments. The string should consist of the plugin path, either fully-qualified or relative to the _/_u_s_r_/_l_o_c_a_l_/_l_i_b_e_x_e_c_/_s_u_d_o directory, followed by any @@ -1586,16 +1649,16 @@ a user runs ssuuddoo with the --ll option. It has the following possible values: - all All the user's _s_u_d_o_e_r_s entries for the current - host must have the NOPASSWD flag set to avoid - entering a password. + all All the user's _s_u_d_o_e_r_s file entries for the + current host must have the NOPASSWD flag set to + avoid entering a password. always The user must always enter a password to use the --ll option. - any At least one of the user's _s_u_d_o_e_r_s entries for - the current host must have the NOPASSWD flag set - to avoid entering a password. + any At least one of the user's _s_u_d_o_e_r_s file entries + for the current host must have the NOPASSWD flag + set to avoid entering a password. never The user need never enter a password to use the --ll option. @@ -1641,15 +1704,15 @@ a user runs ssuuddoo with the --vv option. It has the following possible values: - all All the user's _s_u_d_o_e_r_s entries for the current host - must have the NOPASSWD flag set to avoid entering a - password. + all All the user's _s_u_d_o_e_r_s file entries for the current + host must have the NOPASSWD flag set to avoid + entering a password. always The user must always enter a password to use the --vv option. - any At least one of the user's _s_u_d_o_e_r_s entries for the - current host must have the NOPASSWD flag set to + any At least one of the user's _s_u_d_o_e_r_s file entries for + the current host must have the NOPASSWD flag set to avoid entering a password. never The user need never enter a password to use the --vv @@ -1662,17 +1725,17 @@ LLiissttss tthhaatt ccaann bbee uusseedd iinn aa bboooolleeaann ccoonntteexxtt: env_check Environment variables to be removed from the user's - environment if unless they are considered ``safe''. - For all variables except TZ, ``safe'' means that the + environment unless they are considered ``safe''. For + all variables except TZ, ``safe'' means that the variable's value does not contain any `%' or `/' characters. This can be used to guard against printf- style format vulnerabilities in poorly-written programs. The TZ variable is considered unsafe if any of the following are true: - ++oo It consists of a fully-qualified path name that - does not match the location of the _z_o_n_e_i_n_f_o - directory. + ++oo It consists of a fully-qualified path name, + optionally prefixed with a colon (`:'), that does + not match the location of the _z_o_n_e_i_n_f_o directory. ++oo It contains a _._. path element. @@ -1688,7 +1751,7 @@ Regardless of whether the env_reset option is enabled or disabled, variables specified by env_check will be preserved in the environment if they pass the - aforementioned check. The default list of environment + aforementioned check. The global list of environment variables to check is displayed when ssuuddoo is run by root with the --VV option. @@ -1698,7 +1761,7 @@ list or a single value without double-quotes. The list can be replaced, added to, deleted from, or disabled by using the =, +=, -=, and ! operators respectively. The - default list of environment variables to remove is + global list of environment variables to remove is displayed when ssuuddoo is run by root with the --VV option. Note that many operating systems will remove potentially dangerous variables from the environment of @@ -1711,7 +1774,7 @@ be a double-quoted, space-separated list or a single value without double-quotes. The list can be replaced, added to, deleted from, or disabled by using the =, +=, - -=, and ! operators respectively. The default list of + -=, and ! operators respectively. The global list of variables to keep is displayed when ssuuddoo is run by root with the --VV option. @@ -1751,8 +1814,8 @@ The group provider plugin API is described in detail in sudo_plugin(1m). LLOOGG FFOORRMMAATT - ssuuddooeerrss can log events using either syslog(3) or a simple log file. In - each case the log format is almost identical. + ssuuddooeerrss can log events using either syslog(3) or a simple log file. The + log format is almost identical in both cases. AAcccceepptteedd ccoommmmaanndd lloogg eennttrriieess Commands that sudo runs are logged using the following format (split into @@ -1849,8 +1912,8 @@ unable to open/read /etc/sudoers The _s_u_d_o_e_r_s file could not be opened for reading. This can happen when the _s_u_d_o_e_r_s file is located on a remote file system that maps - user ID 0 to a different value. Normally, ssuuddooeerrss tries to open - _s_u_d_o_e_r_s using group permissions to avoid this problem. Consider + user ID 0 to a different value. Normally, ssuuddooeerrss tries to open the + _s_u_d_o_e_r_s file using group permissions to avoid this problem. Consider either changing the ownership of _/_e_t_c_/_s_u_d_o_e_r_s or adding an argument like ``sudoers_uid=N'' (where `N' is the user ID that owns the _s_u_d_o_e_r_s file) to the end of the ssuuddooeerrss Plugin line in the sudo.conf(4) file. @@ -1882,29 +1945,29 @@ line in the sudo.conf(4) file. unable to open /var/run/sudo/ts/username - _s_u_d_o_e_r_s was unable to read or create the user's time stamp file. This + ssuuddooeerrss was unable to read or create the user's time stamp file. This can happen when _t_i_m_e_s_t_a_m_p_o_w_n_e_r is set to a user other than root and the mode on _/_v_a_r_/_r_u_n_/_s_u_d_o is not searchable by group or other. The default mode for _/_v_a_r_/_r_u_n_/_s_u_d_o is 0711. unable to write to /var/run/sudo/ts/username - _s_u_d_o_e_r_s was unable to write to the user's time stamp file. + ssuuddooeerrss was unable to write to the user's time stamp file. /var/run/sudo/ts is owned by uid X, should be Y The time stamp directory is owned by a user other than _t_i_m_e_s_t_a_m_p_o_w_n_e_r. This can occur when the value of _t_i_m_e_s_t_a_m_p_o_w_n_e_r has been changed. - _s_u_d_o_e_r_s will ignore the time stamp directory until the owner is + ssuuddooeerrss will ignore the time stamp directory until the owner is corrected. /var/run/sudo/ts is group writable The time stamp directory is group-writable; it should be writable only by _t_i_m_e_s_t_a_m_p_o_w_n_e_r. The default mode for the time stamp directory is - 0700. _s_u_d_o_e_r_s will ignore the time stamp directory until the mode is + 0700. ssuuddooeerrss will ignore the time stamp directory until the mode is corrected. NNootteess oonn llooggggiinngg vviiaa ssyysslloogg - By default, _s_u_d_o_e_r_s logs messages via syslog(3). The _d_a_t_e, _h_o_s_t_n_a_m_e, and - _p_r_o_g_n_a_m_e fields are added by the syslog daemon, not _s_u_d_o_e_r_s itself. As + By default, ssuuddooeerrss logs messages via syslog(3). The _d_a_t_e, _h_o_s_t_n_a_m_e, and + _p_r_o_g_n_a_m_e fields are added by the syslog daemon, not ssuuddooeerrss itself. As such, they may vary in format on different systems. On most systems, syslog(3) has a relatively small log buffer. To prevent @@ -1915,8 +1978,8 @@ and before the continued command line arguments. NNootteess oonn llooggggiinngg ttoo aa ffiillee - If the _l_o_g_f_i_l_e option is set, _s_u_d_o_e_r_s will log to a local file, such as - _/_v_a_r_/_l_o_g_/_s_u_d_o. When logging to a file, _s_u_d_o_e_r_s uses a format similar to + If the _l_o_g_f_i_l_e option is set, ssuuddooeerrss will log to a local file, such as + _/_v_a_r_/_l_o_g_/_s_u_d_o. When logging to a file, ssuuddooeerrss uses a format similar to syslog(3), with a few important differences: 1. The _p_r_o_g_n_a_m_e and _h_o_s_t_n_a_m_e fields are not present. @@ -1931,6 +1994,56 @@ _l_o_g_l_i_n_e_l_e_n option is set to 0 (or negated with a `!'), word wrap will be disabled. +II//OO LLOOGG FFIILLEESS + When I/O logging is enabled, ssuuddoo will run the command in a pseudo-tty + and log all user input and/or output. I/O is logged to the directory + specified by the _i_o_l_o_g___d_i_r option (_/_v_a_r_/_l_o_g_/_s_u_d_o_-_i_o by default) using a + unique session ID that is included in the ssuuddoo log line, prefixed with + ``TSID=''. The _i_o_l_o_g___f_i_l_e option may be used to control the format of + the session ID. + + Each I/O log is stored in a separate directory that contains the + following files: + + _l_o_g a text file containing the time the command was run, the name + of the user who ran ssuuddoo, the name of the target user, the name + of the target group (optional), the terminal that ssuuddoo was run + from, the number of rows and columns of the terminal, the + working directory the command was run from and the path name of + the command itself (with arguments if present) + + _t_i_m_i_n_g a log of the amount of time between, and the number of bytes + in, each I/O log entry (used for session playback) + + _t_t_y_i_n input from the user's tty (what the user types) + + _s_t_d_i_n input from a pipe or file + + _t_t_y_o_u_t output from the pseudo-tty (what the command writes to the + screen) + + _s_t_d_o_u_t standard output to a pipe or redirected to a file + + _s_t_d_e_r_r standard error to a pipe or redirected to a file + + All files other than _l_o_g are compressed in gzip format unless the + _c_o_m_p_r_e_s_s___i_o option has been disabled. Due to buffering, the I/O log data + will not be complete until the ssuuddoo command has completed. The output + portion of an I/O log file can be viewed with the sudoreplay(1m) utility, + which can also be used to list or search the available logs. + + Note that user input may contain sensitive information such as passwords + (even if they are not echoed to the screen), which will be stored in the + log file unencrypted. In most cases, logging the command output via + _l_o_g___o_u_t_p_u_t or LOG_OUTPUT is all that is required. + + Since each session's I/O logs are stored in a separate directory, + traditional log rotation utilities cannot be used to limit the number of + I/O logs. The simplest way to limit the number of I/O is by setting the + _m_a_x_s_e_q option to the maximum number of logs you wish to store. Once the + I/O log sequence number reaches _m_a_x_s_e_q, it will be reset to zero and + ssuuddooeerrss will truncate and re-use any existing I/O logs. + FFIILLEESS _/_e_t_c_/_s_u_d_o_._c_o_n_f Sudo front end configuration @@ -1943,18 +2056,18 @@ _/_v_a_r_/_l_o_g_/_s_u_d_o_-_i_o I/O log files _/_v_a_r_/_r_u_n_/_s_u_d_o_/_t_s Directory containing time stamps for the - _s_u_d_o_e_r_s security policy + ssuuddooeerrss security policy _/_v_a_r_/_a_d_m_/_s_u_d_o_/_l_e_c_t_u_r_e_d Directory containing lecture status files for - the _s_u_d_o_e_r_s security policy + the ssuuddooeerrss security policy _/_e_t_c_/_e_n_v_i_r_o_n_m_e_n_t Initial environment for --ii mode on AIX and Linux systems EEXXAAMMPPLLEESS - Below are example _s_u_d_o_e_r_s entries. Admittedly, some of these are a bit - contrived. First, we allow a few environment variables to pass and then - define our _a_l_i_a_s_e_s: + Below are example _s_u_d_o_e_r_s file entries. Admittedly, some of these are a + bit contrived. First, we allow a few environment variables to pass and + then define our _a_l_i_a_s_e_s: # Run X applications through sudo; HOME is used to find the # .Xauthority file. Note that other programs use HOME to find @@ -2074,8 +2187,16 @@ with any group in the _A_D_M_I_N_G_R_P Runas_Alias (the aaddmm and ooppeerr groups). The user ppeettee is allowed to change anyone's password except for root on - the _H_P_P_A machines. Note that this assumes passwd(1) does not take - multiple user names on the command line. + the _H_P_P_A machines. Because command line arguments are matched as a + single, concatenated string, the `*' wildcard will match _m_u_l_t_i_p_l_e words. + This example assumes that passwd(1) does not take multiple user names on + the command line. Note that on GNU systems, options to passwd(1) may be + specified after the user argument. As a result, this rule will also + allow: + + passwd username --expire + + which may not be desirable. bob SPARC = (OP) ALL : SGI = (OP) ALL @@ -2133,7 +2254,7 @@ simply su(1) to www. ALL CDROM = NOPASSWD: /sbin/umount /CDROM,\ - /sbin/mount -o nosuid,nodev /dev/cd0a /CDROM + /sbin/mount -o nosuid\,nodev /dev/cd0a /CDROM Any user may mount or unmount a CD-ROM on the machines in the CDROM Host_Alias (orion, perseus, hercules) without entering a password. This @@ -2168,7 +2289,7 @@ that grant privileges, it can result in a security issue for rules that subtract or revoke privileges. - For example, given the following _s_u_d_o_e_r_s entry: + For example, given the following _s_u_d_o_e_r_s file entry: john ALL = /usr/bin/passwd [a-zA-Z0-9]*, /usr/bin/chsh [a-zA-Z0-9]*,\ /usr/bin/chfn [a-zA-Z0-9]*, !/usr/bin/* root @@ -2234,12 +2355,20 @@ give the user permission to run ssuuddooeeddiitt (see below). SSeeccuurree eeddiittiinngg - The _s_u_d_o_e_r_s plugin includes ssuuddooeeddiitt support which allows users to + The ssuuddooeerrss plugin includes ssuuddooeeddiitt support which allows users to securely edit files with the editor of their choice. As ssuuddooeeddiitt is a - built-in command, it must be specified in _s_u_d_o_e_r_s without a leading path. - However, it may take command line arguments just as a normal command - does. For example, to allow user operator to edit the ``message of the - day'' file: + built-in command, it must be specified in the _s_u_d_o_e_r_s file without a + leading path. However, it may take command line arguments just as a + normal command does. Wildcards used in _s_u_d_o_e_d_i_t command line arguments + are expected to be path names, so a forward slash (`/') will not be + matched by a wildcard. + + Unlike other ssuuddoo commands, the editor is run with the permissions of the + invoking user and with the environment unmodified. More information may + be found in the description of the --ee option in sudo(1m). + + For example, to allow user operator to edit the ``message of the day'' + file: operator sudoedit /etc/motd @@ -2251,8 +2380,21 @@ of _/_e_t_c_/_m_o_t_d. After the file has been edited, _/_e_t_c_/_m_o_t_d will be updated with the contents of the temporary copy. + Users should _n_e_v_e_r be granted ssuuddooeeddiitt permission to edit a file that + resides in a directory the user has write access to, either directly or + via a wildcard. If the user has write access to the directory it is + possible to replace the legitimate file with a link to another file, + allowing the editing of arbitrary files. To prevent this, starting with + version 1.8.16, symbolic links will not be followed in writable + directories and ssuuddooeeddiitt will refuse to edit a file located in a writable + directory unless the _s_u_d_o_e_d_i_t___c_h_e_c_k_d_i_r option has been disabled or the + invoking user is root. Additionally, in version 1.8.15 and higher, + ssuuddooeeddiitt will refuse to open a symbolic link unless either the + _s_u_d_o_e_d_i_t___f_o_l_l_o_w option is enabled or the _s_u_d_o_e_d_i_t command is prefixed + with the FOLLOW tag in the _s_u_d_o_e_r_s file. + TTiimmee ssttaammpp ffiillee cchheecckkss - _s_u_d_o_e_r_s will check the ownership of its time stamp directory + ssuuddooeerrss will check the ownership of its time stamp directory (_/_v_a_r_/_r_u_n_/_s_u_d_o_/_t_s by default) and ignore the directory's contents if it is not owned by root or if it is writable by a user other than root. Older versions of ssuuddoo stored time stamp files in _/_t_m_p; this is no longer @@ -2262,33 +2404,33 @@ While the time stamp directory _s_h_o_u_l_d be cleared at reboot time, not all systems contain a _/_v_a_r_/_r_u_n directory. To avoid potential problems, - _s_u_d_o_e_r_s will ignore time stamp files that date from before the machine + ssuuddooeerrss will ignore time stamp files that date from before the machine booted on systems where the boot time is available. Some systems with graphical desktop environments allow unprivileged users - to change the system clock. Since _s_u_d_o_e_r_s relies on the system clock for + to change the system clock. Since ssuuddooeerrss relies on the system clock for time stamp validation, it may be possible on such systems for a user to run ssuuddoo for longer than _t_i_m_e_s_t_a_m_p___t_i_m_e_o_u_t by setting the clock back. To - combat this, _s_u_d_o_e_r_s uses a monotonic clock (which never moves backwards) + combat this, ssuuddooeerrss uses a monotonic clock (which never moves backwards) for its time stamps if the system supports it. - _s_u_d_o_e_r_s will not honor time stamps set far in the future. Time stamps + ssuuddooeerrss will not honor time stamps set far in the future. Time stamps with a date greater than current_time + 2 * TIMEOUT will be ignored and - _s_u_d_o_e_r_s will log and complain. + ssuuddooeerrss will log and complain. Since time stamp files live in the file system, they can outlive a user's login session. As a result, a user may be able to login, run a command with ssuuddoo after authenticating, logout, login again, and run ssuuddoo without authenticating so long as the record's time stamp is within 5 minutes (or - whatever value the timeout is set to in _s_u_d_o_e_r_s). When the _t_t_y___t_i_c_k_e_t_s - option is enabled, the time stamp record includes the device number of - the terminal the user authenticated with. This provides per-tty - granularity but time stamp records still may outlive the user's session. - The time stamp record also includes the session ID of the process that - last authenticated. This prevents processes in different terminal - sessions from using the same time stamp record. It also helps reduce the - chance that a user will be able to run ssuuddoo without entering a password - when logging out and back in again on the same terminal. + whatever value the timeout is set to in the _s_u_d_o_e_r_s file). When the + _t_t_y___t_i_c_k_e_t_s option is enabled, the time stamp record includes the device + number of the terminal the user authenticated with. This provides per- + tty granularity but time stamp records still may outlive the user's + session. The time stamp record also includes the session ID of the + process that last authenticated. This prevents processes in different + terminal sessions from using the same time stamp record. It also helps + reduce the chance that a user will be able to run ssuuddoo without entering a + password when logging out and back in again on the same terminal. DDEEBBUUGGGGIINNGG Versions 1.8.4 and higher of the ssuuddooeerrss plugin support a flexible @@ -2315,7 +2457,7 @@ _a_u_t_h user authentication - _d_e_f_a_u_l_t_s _s_u_d_o_e_r_s _D_e_f_a_u_l_t_s settings + _d_e_f_a_u_l_t_s _s_u_d_o_e_r_s file _D_e_f_a_u_l_t_s settings _e_n_v environment handling @@ -2323,11 +2465,12 @@ _l_o_g_g_i_n_g logging support - _m_a_t_c_h matching of users, groups, hosts and netgroups in _s_u_d_o_e_r_s + _m_a_t_c_h matching of users, groups, hosts and netgroups in the _s_u_d_o_e_r_s + file _n_e_t_i_f network interface handling - _n_s_s network service switch handling in _s_u_d_o_e_r_s + _n_s_s network service switch handling in ssuuddooeerrss _p_a_r_s_e_r _s_u_d_o_e_r_s file parsing @@ -2350,12 +2493,22 @@ SSEEEE AALLSSOO ssh(1), su(1), fnmatch(3), glob(3), mktemp(3), strftime(3), sudo.conf(4), - sudoers.ldap(4), sudo_plugin(1m), sudo(1m), visudo(1m) + sudoers.ldap(4), sudo(1m), sudo_plugin(1m), visudo(1m) + +AAUUTTHHOORRSS + Many people have worked on ssuuddoo over the years; this version consists of + code written primarily by: + + Todd C. Miller + + See the CONTRIBUTORS file in the ssuuddoo distribution + (https://www.sudo.ws/contributors.html) for an exhaustive list of people + who have contributed to ssuuddoo. CCAAVVEEAATTSS The _s_u_d_o_e_r_s file should aallwwaayyss be edited by the vviissuuddoo command which - locks the file and does grammatical checking. It is imperative that - _s_u_d_o_e_r_s be free of syntax errors since ssuuddoo will not run with a + locks the file and does grammatical checking. It is imperative that the + _s_u_d_o_e_r_s file be free of syntax errors since ssuuddoo will not run with a syntactically incorrect _s_u_d_o_e_r_s file. When using netgroups of machines (as opposed to users), if you store @@ -2365,18 +2518,18 @@ BBUUGGSS If you feel you have found a bug in ssuuddoo, please submit a bug report at - http://bugzilla.sudo.ws/ + https://bugzilla.sudo.ws/ SSUUPPPPOORRTT Limited free support is available via the sudo-users mailing list, see - http://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search the - archives. + https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search + the archives. DDIISSCCLLAAIIMMEERR ssuuddoo is provided ``AS IS'' and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the LICENSE - file distributed with ssuuddoo or http://www.sudo.ws/license.html for + file distributed with ssuuddoo or https://www.sudo.ws/license.html for complete details. -Sudo 1.8.12 February 6, 2015 Sudo 1.8.12 +Sudo 1.8.16 January 20, 2016 Sudo 1.8.16 diff -Nru sudo-1.8.12/doc/sudoers.ldap.cat sudo-1.8.16/doc/sudoers.ldap.cat --- sudo-1.8.12/doc/sudoers.ldap.cat 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/doc/sudoers.ldap.cat 2016-03-17 16:13:11.000000000 +0000 @@ -70,13 +70,17 @@ A user name, user ID (prefixed with `#'), Unix group name or ID (prefixed with `%' or `%#' respectively), user netgroup (prefixed with `+'), or non-Unix group name or ID (prefixed with `%:' or - `%:#' respectively). Non-Unix group support is only available when - an appropriate _g_r_o_u_p___p_l_u_g_i_n is defined in the global _d_e_f_a_u_l_t_s - sudoRole object. + `%:#' respectively). User netgroups are matched using the user and + domain members only; the host member is not used when matching. + Non-Unix group support is only available when an appropriate + _g_r_o_u_p___p_l_u_g_i_n is defined in the global _d_e_f_a_u_l_t_s sudoRole object. ssuuddooHHoosstt A host name, IP address, IP network, or host netgroup (prefixed - with a `+'). The special value ALL will match any host. + with a `+'). The special value ALL will match any host. Host + netgroups are matched using the host (both qualified and + unqualified) and domain members only; the user member is not used + when matching. ssuuddooCCoommmmaanndd A fully-qualified Unix command name with optional command line @@ -871,6 +875,16 @@ SSEEEE AALLSSOO ldap.conf(4), sssd-sudo(4), sudo.conf(4), sudoers(1m) +AAUUTTHHOORRSS + Many people have worked on ssuuddoo over the years; this version consists of + code written primarily by: + + Todd C. Miller + + See the CONTRIBUTORS file in the ssuuddoo distribution + (https://www.sudo.ws/contributors.html) for an exhaustive list of people + who have contributed to ssuuddoo. + CCAAVVEEAATTSS Note that there are differences in the way that LDAP-based _s_u_d_o_e_r_s is parsed compared to file-based _s_u_d_o_e_r_s. See the _D_i_f_f_e_r_e_n_c_e_s _b_e_t_w_e_e_n _L_D_A_P @@ -878,18 +892,18 @@ BBUUGGSS If you feel you have found a bug in ssuuddoo, please submit a bug report at - http://bugzilla.sudo.ws/ + https://bugzilla.sudo.ws/ SSUUPPPPOORRTT Limited free support is available via the sudo-users mailing list, see - http://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search the - archives. + https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search + the archives. DDIISSCCLLAAIIMMEERR ssuuddoo is provided ``AS IS'' and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the LICENSE - file distributed with ssuuddoo or http://www.sudo.ws/license.html for + file distributed with ssuuddoo or https://www.sudo.ws/license.html for complete details. -Sudo 1.8.12 January 30, 2015 Sudo 1.8.12 +Sudo 1.8.16 November 20, 2015 Sudo 1.8.16 diff -Nru sudo-1.8.12/doc/sudoers.ldap.man.in sudo-1.8.16/doc/sudoers.ldap.man.in --- sudo-1.8.12/doc/sudoers.ldap.man.in 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/doc/sudoers.ldap.man.in 2016-03-17 16:13:11.000000000 +0000 @@ -16,7 +16,7 @@ .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.TH "SUDOERS.LDAP" "8" "January 30, 2015" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" +.TH "SUDOERS.LDAP" "8" "November 20, 2015" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" .nh .if n .ad l .SH "NAME" @@ -150,6 +150,8 @@ or \(oq%:#\(cq respectively). +User netgroups are matched using the user and domain members only; +the host member is not used when matching. Non-Unix group support is only available when an appropriate \fIgroup_plugin\fR is defined in the global @@ -163,6 +165,8 @@ The special value \fRALL\fR will match any host. +Host netgroups are matched using the host (both qualified and unqualified) +and domain members only; the user member is not used when matching. .TP 6n \fBsudoCommand\fR A fully-qualified Unix command name with optional command line arguments, @@ -172,7 +176,7 @@ the user will be prohibited from running that command. .sp The built-in command -\(lq\fRsudoedit\fR\(rq +\(Lq\fRsudoedit\fR\(Rq is used to permit a user to run \fBsudo\fR with the @@ -181,7 +185,7 @@ \fBsudoedit\fR). It may take command line arguments just as a normal command does. Note that -\(lq\fRsudoedit\fR\(rq +\(Lq\fRsudoedit\fR\(Rq is a command built into \fBsudo\fR itself and must be specified in without a leading path. @@ -320,7 +324,7 @@ \fRsudoOrder\fR attribute is chosen. This corresponds to the -\(lqlast match\(rq +\(Lqlast match\(Rq behavior of the sudoers file. If the \fRsudoOrder\fR @@ -596,7 +600,7 @@ The \fIsecret\fR may be a plain text password or a base64-encoded string with a -\(lqbase64:\(rq +\(Lqbase64:\(Rq prefix. For example: .nf @@ -817,7 +821,7 @@ The same information is now logged via the \fBsudo\fR debugging framework using the -\(lqldap\(rq +\(Lqldap\(Rq subsystem at priorities \fIdiag\fR and @@ -979,7 +983,7 @@ The \fIsecret\fR may be a plain text password or a base64-encoded string with a -\(lqbase64:\(rq +\(Lqbase64:\(Rq prefix. For example: .nf @@ -1462,6 +1466,20 @@ sssd-sudo(@mansectform@), sudo.conf(@mansectform@), sudoers(@mansectsu@) +.SH "AUTHORS" +Many people have worked on +\fBsudo\fR +over the years; this version consists of code written primarily by: +.sp +.RS 6n +Todd C. Miller +.RE +.PP +See the CONTRIBUTORS file in the +\fBsudo\fR +distribution (https://www.sudo.ws/contributors.html) for an +exhaustive list of people who have contributed to +\fBsudo\fR. .SH "CAVEATS" Note that there are differences in the way that LDAP-based \fIsudoers\fR @@ -1473,18 +1491,18 @@ .SH "BUGS" If you feel you have found a bug in \fBsudo\fR, -please submit a bug report at http://bugzilla.sudo.ws/ +please submit a bug report at https://bugzilla.sudo.ws/ .SH "SUPPORT" Limited free support is available via the sudo-users mailing list, -see http://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or +see https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search the archives. .SH "DISCLAIMER" \fBsudo\fR is provided -\(lqAS IS\(rq +\(LqAS IS\(Rq and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the LICENSE file distributed with \fBsudo\fR -or http://www.sudo.ws/license.html for complete details. +or https://www.sudo.ws/license.html for complete details. diff -Nru sudo-1.8.12/doc/sudoers.ldap.mdoc.in sudo-1.8.16/doc/sudoers.ldap.mdoc.in --- sudo-1.8.12/doc/sudoers.ldap.mdoc.in 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/doc/sudoers.ldap.mdoc.in 2016-03-17 16:13:10.000000000 +0000 @@ -14,7 +14,7 @@ .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd January 30, 2015 +.Dd November 20, 2015 .Dt SUDOERS.LDAP @mansectsu@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -143,6 +143,8 @@ or .Ql %:# respectively). +User netgroups are matched using the user and domain members only; +the host member is not used when matching. Non-Unix group support is only available when an appropriate .Em group_plugin is defined in the global @@ -155,6 +157,8 @@ The special value .Li ALL will match any host. +Host netgroups are matched using the host (both qualified and unqualified) +and domain members only; the user member is not used when matching. .It Sy sudoCommand A fully-qualified Unix command name with optional command line arguments, potentially including globbing characters (aka wild cards). @@ -1125,7 +1129,7 @@ Please see .Xr sssd-sudo @mansectform@ for more information on configuring -.Nm sudo +.Nm sudo to work with SSSD. .Sh FILES .Bl -tag -width 24n @@ -1339,6 +1343,19 @@ .Xr sssd-sudo @mansectform@ , .Xr sudo.conf @mansectform@ , .Xr sudoers @mansectsu@ +.Sh AUTHORS +Many people have worked on +.Nm sudo +over the years; this version consists of code written primarily by: +.Bd -ragged -offset indent +.An Todd C. Miller +.Ed +.Pp +See the CONTRIBUTORS file in the +.Nm sudo +distribution (https://www.sudo.ws/contributors.html) for an +exhaustive list of people who have contributed to +.Nm sudo . .Sh CAVEATS Note that there are differences in the way that LDAP-based .Em sudoers @@ -1350,10 +1367,10 @@ .Sh BUGS If you feel you have found a bug in .Nm sudo , -please submit a bug report at http://bugzilla.sudo.ws/ +please submit a bug report at https://bugzilla.sudo.ws/ .Sh SUPPORT Limited free support is available via the sudo-users mailing list, -see http://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or +see https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search the archives. .Sh DISCLAIMER .Nm sudo @@ -1364,4 +1381,4 @@ particular purpose are disclaimed. See the LICENSE file distributed with .Nm sudo -or http://www.sudo.ws/license.html for complete details. +or https://www.sudo.ws/license.html for complete details. diff -Nru sudo-1.8.12/doc/sudoers.man.in sudo-1.8.16/doc/sudoers.man.in --- sudo-1.8.12/doc/sudoers.man.in 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/doc/sudoers.man.in 2016-03-17 16:13:11.000000000 +0000 @@ -1,7 +1,7 @@ .\" DO NOT EDIT THIS FILE, IT IS NOT THE MASTER! .\" IT IS GENERATED AUTOMATICALLY FROM sudoers.mdoc.in .\" -.\" Copyright (c) 1994-1996, 1998-2005, 2007-2015 +.\" Copyright (c) 1994-1996, 1998-2005, 2007-2016 .\" 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 "SUDOERS" "5" "February 6, 2015" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDOERS" "5" "January 20, 2016" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -44,7 +44,7 @@ \fISUDOERS FILE FORMAT\fR section. For information on storing -\fIsudoers\fR +\fBsudoers\fR policy information in LDAP, please see sudoers.ldap(@mansectform@). @@ -136,9 +136,9 @@ For more information on configuring sudo.conf(@mansectform@), please refer to its manual. -.SS "Authentication and logging" +.SS "User Authentication" The -\fIsudoers\fR +\fBsudoers\fR security policy requires that most users authenticate themselves before they can use \fBsudo\fR. @@ -149,7 +149,7 @@ Unlike su(1), when -\fIsudoers\fR +\fBsudoers\fR requires authentication, it validates the invoking user's credentials, not the target user's (or root's) credentials. @@ -198,7 +198,7 @@ \fRSUDO_USER\fR environment variable is set, the -\fIsudoers\fR +\fBsudoers\fR policy will use this value to determine who the actual user is. This can be used by a user to log commands @@ -210,10 +210,10 @@ sudo-run script or program. Note, however, that the \fIsudoers\fR -lookup is still done for root, not the user specified by +file lookup is still done for root, not the user specified by \fRSUDO_USER\fR. .PP -\fIsudoers\fR +\fBsudoers\fR uses per-user time stamp files for credential caching. Once a user has been authenticated, a record is written containing the uid that was used to authenticate, the @@ -228,21 +228,21 @@ option) \&. By default, -\fIsudoers\fR +\fBsudoers\fR uses a separate record for each tty, which means that a user's login sessions are authenticated separately. The \fItty_tickets\fR option can be disabled to force the use of a single time stamp for all of a user's sessions. -.PP -\fIsudoers\fR +.SS "Logging" +\fBsudoers\fR can log both successful and unsuccessful attempts (as well as errors) to syslog(3), a log file, or both. By default, -\fIsudoers\fR +\fBsudoers\fR will log via syslog(3) but this is changeable via the @@ -250,28 +250,36 @@ and \fIlogfile\fR Defaults settings. +See +\fILOG FORMAT\fR +for a description of the log file format. .PP -\fIsudoers\fR -also supports logging a command's input and output -streams. +\fBsudoers\fR +is also capable of running a command in a pseudo-tty and logging all +input and/or output. +The standard input, standard output and standard error can be logged +even when not associated with a terminal. I/O logging is not on by default but can be enabled using the \fIlog_input\fR and \fIlog_output\fR -Defaults flags as well as the +options as well as the \fRLOG_INPUT\fR and \fRLOG_OUTPUT\fR command tags. +See +\fII/O LOG FILES\fR +for details on how I/O log files are stored. .SS "Command environment" Since environment variables can influence program behavior, -\fIsudoers\fR +\fBsudoers\fR provides a means to restrict which variables from the user's environment are inherited by the command to be run. There are two distinct ways -\fIsudoers\fR +\fBsudoers\fR can deal with environment variables. .PP By default, the @@ -361,7 +369,7 @@ .fi .PP Without the -\(lq\fR=()*\fR\(rq +\(Lq\fR=()*\fR\(Rq suffix, this would not match, as old-style \fBbash\fR shell functions are not preserved by default. @@ -369,7 +377,7 @@ The complete list of environment variables that \fBsudo\fR allows or denies is contained in the output of -\(lq\fRsudo -V\fR\(rq +\(Lq\fRsudo -V\fR\(Rq when run as root. Please note that this list varies based on the operating system \fBsudo\fR @@ -424,7 +432,7 @@ \fB\-i\fR option (initial login) is specified, -\fIsudoers\fR +\fBsudoers\fR will initialize the environment regardless of the value of \fIenv_reset\fR. @@ -476,7 +484,7 @@ .PP The \fIsudoers\fR -grammar will be described below in Extended Backus-Naur +file grammar will be described below in Extended Backus-Naur Form (EBNF). Don't despair if you are unfamiliar with EBNF; it is fairly simple, and the definitions below are annotated. @@ -496,7 +504,7 @@ operators, which many readers will recognize from regular expressions. Do not, however, confuse them with -\(lqwildcard\(rq +\(Lqwildcard\(Rq characters, which have different meanings. .TP 6n \fR\&?\fR @@ -582,6 +590,12 @@ .RE .fi .PP +It is a syntax error to redefine an existing +\fIalias\fR. +It is possible to use the same name for +\fIaliases\fR +of different types, but this is not recommended. +.PP The definitions of what constitutes a valid \fIalias\fR member follow. @@ -626,6 +640,8 @@ \(oq\&!\(cq operators negate the value of the item; an even number just cancel each other out. +User netgroups are matched using the user and domain members only; +the host member is not used when matching. .PP A \fRuser name\fR, @@ -728,13 +744,14 @@ Again, the value of an item may be negated with the \(oq\&!\(cq operator. -If you do not specify a netmask along with the network number, +Host netgroups are matched using the host (both qualified and unqualified) +and domain members only; the user member is not used when matching. +If you specify a network number without a netmask, \fBsudo\fR will query each of the local host's network interfaces and, if the network number corresponds to one of the hosts's network -interfaces, the corresponding netmask will be used. -The netmask -may be specified either in standard IP address notation +interfaces, will use the netmask of that interface. +The netmask may be specified either in standard IP address notation (e.g.\& 255.255.255.0 or ffff:ffff:ffff:ffff::), or CIDR notation (number of bits, e.g.\& 24 or 64). A host name may include shell-style wildcards (see the @@ -751,7 +768,7 @@ only inspects actual network interfaces; this means that IP address 127.0.0.1 (localhost) will never match. Also, the host name -\(lqlocalhost\(rq +\(Lqlocalhost\(Rq will only match if that is the actual host name, which is usually only the case for non-networked systems. .nf @@ -819,7 +836,7 @@ \(oq=\&\(cq, \(oq\e\(cq. The built-in command -\(lq\fRsudoedit\fR\(rq +\(Lq\fRsudoedit\fR\(Rq is used to permit a user to run \fBsudo\fR with the @@ -828,12 +845,12 @@ \fBsudoedit\fR). It may take command line arguments just as a normal command does. Note that -\(lq\fRsudoedit\fR\(rq +\(Lq\fRsudoedit\fR\(Rq is a command built into \fBsudo\fR -itself and must be specified in +itself and must be specified in the \fIsudoers\fR -without a leading path. +file without a leading path. .PP If a \fRcommand name\fR @@ -841,9 +858,6 @@ \fRDigest_Spec\fR, the command will only match successfully if it can be verified using the specified SHA-2 digest. -This may be useful in situations where the user invoking -\fBsudo\fR -has write access to the command or its parent directory. The following digest formats are supported: sha224, sha256, sha384 and sha512. The string may be specified in either hex or base64 format (base64 is more compact). @@ -868,6 +882,15 @@ .RE .fi .PP +Warning, if the user has write access to the command itself (directly or via a +\fBsudo\fR +command), it may be possible for the user to replace the command after the +digest check has been performed but before the command is executed. +A similar race condition exists on systems that lack the +fexecve(2) +system call when the directory in which the command is located +is writable by the user. +.PP Command digests are only supported by version 1.8.7 or higher. .SS "Defaults" Certain configuration options may be changed from their default @@ -955,9 +978,10 @@ Solaris_Priv_Spec ::= ('PRIVS=privset' | 'LIMITPRIVS=privset') -Tag_Spec ::= ('NOPASSWD:' | 'PASSWD:' | 'NOEXEC:' | 'EXEC:' | - 'SETENV:' | 'NOSETENV:' | 'LOG_INPUT:' | 'NOLOG_INPUT:' | - 'LOG_OUTPUT:' | 'NOLOG_OUTPUT:') +Tag_Spec ::= ('EXEC:' | 'NOEXEC:' | 'FOLLOW:' | 'NOFOLLOW' | + 'LOG_INPUT:' | 'NOLOG_INPUT:' | 'LOG_OUTPUT:' | + 'NOLOG_OUTPUT:' | 'MAIL:' | 'NOMAIL:' | 'PASSWD:' | + 'NOPASSWD:' | 'SETENV:' | 'NOSETENV:') .RE .fi .PP @@ -971,7 +995,7 @@ but this can be changed on a per-command basis. .PP The basic structure of a user specification is -\(lqwho where = (as_whom) what\(rq. +\(Lqwho where = (as_whom) what\(Rq. Let's break that down into its constituent parts: .SS "Runas_Spec" A @@ -1152,7 +1176,7 @@ .SS "SELinux_Spec" On systems with SELinux support, \fIsudoers\fR -entries may optionally have an SELinux role and/or type associated +file entries may optionally have an SELinux role and/or type associated with a command. If a role or type is specified with the command it will override any default values @@ -1164,7 +1188,7 @@ .SS "Solaris_Priv_Spec" On Solaris systems, \fIsudoers\fR -entries may optionally specify Solaris privilege set and/or limit +file entries may optionally specify Solaris privilege set and/or limit privilege set associated with a command. If privileges or limit privileges are specified with the command it will override any default values specified in @@ -1183,7 +1207,7 @@ .fi .PP In addition, there are several -\(lqspecial\(rq +\(Lqspecial\(Rq privilege strings: .TP 10n none @@ -1208,17 +1232,21 @@ A command may have zero or more tags associated with it. There are ten possible tag values: -\fRNOPASSWD\fR, -\fRPASSWD\fR, -\fRNOEXEC\fR, \fREXEC\fR, -\fRSETENV\fR, -\fRNOSETENV\fR, +\fRNOEXEC\fR, +\fRFOLLOW\fR, +\fRNOFOLLOW\fR, \fRLOG_INPUT\fR, \fRNOLOG_INPUT\fR, -\fRLOG_OUTPUT\fR +\fRLOG_OUTPUT\fR, +\fRNOLOG_OUTPUT\fR, +\fRMAIL\fR, +\fRNOMAIL\fR, +\fRPASSWD\fR, +\fRNOPASSWD\fR, +\fRSETENV\fR, and -\fRNOLOG_OUTPUT\fR. +\fRNOSETENV\fR. Once a tag is set on a \fRCmnd\fR, subsequent @@ -1234,7 +1262,110 @@ overrides \fREXEC\fR). .TP 2n -\fINOPASSWD\fR and \fIPASSWD\fR +\fIEXEC\fR and \fINOEXEC\fR +.sp +If +\fBsudo\fR +has been compiled with +\fInoexec\fR +support and the underlying operating system supports it, the +\fRNOEXEC\fR +tag can be used to prevent a dynamically-linked executable from +running further commands itself. +.sp +In the following example, user +\fBaaron\fR +may run +\fI/usr/bin/more\fR +and +\fI/usr/bin/vi\fR +but shell escapes will be disabled. +.nf +.sp +.RS 2n +aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi +.RE +.fi +.RS 2n +.sp +See the +\fIPreventing shell escapes\fR +section below for more details on how +\fRNOEXEC\fR +works and whether or not it will work on your system. +.RE +.TP 2n +\fIFOLLOW\fR and \fINOFOLLOW\fR +Starting with version 1.8.15, +\fBsudoedit\fR +will not open a file that is a symbolic link unless the +\fIsudoedit_follow\fR +option is enabled. +The +\fIFOLLOW\fR +and +\fINOFOLLOW\fR +tags override the value of +\fIsudoedit_follow\fR +and can be used to permit (or deny) the editing of symbolic links +on a per-command basis. +These tags are only effective for the +\fIsudoedit\fR +command and are ignored for all other commands. +.TP 2n +\fILOG_INPUT\fR and \fINOLOG_INPUT\fR +.sp +These tags override the value of the +\fIlog_input\fR +option on a per-command basis. +For more information, see the description of +\fIlog_input\fR +in the +\fISUDOERS OPTIONS\fR +section below. +.TP 2n +\fILOG_OUTPUT\fR and \fINOLOG_OUTPUT\fR +.sp +These tags override the value of the +\fIlog_output\fR +option on a per-command basis. +For more information, see the description of +\fIlog_output\fR +in the +\fISUDOERS OPTIONS\fR +section below. +.TP 2n +\fIMAIL\fR and \fINOMAIL\fR +.sp +These tags provide fine-grained control over whether +mail will be sent when a user runs a command by +overriding the value of the +\fImail_all_cmnds\fR +option on a per-command basis. +They have no effect when +\fBsudo\fR +is run with the +\fB\-l\fR +or +\fB\-v\fR +options. +A +\fINOMAIL\fR +tag will also override the +\fImail_always\fR +and +\fImail_no_perms\fR +options. +For more information, see the descriptions of +\fImail_all_cmnds\fR, +\fImail_always\fR, +and +\fImail_no_perms\fR +in the +\fISUDOERS OPTIONS\fR +section below. +.TP 2n +\fIPASSWD\fR and \fINOPASSWD\fR .sp By default, \fBsudo\fR @@ -1295,10 +1426,10 @@ \fRNOPASSWD\fR tag is applied to any of the entries for a user on the current host, he or she will be able to run -\(lq\fRsudo -l\fR\(rq +\(Lq\fRsudo -l\fR\(Rq without a password. Additionally, a user may only run -\(lq\fRsudo -v\fR\(rq +\(Lq\fRsudo -v\fR\(Rq without a password if the \fRNOPASSWD\fR tag is present for all a user's entries that pertain to the current host. @@ -1309,39 +1440,6 @@ options. .RE .TP 2n -\fINOEXEC\fR and \fIEXEC\fR -.sp -If -\fBsudo\fR -has been compiled with -\fInoexec\fR -support and the underlying operating system supports it, the -\fRNOEXEC\fR -tag can be used to prevent a dynamically-linked executable from -running further commands itself. -.sp -In the following example, user -\fBaaron\fR -may run -\fI/usr/bin/more\fR -and -\fI/usr/bin/vi\fR -but shell escapes will be disabled. -.nf -.sp -.RS 2n -aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi -.RE -.fi -.RS 2n -.sp -See the -\fIPreventing shell escapes\fR -section below for more details on how -\fRNOEXEC\fR -works and whether or not it will work on your system. -.RE -.TP 2n \fISETENV\fR and \fINOSETENV\fR .sp These tags override the value of the @@ -1368,28 +1466,6 @@ tag is implied for that command; this default may be overridden by use of the \fRNOSETENV\fR tag. -.TP 2n -\fILOG_INPUT\fR and \fINOLOG_INPUT\fR -.sp -These tags override the value of the -\fIlog_input\fR -option on a per-command basis. -For more information, see the description of -\fIlog_input\fR -in the -\fISUDOERS OPTIONS\fR -section below. -.TP 2n -\fILOG_OUTPUT\fR and \fINOLOG_OUTPUT\fR -.sp -These tags override the value of the -\fIlog_output\fR -option on a per-command basis. -For more information, see the description of -\fIlog_output\fR -in the -\fISUDOERS OPTIONS\fR -section below. .SS "Wildcards" \fBsudo\fR allows shell-style @@ -1403,23 +1479,20 @@ and fnmatch(3) functions as specified by -IEEE Std 1003.1 (\(lqPOSIX.1\(rq). -Note that these are -\fInot\fR -regular expressions. +IEEE Std 1003.1 (\(LqPOSIX.1\(Rq). .TP 10n \fR*\fR -Matches any set of zero or more characters. +Matches any set of zero or more characters (including white space). .TP 10n \fR\&?\fR -Matches any single character. +Matches any single character (including white space). .TP 10n \fR[...]\fR Matches any character in the specified range. .TP 10n \fR[!...]\fR Matches any character -\fBnot\fR +\fInot\fR in the specified range. .TP 10n \fR\ex\fR @@ -1434,7 +1507,11 @@ and \(oq]\&\(cq. .PP -Character classes may also be used if your system's +\fBNote that these are not regular expressions.\fR +Unlike a regular expression there is no way to match one or more +characters within a range. +.PP +Character classes may be used if your system's glob(3) and fnmatch(3) @@ -1449,7 +1526,7 @@ .nf .sp .RS 4n -/bin/ls [[:\&alpha:\&]]* +/bin/ls [[\e:\&alpha\e:\&]]* .RE .fi .PP @@ -1458,9 +1535,9 @@ Note that a forward slash (\(oq/\(cq) will -\fBnot\fR +\fInot\fR be matched by -wildcards used in the path name. +wildcards used in the file name portion of the command. This is to make a path like: .nf .sp @@ -1475,17 +1552,18 @@ \fI/usr/bin/X11/xterm\fR. .PP When matching the command line arguments, however, a slash -\fBdoes\fR +\fIdoes\fR get matched by wildcards since command line arguments may contain arbitrary strings and not just path names. .PP -Wildcards in command line arguments should be used with care. -Because command line arguments are matched as a single, concatenated -string, a wildcard such as +\fBWildcards in command line arguments should be used with care.\fR +.br +Command line arguments are matched as a single, concatenated string. +This mean a wildcard character such as \(oq\&?\(cq or \(oq*\(cq -can match multiple words. +will match across word boundaries, which may be unexpected. For example, while a sudoers entry like: .nf .sp @@ -1511,6 +1589,10 @@ .fi .PP which is probably not what was intended. +In most cases it is better to do command line processing +outside of the +\fIsudoers\fR +file in a scripting language. .SS "Exceptions to wildcard rules" The following exceptions apply to the above rules: .TP 10n @@ -1519,8 +1601,8 @@ \fR\&""\fR is the only command line argument in the \fIsudoers\fR -entry it means that command is not allowed to be run with -\fBany\fR +file entry it means that command is not allowed to be run with +\fIany\fR arguments. .TP 10n sudoedit @@ -1545,7 +1627,7 @@ file in addition to a local, per-machine file. For the sake of this example the site-wide \fIsudoers\fR -will be +file will be \fI/etc/sudoers\fR and the per-machine one will be \fI/etc/sudoers.local\fR. @@ -1600,7 +1682,7 @@ \fR%h\fR escape, signifying the short form of the host name. In other words, if the machine's host name is -\(lqxerxes\(rq, +\(Lqxerxes\(Rq, then .nf .sp @@ -1620,8 +1702,7 @@ \fIsudoers.d\fR directory that the system package manager can drop \fIsudoers\fR -rules -into as part of package installation. +file rules into as part of package installation. For example, given: .nf .sp @@ -1647,7 +1728,7 @@ Be aware that because the sorting is lexical, not numeric, \fI/etc/sudoers.d/1_whoops\fR would be loaded -\fBafter\fR +\fIafter\fR \fI/etc/sudoers.d/10_second\fR. Using a consistent number of leading zeroes in the file names can be used to avoid such problems. @@ -1662,7 +1743,10 @@ \fBvisudo\fR with the \fB\-f\fR -flag to edit the files directly. +flag to edit the files directly, but this will not catch the +redefinition of an +\fIalias\fR +that is also present in a different file. .SS "Other special characters and reserved words" The pound sign (\(oq#\(cq) @@ -1692,7 +1776,7 @@ Please note that using \fBALL\fR can be dangerous since in a command context, it allows the user to run -\fBany\fR +\fIany\fR command on the system. .PP An exclamation point @@ -1727,7 +1811,7 @@ .PP it would explicitly deny root but not match any other users. This is different from a true -\(lqnegation\(rq +\(Lqnegation\(Rq operator. .PP Note, however, that using a @@ -1735,7 +1819,7 @@ in conjunction with the built-in \fBALL\fR alias to allow a user to run -\(lqall but a few\(rq +\(Lqall but a few\(Rq commands rarely works as intended (see \fISECURITY NOTES\fR below). @@ -1772,6 +1856,17 @@ .PP \fBBoolean Flags\fR: .TP 18n +always_query_group_plugin +If a +\fIgroup_plugin\fR +is configured, use it to resolve groups of the form %group as long +as there is not also a system group of the same name. +Normally, only groups of the form %:group are passed to the +\fIgroup_plugin\fR. +This flag is +\fIoff\fR +by default. +.TP 18n always_set_home If enabled, \fBsudo\fR @@ -1784,13 +1879,13 @@ This effectively means that the \fB\-H\fR option is always implied. -Note that +Note that by default, \fRHOME\fR -is already set when the +will be set to the home directory of the target user when the \fIenv_reset\fR option is enabled, so \fIalways_set_home\fR -is only effective for configurations where either +only has an effect for configurations where either \fIenv_reset\fR is disabled or \fRHOME\fR @@ -1838,18 +1933,6 @@ \fBzlib\fR support. .TP 18n -use_netgroups -If set, netgroups (prefixed with -\(oq+\(cq), -may be used in place of a user or host. -For LDAP-based sudoers, netgroup support requires an expensive -substring match on the server. -If netgroups are not needed, this option can be disabled to reduce the -load on the LDAP server. -This flag is -\fIon\fR -by default. -.TP 18n exec_background By default, \fBsudo\fR @@ -1960,11 +2043,13 @@ specified by the \fIenv_file\fR option (if any). -The default contents of the +The contents of the \fRenv_keep\fR and \fRenv_check\fR -lists are displayed when +lists, as modified by global Defaults parameters in +\fIsudoers\fR, +are displayed when \fBsudo\fR is run by root with the \fB\-V\fR @@ -2006,9 +2091,9 @@ characters are used with the negation operator, \(oq!\&\(cq, as such rules can be trivially bypassed. -As such, this option should not be used when +As such, this option should not be used when the \fIsudoers\fR -contains rules that contain negated path names which include globbing +file contains rules that contain negated path names which include globbing characters. This flag is \fIoff\fR @@ -2023,7 +2108,7 @@ In other words, instead of myhost you would use myhost.mydomain.edu. You may still use the short form if you wish (and even mix the two). This option is only effective when the -\(lqcanonical\(rq +\(Lqcanonical\(Rq host name, as returned by the \fBgetaddrinfo\fR() or @@ -2035,7 +2120,7 @@ If the system is configured to use the \fI/etc/hosts\fR file in preference to DNS, the -\(lqcanonical\(rq +\(Lqcanonical\(Rq host name may not be fully-qualified. The order that sources are queried for host name resolution is usually specified in the @@ -2048,13 +2133,13 @@ In the \fI/etc/hosts\fR file, the first host name of the entry is considered to be the -\(lqcanonical\(rq +\(Lqcanonical\(Rq name; subsequent names are aliases that are not used by \fBsudoers\fR. For example, the following hosts file line for the machine -\(lqxyzzy\(rq +\(Lqxyzzy\(Rq has the fully-qualified domain name as the -\(lqcanonical\(rq +\(Lqcanonical\(Rq host name, and the short version as an alias. .sp .RS 24n @@ -2075,7 +2160,7 @@ unusable if DNS stops working (for example if the machine is disconnected from the network). Also note that just like with the hosts file, you must use the -\(lqcanonical\(rq +\(Lqcanonical\(Rq name as DNS knows it. That is, you may not use a host alias (\fRCNAME\fR @@ -2140,68 +2225,30 @@ log_input If set, \fBsudo\fR -will run the command in a -\fIpseudo tty\fR -and log all user input. +will run the command in a pseudo-tty and log all user input. If the standard input is not connected to the user's tty, due to I/O redirection or because the command is part of a pipeline, that input is also captured and stored in a separate log file. +For more information, see the +\fII/O LOG FILES\fR +section. This flag is \fIoff\fR by default. -.sp -Input is logged to the directory specified by the -\fIiolog_dir\fR -option -(\fI@iolog_dir@\fR -by default) -using a unique session ID that is included in the normal -\fBsudo\fR -log line, prefixed with -\(lq\fRTSID=\fR\(rq. -The -\fIiolog_file\fR -option may be used to control the format of the session ID. -.sp -Note that user input may contain sensitive information such as -passwords (even if they are not echoed to the screen), which will -be stored in the log file unencrypted. -In most cases, logging the command output via -\fIlog_output\fR -is all that is required. .TP 18n log_output If set, \fBsudo\fR -will run the command in a -\fIpseudo tty\fR -and log all output that is sent to the screen, similar to the +will run the command in a pseudo-tty and log all output that is sent +to the screen, similar to the script(1) command. -If the standard output or standard error is not connected to the -user's tty, due to I/O redirection or because the command is part -of a pipeline, that output is also captured and stored in separate -log files. +For more information, see the +\fII/O LOG FILES\fR +section. This flag is \fIoff\fR by default. -.sp -Output is logged to the directory specified by the -\fIiolog_dir\fR -option -(\fI@iolog_dir@\fR -by default) -using a unique session ID that is included in the normal -\fBsudo\fR -log line, prefixed with -\(lq\fRTSID=\fR\(rq. -The -\fIiolog_file\fR -option may be used to control the format of the session ID. -.sp -Output logs may be viewed with the -sudoreplay(@mansectsu@) -utility, which can also be used to list or search the available logs. .TP 18n log_year If set, the four-digit year will be logged in the (non-syslog) @@ -2223,19 +2270,31 @@ \fI@long_otp_prompt@\fR by default. .TP 18n -mail_always +mail_all_cmnds Send mail to the \fImailto\fR user every time a user attempts to run a command via -\fBsudo\fR. -Mail will be sent for both successful and unsuccessful attempts. +\fBsudo\fR +(this includes +\fBsudoedit\fR). No mail will be sent if the user runs \fBsudo\fR with the \fB\-l\fR or \fB\-v\fR -option unless there is an authentication error. +option unless there is an authentication error and the +\fImail_badpass\fR +flag is also set. +This flag is +\fIoff\fR +by default. +.TP 18n +mail_always +Send mail to the +\fImailto\fR +user every time a user runs +\fBsudo\fR. This flag is \fIoff\fR by default. @@ -2247,8 +2306,9 @@ \fBsudo\fR does not enter the correct password. If the command the user is attempting to run is not permitted by -\fIsudoers\fR +\fBsudoers\fR and one of the +\fImail_all_cmnds\fR, \fImail_always\fR, \fImail_no_host\fR, \fImail_no_perms\fR @@ -2291,6 +2351,19 @@ \fI@mail_no_user@\fR by default. .TP 18n +netgroup_tuple +If set, netgroup lookups will be performed using the full netgroup +tuple: host name, user name and domain (if one is set). +Historically, +\fBsudo\fR +only matched the user name and domain for netgroups used in a +\fRUser_List\fR +and only matched the host name and domain for netgroups used in a +\fRHost_List\fR. +This flag is +\fIoff\fR +by default. +.TP 18n noexec If set, all commands run via \fBsudo\fR @@ -2300,8 +2373,8 @@ \fREXEC\fR tag. See the description of -\fINOEXEC and EXEC\fR -below as well as the +\fIEXEC and NOEXEC\fR +above as well as the \fIPreventing shell escapes\fR section at the end of this manual. This flag is @@ -2359,7 +2432,7 @@ \fIpassprompt\fR will normally only be used if the password prompt provided by systems such as PAM matches the string -\(lqPassword:\(rq. +\(LqPassword:\(Rq. If \fIpassprompt_override\fR is set, @@ -2437,10 +2510,10 @@ \fBsudo\fR too. Disabling this prevents users from -\(lqchaining\(rq +\(Lqchaining\(Rq \fBsudo\fR commands to get a root shell by doing something like -\(lq\fRsudo sudo /bin/sh\fR\(rq. +\(Lq\fRsudo sudo /bin/sh\fR\(Rq. Note, however, that turning off \fIroot_sudo\fR will also prevent root from running @@ -2523,12 +2596,18 @@ to determine the real identity of the user, it may be desirable to change this behavior. This can be done by negating the set_logname option. -Note that if the +Note that +\fIset_logname\fR +will have no effect +if the \fIenv_reset\fR -option has not been disabled, entries in the +option has not been disabled and the \fIenv_keep\fR -list will override the value of -\fIset_logname\fR. +list contains +\fRLOGNAME\fR, +\fRUSER\fR +or +\fRUSERNAME\fR. This flag is \fIon\fR by default. @@ -2604,6 +2683,51 @@ \fIoff\fR by default. .TP 18n +sudoedit_checkdir +.br +If set, +\fBsudoedit\fR +will check all directory components of the path to be edited for writability +by the invoking user. +Symbolic links will not be followed in writable directories and +\fBsudoedit\fR +will refuse to edit a file located in a writable directory. +These restrictions are not enforced when +\fBsudoedit\fR +is run by root. +On some systems, if all directory components of the path to be edited +are not readable by the target user, +\fBsudoedit\fR +will be unable to edit the file. +This flag is +\fIon\fR +by default. +.sp +This setting was first introduced in version 1.8.15 but initially +suffered from a race condition. +The check for symbolic links in writable intermediate directories +was added in version 1.8.16. +.TP 18n +sudoedit_follow +By default, +\fBsudoedit\fR +will not follow symbolic links when opening files. +The +\fIsudoedit_follow\fR +option can be enabled to allow +\fBsudoedit\fR +to open symbolic links. +It may be overridden on a per-command basis by the +\fIFOLLOW\fR +and +\fINOFOLLOW\fR +tags. +This flag is +\fIoff\fR +by default. +.sp +This setting is only supported by version 1.8.15 or higher. +.TP 18n targetpw If set, \fBsudo\fR @@ -2635,12 +2759,13 @@ umask_override If set, \fBsudo\fR -will set the umask as specified by +will set the umask as specified in the \fIsudoers\fR -without modification. -This makes it possible to specify a more permissive umask in +file without modification. +This makes it possible to specify a umask in the \fIsudoers\fR -than the user's own umask and matches historical behavior. +file that is more permissive than the user's own umask and matches +historical behavior. If \fIumask_override\fR is not set, @@ -2665,6 +2790,22 @@ \fIoff\fR by default. .TP 18n +use_netgroups +If set, netgroups (prefixed with +\(oq+\(cq), +may be used in place of a user or host. +For LDAP-based sudoers, netgroup support requires an expensive +substring match on the server unless the +\fBNETGROUP_BASE\fR +directive is present in the +\fI@ldap_conf@\fR +file. +If netgroups are not needed, this option can be disabled to reduce the +load on the LDAP server. +This flag is +\fIon\fR +by default. +.TP 18n use_pty If set, \fBsudo\fR @@ -2700,7 +2841,7 @@ \fBsudo\fR will prompt for a password even when it would be visible on the screen. This makes it possible to run things like -\(lq\fRssh somehost sudo ls\fR\(rq +\(Lq\fRssh somehost sudo ls\fR\(Rq since by default, ssh(1) does @@ -2723,6 +2864,33 @@ The default is \fR3\fR. .TP 18n +maxseq +The maximum sequence number that will be substituted for the +\(Lq\fR%{seq}\fR\(Rq +escape in the I/O log file (see the +\fIiolog_dir\fR +description above for more information). +While the value substituted for +\(Lq\fR%{seq}\fR\(Rq +is in base 36, +\fImaxseq\fR +itself should be expressed in decimal. +Values larger than 2176782336 (which corresponds to the +base 36 sequence number +\(LqZZZZZZ\(Rq) +will be silently truncated to 2176782336. +The default value is 2176782336. +.sp +Once the local sequence number reaches the value of +\fImaxseq\fR, +it will +\(Lqroll over\(Rq +to zero, after which +\fBsudoers\fR +will truncate and re-use any existing I/O log path names. +.sp +This setting is only supported by version 1.8.7 or higher. +.TP 18n passwd_tries The number of tries a user gets to enter his/her password before \fBsudo\fR @@ -2770,9 +2938,9 @@ \fR0\fR the user's time stamp will never expire. This can be used to allow users to create or delete their own time stamps via -\(lq\fRsudo -v\fR\(rq +\(Lq\fRsudo -v\fR\(Rq and -\(lq\fRsudo -k\fR\(rq +\(Lq\fRsudo -k\fR\(Rq respectively. .TP 18n umask @@ -2888,7 +3056,7 @@ \fIiolog_file\fR may contain directory components. The default is -\(lq\fR%{seq}\fR\(rq. +\(Lq\fR%{seq}\fR\(Rq. .sp See the \fIiolog_dir\fR @@ -2948,34 +3116,7 @@ \fR%h\fR will expand to the host name of the machine. Default is -\(lq\fR@mailsub@\fR\(rq. -.TP 18n -maxseq -The maximum sequence number that will be substituted for the -\(lq\fR%{seq}\fR\(rq -escape in the I/O log file (see the -\fIiolog_dir\fR -description above for more information). -While the value substituted for -\(lq\fR%{seq}\fR\(rq -is in base 36, -\fImaxseq\fR -itself should be expressed in decimal. -Values larger than 2176782336 (which corresponds to the -base 36 sequence number -\(lqZZZZZZ\(rq) -will be silently truncated to 2176782336. -The default value is 2176782336. -.sp -Once the local sequence number reaches the value of -\fImaxseq\fR, -it will -\(lqroll over\(rq -to zero, after which -\fBsudoers\fR -will truncate and re-use any existing I/O log path names. -.sp -This setting is only supported by version 1.8.7 or higher. +\(Lq\fR@mailsub@\fR\(Rq. .TP 18n noexec_file As of @@ -2992,7 +3133,7 @@ \fB\-i\fR option is specified. The default value is -\(lq\fR@pam_login_service@\fR\(rq. +\(Lq\fR@pam_login_service@\fR\(Rq. See the description of \fIpam_service\fR for more information. @@ -3008,7 +3149,7 @@ \fI/etc/pam.d\fR directory. The default value is -\(lq\fRsudo\fR\(rq. +\(Lq\fRsudo\fR\(Rq. .sp This setting is only supported by version 1.8.8 or higher. .TP 18n @@ -3059,7 +3200,7 @@ character .PP The default value is -\(lq\fR@passprompt@\fR\(rq. +\(Lq\fR@passprompt@\fR\(Rq. .RE .TP 18n privs @@ -3082,9 +3223,9 @@ role The default SELinux role to use when constructing a new security context to run the command. -The default role may be overridden on a per-command basis in +The default role may be overridden on a per-command basis in the \fIsudoers\fR -or via command line options. +file or via command line options. This option is only available when \fBsudo\fR is built with SELinux support. @@ -3126,7 +3267,7 @@ sending email. Note that changing the locale may affect how sudoers is interpreted. Defaults to -\(lq\fRC\fR\(rq. +\(Lq\fRC\fR\(Rq. .TP 18n timestampdir The directory in which @@ -3145,9 +3286,9 @@ type The default SELinux type to use when constructing a new security context to run the command. -The default type may be overridden on a per-command basis in +The default type may be overridden on a per-command basis in the \fIsudoers\fR -or via command line options. +file or via command line options. This option is only available when \fBsudo\fR is built with SELinux support. @@ -3160,9 +3301,9 @@ option specifies the fully qualified path to a file containing variables to be set in the environment of the program being run. Entries in this file should either be of the form -\(lq\fRVARIABLE=value\fR\(rq +\(Lq\fRVARIABLE=value\fR\(Rq or -\(lq\fRexport VARIABLE=value\fR\(rq. +\(Lq\fRexport VARIABLE=value\fR\(Rq. The value may optionally be surrounded by single or double quotes. Variables in this file are subject to other \fBsudo\fR @@ -3180,7 +3321,7 @@ .TP 14n group_plugin A string containing a -\fIsudoers\fR +\fBsudoers\fR group plugin with optional arguments. The string should consist of the plugin path, either fully-qualified or relative to the @@ -3245,7 +3386,7 @@ all All the user's \fIsudoers\fR -entries for the current host must have +file entries for the current host must have the \fRNOPASSWD\fR flag set to avoid entering a password. @@ -3259,7 +3400,7 @@ any At least one of the user's \fIsudoers\fR -entries for the current host +file entries for the current host must have the \fRNOPASSWD\fR flag set to avoid entering a password. @@ -3299,7 +3440,7 @@ .TP 14n mailfrom Address to use for the -\(lqfrom\(rq +\(Lqfrom\(Rq address when sending warning and error mail. The address should be enclosed in double quotes (\&"") @@ -3333,9 +3474,9 @@ \fRPATH\fR environment variable you may want to use this. Another use is if you want to have the -\(lqroot path\(rq +\(Lqroot path\(Rq be separate from the -\(lquser path\(rq. +\(Lquser path\(Rq. Users in the group specified by the \fIexempt_group\fR option are not affected by @@ -3379,7 +3520,7 @@ all All the user's \fIsudoers\fR -entries for the current host must have the +file entries for the current host must have the \fRNOPASSWD\fR flag set to avoid entering a password. .PD @@ -3392,7 +3533,7 @@ any At least one of the user's \fIsudoers\fR -entries for the current host must have the +file entries for the current host must have the \fRNOPASSWD\fR flag set to avoid entering a password. .TP 8n @@ -3414,12 +3555,12 @@ \fBLists that can be used in a boolean context\fR: .TP 18n env_check -Environment variables to be removed from the user's environment if +Environment variables to be removed from the user's environment unless they are considered -\(lqsafe\(rq. +\(Lqsafe\(Rq. For all variables except \fRTZ\fR, -\(lqsafe\(rq +\(Lqsafe\(Rq means that the variable's value does not contain any \(oq%\(cq or @@ -3435,8 +3576,10 @@ .PD 0 .TP 4n \fB\(bu\fR -It consists of a fully-qualified path name that does not match -the location of the +It consists of a fully-qualified path name, +optionally prefixed with a colon +(\(oq:\&\(cq), +that does not match the location of the \fIzoneinfo\fR directory. .PD @@ -3468,7 +3611,7 @@ option is enabled or disabled, variables specified by \fRenv_check\fR will be preserved in the environment if they pass the aforementioned check. -The default list of environment variables to check is displayed when +The global list of environment variables to check is displayed when \fBsudo\fR is run by root with the @@ -3489,7 +3632,7 @@ and \fR\&!\fR operators respectively. -The default list of environment variables to remove is displayed when +The global list of environment variables to remove is displayed when \fBsudo\fR is run by root with the \fB\-V\fR @@ -3514,7 +3657,7 @@ and \fR\&!\fR operators respectively. -The default list of variables to keep +The global list of variables to keep is displayed when \fBsudo\fR is run by root with the @@ -3586,7 +3729,7 @@ can log events using either syslog(3) or a simple log file. -In each case the log format is almost identical. +The log format is almost identical in both cases. .SS "Accepted command log entries" Commands that sudo runs are logged using the following format (split into multiple lines for readability): @@ -3604,7 +3747,7 @@ date The date the command was run. Typically, this is in the format -\(lqMMM, DD, HH:MM:SS\(rq. +\(LqMMM, DD, HH:MM:SS\(Rq. If logging via syslog(3), the actual date format is controlled by the syslog daemon. @@ -3634,13 +3777,13 @@ .TP 14n ttyname The short name of the terminal (e.g.\& -\(lqconsole\(rq, -\(lqtty01\(rq, +\(Lqconsole\(Rq, +\(Lqtty01\(Rq, or -\(lqpts/0\(rq) +\(Lqpts/0\(Rq) \fBsudo\fR was run on, or -\(lqunknown\(rq +\(Lqunknown\(Rq if there was no terminal present. .TP 14n cwd @@ -3672,7 +3815,7 @@ Messages are logged using the locale specified by \fIsudoers_locale\fR, which defaults to the -\(lq\fRC\fR\(rq +\(Lq\fRC\fR\(Rq locale. .SS "Denied command log entries" If the user is not allowed to run the command, the reason for the denial @@ -3749,13 +3892,13 @@ a different value. Normally, \fBsudoers\fR -tries to open +tries to open the \fIsudoers\fR -using group permissions to avoid this problem. +file using group permissions to avoid this problem. Consider either changing the ownership of \fI@sysconfdir@/sudoers\fR or adding an argument like -\(lqsudoers_uid=N\(rq +\(Lqsudoers_uid=N\(Rq (where \(oqN\(cq is the user ID that owns the @@ -3784,7 +3927,7 @@ If you wish to change the \fIsudoers\fR file owner, please add -\(lqsudoers_uid=N\(rq +\(Lqsudoers_uid=N\(Rq (where \(oqN\(cq is the user ID that owns the @@ -3805,7 +3948,7 @@ file must not be world-writable, the default file mode is 0440 (readable by owner and group, writable by none). The default mode may be changed via the -\(lqsudoers_mode\(rq +\(Lqsudoers_mode\(Rq option to the \fBsudoers\fR \fRPlugin\fR @@ -3820,7 +3963,7 @@ If you wish to change the \fIsudoers\fR file group ownership, please add -\(lqsudoers_gid=N\(rq +\(Lqsudoers_gid=N\(Rq (where \(oqN\(cq is the group ID that owns the @@ -3833,7 +3976,7 @@ file. .TP 3n unable to open @rundir@/ts/username -\fIsudoers\fR +\fBsudoers\fR was unable to read or create the user's time stamp file. This can happen when \fItimestampowner\fR @@ -3845,7 +3988,7 @@ is 0711. .TP 3n unable to write to @rundir@/ts/username -\fIsudoers\fR +\fBsudoers\fR was unable to write to the user's time stamp file. .TP 3n @rundir@/ts is owned by uid X, should be Y @@ -3854,18 +3997,18 @@ This can occur when the value of \fItimestampowner\fR has been changed. -\fIsudoers\fR +\fBsudoers\fR will ignore the time stamp directory until the owner is corrected. .TP 3n @rundir@/ts is group writable The time stamp directory is group-writable; it should be writable only by \fItimestampowner\fR. The default mode for the time stamp directory is 0700. -\fIsudoers\fR +\fBsudoers\fR will ignore the time stamp directory until the mode is corrected. .SS "Notes on logging via syslog" By default, -\fIsudoers\fR +\fBsudoers\fR logs messages via syslog(3). The @@ -3874,7 +4017,7 @@ and \fIprogname\fR fields are added by the syslog daemon, not -\fIsudoers\fR +\fBsudoers\fR itself. As such, they may vary in format on different systems. .PP @@ -3885,19 +4028,19 @@ \fBsudoers\fR will split up log messages that are larger than 960 characters (not including the date, hostname, and the string -\(lqsudo\(rq). +\(Lqsudo\(Rq). When a message is split, additional parts will include the string -\(lq(command continued)\(rq +\(Lq(command continued)\(Rq after the user name and before the continued command line arguments. .SS "Notes on logging to a file" If the \fIlogfile\fR option is set, -\fIsudoers\fR +\fBsudoers\fR will log to a local file, such as \fI/var/log/sudo\fR. When logging to a file, -\fIsudoers\fR +\fBsudoers\fR uses a format similar to syslog(3), with a few important differences: @@ -3929,6 +4072,88 @@ option is set to 0 (or negated with a \(oq\&!\(cq), word wrap will be disabled. +.SH "I/O LOG FILES" +When I/O logging is enabled, +\fBsudo\fR +will run the command in a pseudo-tty and log all user input and/or output. +I/O is logged to the directory specified by the +\fIiolog_dir\fR +option +(\fI@iolog_dir@\fR +by default) +using a unique session ID that is included in the +\fBsudo\fR +log line, prefixed with +\(Lq\fRTSID=\fR\(Rq. +The +\fIiolog_file\fR +option may be used to control the format of the session ID. +.PP +Each I/O log is stored in a separate directory that contains the +following files: +.TP 10n +\fIlog\fR +a text file containing the time the command was run, the name of the user +who ran +\fBsudo\fR, +the name of the target user, the name of the target group (optional), +the terminal that +\fBsudo\fR +was run from, the number of rows and columns of the terminal, +the working directory the command was run from and the path name of +the command itself (with arguments if present) +.TP 10n +\fItiming\fR +a log of the amount of time between, and the number of bytes in, each +I/O log entry (used for session playback) +.TP 10n +\fIttyin\fR +input from the user's tty (what the user types) +.TP 10n +\fIstdin\fR +input from a pipe or file +.TP 10n +\fIttyout\fR +output from the pseudo-tty (what the command writes to the screen) +.TP 10n +\fIstdout\fR +standard output to a pipe or redirected to a file +.TP 10n +\fIstderr\fR +standard error to a pipe or redirected to a file +.PP +All files other than +\fIlog\fR +are compressed in gzip format unless the +\fIcompress_io\fR +option has been disabled. +Due to buffering, the I/O log data will not be complete until the +\fBsudo\fR +command has completed. +The output portion of an I/O log file can be viewed with the +sudoreplay(@mansectsu@) +utility, which can also be used to list or search the available logs. +.PP +Note that user input may contain sensitive information such as +passwords (even if they are not echoed to the screen), which will +be stored in the log file unencrypted. +In most cases, logging the command output via +\fIlog_output\fR +or +\fRLOG_OUTPUT\fR +is all that is required. +.PP +Since each session's I/O logs are stored in a separate directory, +traditional log rotation utilities cannot be used to limit the +number of I/O logs. +The simplest way to limit the number of I/O is by setting the +\fImaxseq\fR +option to the maximum number of logs you wish to store. +Once the I/O log sequence number reaches +\fImaxseq\fR, +it will be reset to zero and +\fBsudoers\fR +will truncate and re-use any existing I/O logs. .SH "FILES" .TP 26n \fI@sysconfdir@/sudo.conf\fR @@ -3948,12 +4173,12 @@ .TP 26n \fI@rundir@/ts\fR Directory containing time stamps for the -\fIsudoers\fR +\fBsudoers\fR security policy .TP 26n \fI@vardir@/lectured\fR Directory containing lecture status files for the -\fIsudoers\fR +\fBsudoers\fR security policy .TP 26n \fI/etc/environment\fR @@ -3963,7 +4188,7 @@ .SH "EXAMPLES" Below are example \fIsudoers\fR -entries. +file entries. Admittedly, some of these are a bit contrived. First, we allow a few environment variables to pass and then define our \fIaliases\fR: @@ -4205,9 +4430,27 @@ root on the \fIHPPA\fR machines. -Note that this assumes +Because command line arguments are matched as a single, +concatenated string, the +\(oq*\(cq +wildcard will match +\fImultiple\fR +words. +This example assumes that passwd(1) does not take multiple user names on the command line. +Note that on GNU systems, options to +passwd(1) +may be specified after the user argument. +As a result, this rule will also allow: +.nf +.sp +.RS 4n +passwd username --expire +.RE +.fi +.PP +which may not be desirable. .nf .sp .RS 0n @@ -4241,7 +4484,7 @@ netgroup. \fBsudo\fR knows that -\(lqbiglab\(rq +\(Lqbiglab\(Rq is a netgroup due to the \(oq+\(cq prefix. @@ -4367,7 +4610,7 @@ .sp .RS 0n ALL CDROM = NOPASSWD: /sbin/umount /CDROM,\e - /sbin/mount -o nosuid\,nodev /dev/cd0a /CDROM + /sbin/mount -o nosuid\e,nodev /dev/cd0a /CDROM .RE .fi .PP @@ -4379,7 +4622,7 @@ .SH "SECURITY NOTES" .SS "Limitations of the \(oq!\&\(cq operator" It is generally not effective to -\(lqsubtract\(rq +\(Lqsubtract\(Rq commands from \fBALL\fR using the @@ -4425,7 +4668,7 @@ .PP For example, given the following \fIsudoers\fR -entry: +file entry: .nf .sp .RS 0n @@ -4550,19 +4793,34 @@ (see below). .SS "Secure editing" The -\fIsudoers\fR +\fBsudoers\fR plugin includes \fBsudoedit\fR support which allows users to securely edit files with the editor of their choice. As \fBsudoedit\fR -is a built-in command, it must be specified in +is a built-in command, it must be specified in the \fIsudoers\fR -without a leading path. +file without a leading path. However, it may take command line arguments just as a normal command does. +Wildcards used in +\fIsudoedit\fR +command line arguments are expected to be path names, so a forward slash +(\(oq/\(cq) +will not be matched by a wildcard. +.PP +Unlike other +\fBsudo\fR +commands, the editor is run with the permissions of the invoking +user and with the environment unmodified. +More information may be found in the description of the +\fB\-e\fR +option in +sudo(@mansectsu@). +.PP For example, to allow user operator to edit the -\(lqmessage of the day\(rq +\(Lqmessage of the day\(Rq file: .nf .sp @@ -4586,8 +4844,36 @@ After the file has been edited, \fI/etc/motd\fR will be updated with the contents of the temporary copy. -.SS "Time stamp file checks" +.PP +Users should +\fInever\fR +be granted +\fBsudoedit\fR +permission to edit a file that resides in a directory the user +has write access to, either directly or via a wildcard. +If the user has write access to the directory it is possible to +replace the legitimate file with a link to another file, +allowing the editing of arbitrary files. +To prevent this, starting with version 1.8.16, symbolic links will +not be followed in writable directories and +\fBsudoedit\fR +will refuse to edit a file located in a writable directory +unless the +\fIsudoedit_checkdir\fR +option has been disabled or the invoking user is root. +Additionally, in version 1.8.15 and higher, +\fBsudoedit\fR +will refuse to open a symbolic link unless either the +\fIsudoedit_follow\fR +option is enabled or the +\fIsudoedit\fR +command is prefixed with the +\fRFOLLOW\fR +tag in the \fIsudoers\fR +file. +.SS "Time stamp file checks" +\fBsudoers\fR will check the ownership of its time stamp directory (\fI@rundir@/ts\fR by default) @@ -4607,14 +4893,14 @@ \fI/var/run\fR directory. To avoid potential problems, -\fIsudoers\fR +\fBsudoers\fR will ignore time stamp files that date from before the machine booted on systems where the boot time is available. .PP Some systems with graphical desktop environments allow unprivileged users to change the system clock. Since -\fIsudoers\fR +\fBsudoers\fR relies on the system clock for time stamp validation, it may be possible on such systems for a user to run \fBsudo\fR @@ -4622,16 +4908,16 @@ \fItimestamp_timeout\fR by setting the clock back. To combat this, -\fIsudoers\fR +\fBsudoers\fR uses a monotonic clock (which never moves backwards) for its time stamps if the system supports it. .PP -\fIsudoers\fR +\fBsudoers\fR will not honor time stamps set far in the future. Time stamps with a date greater than current_time + 2 * \fRTIMEOUT\fR will be ignored and -\fIsudoers\fR +\fBsudoers\fR will log and complain. .PP Since time stamp files live in the file system, they can outlive a @@ -4642,8 +4928,9 @@ \fBsudo\fR without authenticating so long as the record's time stamp is within \fR@timeout@\fR -minutes (or whatever value the timeout is set to in -\fIsudoers\fR). +minutes (or whatever value the timeout is set to in the +\fIsudoers\fR +file). When the \fItty_tickets\fR option is enabled, the time stamp record includes the device @@ -4712,6 +4999,7 @@ .TP 10n \fIdefaults\fR \fIsudoers\fR +file \fIDefaults\fR settings .TP 10n @@ -4725,15 +5013,16 @@ logging support .TP 10n \fImatch\fR -matching of users, groups, hosts and netgroups in +matching of users, groups, hosts and netgroups in the \fIsudoers\fR +file .TP 10n \fInetif\fR network interface handling .TP 10n \fInss\fR network service switch handling in -\fIsudoers\fR +\fBsudoers\fR .TP 10n \fIparser\fR \fIsudoers\fR @@ -4781,9 +5070,23 @@ strftime(3), sudo.conf(@mansectform@), sudoers.ldap(@mansectform@), -sudo_plugin(@mansectsu@), sudo(@mansectsu@), +sudo_plugin(@mansectsu@), visudo(@mansectsu@) +.SH "AUTHORS" +Many people have worked on +\fBsudo\fR +over the years; this version consists of code written primarily by: +.sp +.RS 6n +Todd C. Miller +.RE +.PP +See the CONTRIBUTORS file in the +\fBsudo\fR +distribution (https://www.sudo.ws/contributors.html) for an +exhaustive list of people who have contributed to +\fBsudo\fR. .SH "CAVEATS" The \fIsudoers\fR @@ -4793,9 +5096,9 @@ \fBvisudo\fR command which locks the file and does grammatical checking. It is -imperative that +imperative that the \fIsudoers\fR -be free of syntax errors since +file be free of syntax errors since \fBsudo\fR will not run with a syntactically incorrect \fIsudoers\fR @@ -4813,18 +5116,18 @@ .SH "BUGS" If you feel you have found a bug in \fBsudo\fR, -please submit a bug report at http://bugzilla.sudo.ws/ +please submit a bug report at https://bugzilla.sudo.ws/ .SH "SUPPORT" Limited free support is available via the sudo-users mailing list, -see http://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or +see https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search the archives. .SH "DISCLAIMER" \fBsudo\fR is provided -\(lqAS IS\(rq +\(LqAS IS\(Rq and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the LICENSE file distributed with \fBsudo\fR -or http://www.sudo.ws/license.html for complete details. +or https://www.sudo.ws/license.html for complete details. diff -Nru sudo-1.8.12/doc/sudoers.mdoc.in sudo-1.8.16/doc/sudoers.mdoc.in --- sudo-1.8.12/doc/sudoers.mdoc.in 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/doc/sudoers.mdoc.in 2016-03-17 16:13:10.000000000 +0000 @@ -1,5 +1,5 @@ .\" -.\" Copyright (c) 1994-1996, 1998-2005, 2007-2015 +.\" Copyright (c) 1994-1996, 1998-2005, 2007-2016 .\" Todd C. Miller .\" .\" Permission to use, copy, modify, and distribute this software for any @@ -19,7 +19,7 @@ .\" Agency (DARPA) and Air Force Research Laboratory, Air Force .\" Materiel Command, USAF, under agreement number F39502-99-1-0512. .\" -.Dd February 6, 2015 +.Dd January 20, 2016 .Dt SUDOERS @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -42,7 +42,7 @@ .Sx SUDOERS FILE FORMAT section. For information on storing -.Em sudoers +.Nm sudoers policy information in LDAP, please see .Xr sudoers.ldap @mansectform@ . @@ -124,9 +124,9 @@ For more information on configuring .Xr sudo.conf @mansectform@ , please refer to its manual. -.Ss Authentication and logging +.Ss User Authentication The -.Em sudoers +.Nm sudoers security policy requires that most users authenticate themselves before they can use .Nm sudo . @@ -137,7 +137,7 @@ Unlike .Xr su 1 , when -.Em sudoers +.Nm sudoers requires authentication, it validates the invoking user's credentials, not the target user's (or root's) credentials. @@ -186,7 +186,7 @@ .Ev SUDO_USER environment variable is set, the -.Em sudoers +.Nm sudoers policy will use this value to determine who the actual user is. This can be used by a user to log commands @@ -198,10 +198,10 @@ sudo-run script or program. Note, however, that the .Em sudoers -lookup is still done for root, not the user specified by +file lookup is still done for root, not the user specified by .Ev SUDO_USER . .Pp -.Em sudoers +.Nm sudoers uses per-user time stamp files for credential caching. Once a user has been authenticated, a record is written containing the uid that was used to authenticate, the @@ -217,21 +217,21 @@ option .Pc . By default, -.Em sudoers +.Nm sudoers uses a separate record for each tty, which means that a user's login sessions are authenticated separately. The .Em tty_tickets option can be disabled to force the use of a single time stamp for all of a user's sessions. -.Pp -.Em sudoers +.Ss Logging +.Nm sudoers can log both successful and unsuccessful attempts (as well as errors) to .Xr syslog 3 , a log file, or both. By default, -.Em sudoers +.Nm sudoers will log via .Xr syslog 3 but this is changeable via the @@ -239,28 +239,36 @@ and .Em logfile Defaults settings. +See +.Sx "LOG FORMAT" +for a description of the log file format. .Pp -.Em sudoers -also supports logging a command's input and output -streams. +.Nm sudoers +is also capable of running a command in a pseudo-tty and logging all +input and/or output. +The standard input, standard output and standard error can be logged +even when not associated with a terminal. I/O logging is not on by default but can be enabled using the .Em log_input and .Em log_output -Defaults flags as well as the +options as well as the .Li LOG_INPUT and .Li LOG_OUTPUT command tags. +See +.Sx "I/O LOG FILES" +for details on how I/O log files are stored. .Ss Command environment Since environment variables can influence program behavior, -.Em sudoers +.Nm sudoers provides a means to restrict which variables from the user's environment are inherited by the command to be run. There are two distinct ways -.Em sudoers +.Nm sudoers can deal with environment variables. .Pp By default, the @@ -410,7 +418,7 @@ .Fl i option (initial login) is specified, -.Em sudoers +.Nm sudoers will initialize the environment regardless of the value of .Em env_reset . @@ -462,7 +470,7 @@ .Pp The .Em sudoers -grammar will be described below in Extended Backus-Naur +file grammar will be described below in Extended Backus-Naur Form (EBNF). Don't despair if you are unfamiliar with EBNF; it is fairly simple, and the definitions below are annotated. @@ -558,6 +566,12 @@ Alias_Type NAME = item1, item2, item3 : NAME = item4, item5 .Ed .Pp +It is a syntax error to redefine an existing +.Em alias . +It is possible to use the same name for +.Em aliases +of different types, but this is not recommended. +.Pp The definitions of what constitutes a valid .Em alias member follow. @@ -599,6 +613,8 @@ .Ql \&! operators negate the value of the item; an even number just cancel each other out. +User netgroups are matched using the user and domain members only; +the host member is not used when matching. .Pp A .Li user name , @@ -694,13 +710,14 @@ Again, the value of an item may be negated with the .Ql \&! operator. -If you do not specify a netmask along with the network number, +Host netgroups are matched using the host (both qualified and unqualified) +and domain members only; the user member is not used when matching. +If you specify a network number without a netmask, .Nm sudo will query each of the local host's network interfaces and, if the network number corresponds to one of the hosts's network -interfaces, the corresponding netmask will be used. -The netmask -may be specified either in standard IP address notation +interfaces, will use the netmask of that interface. +The netmask may be specified either in standard IP address notation (e.g.\& 255.255.255.0 or ffff:ffff:ffff:ffff::), or CIDR notation (number of bits, e.g.\& 24 or 64). A host name may include shell-style wildcards (see the @@ -794,9 +811,9 @@ .Dq Li sudoedit is a command built into .Nm sudo -itself and must be specified in +itself and must be specified in the .Em sudoers -without a leading path. +file without a leading path. .Pp If a .Li command name @@ -804,9 +821,6 @@ .Li Digest_Spec , the command will only match successfully if it can be verified using the specified SHA-2 digest. -This may be useful in situations where the user invoking -.Nm sudo -has write access to the command or its parent directory. The following digest formats are supported: sha224, sha256, sha384 and sha512. The string may be specified in either hex or base64 format (base64 is more compact). @@ -825,6 +839,15 @@ EYGH2oNk1JC0p9679IMATo8+BT7JVDCd4sQaJQ== .Ed .Pp +Warning, if the user has write access to the command itself (directly or via a +.Nm sudo +command), it may be possible for the user to replace the command after the +digest check has been performed but before the command is executed. +A similar race condition exists on systems that lack the +.Xr fexecve 2 +system call when the directory in which the command is located +is writable by the user. +.Pp Command digests are only supported by version 1.8.7 or higher. .Ss Defaults Certain configuration options may be changed from their default @@ -908,9 +931,10 @@ Solaris_Priv_Spec ::= ('PRIVS=privset' | 'LIMITPRIVS=privset') -Tag_Spec ::= ('NOPASSWD:' | 'PASSWD:' | 'NOEXEC:' | 'EXEC:' | - 'SETENV:' | 'NOSETENV:' | 'LOG_INPUT:' | 'NOLOG_INPUT:' | - 'LOG_OUTPUT:' | 'NOLOG_OUTPUT:') +Tag_Spec ::= ('EXEC:' | 'NOEXEC:' | 'FOLLOW:' | 'NOFOLLOW' | + 'LOG_INPUT:' | 'NOLOG_INPUT:' | 'LOG_OUTPUT:' | + 'NOLOG_OUTPUT:' | 'MAIL:' | 'NOMAIL:' | 'PASSWD:' | + 'NOPASSWD:' | 'SETENV:' | 'NOSETENV:') .Ed .Pp A @@ -1080,7 +1104,7 @@ .Ss SELinux_Spec On systems with SELinux support, .Em sudoers -entries may optionally have an SELinux role and/or type associated +file entries may optionally have an SELinux role and/or type associated with a command. If a role or type is specified with the command it will override any default values @@ -1092,7 +1116,7 @@ .Ss Solaris_Priv_Spec On Solaris systems, .Em sudoers -entries may optionally specify Solaris privilege set and/or limit +file entries may optionally specify Solaris privilege set and/or limit privilege set associated with a command. If privileges or limit privileges are specified with the command it will override any default values specified in @@ -1131,17 +1155,21 @@ A command may have zero or more tags associated with it. There are ten possible tag values: -.Li NOPASSWD , -.Li PASSWD , -.Li NOEXEC , .Li EXEC , -.Li SETENV , -.Li NOSETENV , +.Li NOEXEC , +.Li FOLLOW , +.Li NOFOLLOW , .Li LOG_INPUT , .Li NOLOG_INPUT , -.Li LOG_OUTPUT +.Li LOG_OUTPUT , +.Li NOLOG_OUTPUT , +.Li MAIL , +.Li NOMAIL , +.Li PASSWD , +.Li NOPASSWD , +.Li SETENV , and -.Li NOLOG_OUTPUT . +.Li NOSETENV . Once a tag is set on a .Li Cmnd , subsequent @@ -1157,7 +1185,100 @@ overrides .Li EXEC ) . .Bl -hang -width 0n -.It Em NOPASSWD No and Em PASSWD +.It Em EXEC No and Em NOEXEC +.sp +If +.Nm sudo +has been compiled with +.Em noexec +support and the underlying operating system supports it, the +.Li NOEXEC +tag can be used to prevent a dynamically-linked executable from +running further commands itself. +.Pp +In the following example, user +.Sy aaron +may run +.Pa /usr/bin/more +and +.Pa /usr/bin/vi +but shell escapes will be disabled. +.Bd -literal +aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi +.Ed +.Pp +See the +.Sx Preventing shell escapes +section below for more details on how +.Li NOEXEC +works and whether or not it will work on your system. +.It Em FOLLOW No and Em NOFOLLOW +Starting with version 1.8.15, +.Nm sudoedit +will not open a file that is a symbolic link unless the +.Em sudoedit_follow +option is enabled. +The +.Em FOLLOW +and +.Em NOFOLLOW +tags override the value of +.Em sudoedit_follow +and can be used to permit (or deny) the editing of symbolic links +on a per-command basis. +These tags are only effective for the +.Em sudoedit +command and are ignored for all other commands. +.It Em LOG_INPUT No and Em NOLOG_INPUT +.sp +These tags override the value of the +.Em log_input +option on a per-command basis. +For more information, see the description of +.Em log_input +in the +.Sx SUDOERS OPTIONS +section below. +.It Em LOG_OUTPUT No and Em NOLOG_OUTPUT +.sp +These tags override the value of the +.Em log_output +option on a per-command basis. +For more information, see the description of +.Em log_output +in the +.Sx SUDOERS OPTIONS +section below. +.It Em MAIL No and Em NOMAIL +.sp +These tags provide fine-grained control over whether +mail will be sent when a user runs a command by +overriding the value of the +.Em mail_all_cmnds +option on a per-command basis. +They have no effect when +.Nm sudo +is run with the +.Fl l +or +.Fl v +options. +A +.Em NOMAIL +tag will also override the +.Em mail_always +and +.Em mail_no_perms +options. +For more information, see the descriptions of +.Em mail_all_cmnds , +.Em mail_always , +and +.Em mail_no_perms +in the +.Sx SUDOERS OPTIONS +section below. +.It Em PASSWD No and Em NOPASSWD .sp By default, .Nm sudo @@ -1223,33 +1344,6 @@ and .Em listpw options. -.It Em NOEXEC No and Em EXEC -.sp -If -.Nm sudo -has been compiled with -.Em noexec -support and the underlying operating system supports it, the -.Li NOEXEC -tag can be used to prevent a dynamically-linked executable from -running further commands itself. -.Pp -In the following example, user -.Sy aaron -may run -.Pa /usr/bin/more -and -.Pa /usr/bin/vi -but shell escapes will be disabled. -.Bd -literal -aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi -.Ed -.Pp -See the -.Sx Preventing shell escapes -section below for more details on how -.Li NOEXEC -works and whether or not it will work on your system. .It Em SETENV No and Em NOSETENV .sp These tags override the value of the @@ -1276,26 +1370,6 @@ tag is implied for that command; this default may be overridden by use of the .Li NOSETENV tag. -.It Em LOG_INPUT No and Em NOLOG_INPUT -.sp -These tags override the value of the -.Em log_input -option on a per-command basis. -For more information, see the description of -.Em log_input -in the -.Sx SUDOERS OPTIONS -section below. -.It Em LOG_OUTPUT No and Em NOLOG_OUTPUT -.sp -These tags override the value of the -.Em log_output -option on a per-command basis. -For more information, see the description of -.Em log_output -in the -.Sx SUDOERS OPTIONS -section below. .El .Ss Wildcards .Nm sudo @@ -1311,19 +1385,16 @@ .Xr fnmatch 3 functions as specified by .St -p1003.1 . -Note that these are -.Em not -regular expressions. .Bl -tag -width 8n .It Li * -Matches any set of zero or more characters. +Matches any set of zero or more characters (including white space). .It Li \&? -Matches any single character. +Matches any single character (including white space). .It Li [...] Matches any character in the specified range. .It Li [!...] Matches any character -.Sy not +.Em not in the specified range. .It Li \ex For any character @@ -1338,7 +1409,13 @@ .Ql ]\& . .El .Pp -Character classes may also be used if your system's +.Bf -symbolic +Note that these are not regular expressions. +.Ef +Unlike a regular expression there is no way to match one or more +characters within a range. +.Pp +Character classes may be used if your system's .Xr glob 3 and .Xr fnmatch 3 @@ -1351,7 +1428,7 @@ escaped. For example: .Bd -literal -offset 4n -/bin/ls [[:\&alpha:\&]]* +/bin/ls [[\e:\&alpha\e:\&]]* .Ed .Pp Would match any file name beginning with a letter. @@ -1359,9 +1436,9 @@ Note that a forward slash .Pq Ql / will -.Sy not +.Em not be matched by -wildcards used in the path name. +wildcards used in the file name portion of the command. This is to make a path like: .Bd -literal -offset 4n /usr/bin/* @@ -1373,17 +1450,20 @@ .Pa /usr/bin/X11/xterm . .Pp When matching the command line arguments, however, a slash -.Sy does +.Em does get matched by wildcards since command line arguments may contain arbitrary strings and not just path names. .Pp +.Bf -symbolic Wildcards in command line arguments should be used with care. -Because command line arguments are matched as a single, concatenated -string, a wildcard such as +.Ef +.br +Command line arguments are matched as a single, concatenated string. +This mean a wildcard character such as .Ql \&? or .Ql * -can match multiple words. +will match across word boundaries, which may be unexpected. For example, while a sudoers entry like: .Bd -literal -offset 4n %operator ALL = /bin/cat /var/log/messages* @@ -1400,6 +1480,10 @@ .Ed .Pp which is probably not what was intended. +In most cases it is better to do command line processing +outside of the +.Em sudoers +file in a scripting language. .Ss Exceptions to wildcard rules The following exceptions apply to the above rules: .Bl -tag -width 8n @@ -1408,8 +1492,8 @@ .Li \&"" is the only command line argument in the .Em sudoers -entry it means that command is not allowed to be run with -.Sy any +file entry it means that command is not allowed to be run with +.Em any arguments. .It sudoedit Command line arguments to the @@ -1434,7 +1518,7 @@ file in addition to a local, per-machine file. For the sake of this example the site-wide .Em sudoers -will be +file will be .Pa /etc/sudoers and the per-machine one will be .Pa /etc/sudoers.local . @@ -1500,8 +1584,7 @@ .Pa sudoers.d directory that the system package manager can drop .Em sudoers -rules -into as part of package installation. +file rules into as part of package installation. For example, given: .Bd -literal -offset 4n #includedir /etc/sudoers.d @@ -1524,7 +1607,7 @@ Be aware that because the sorting is lexical, not numeric, .Pa /etc/sudoers.d/1_whoops would be loaded -.Sy after +.Em after .Pa /etc/sudoers.d/10_second . Using a consistent number of leading zeroes in the file names can be used to avoid such problems. @@ -1539,7 +1622,10 @@ .Nm visudo with the .Fl f -flag to edit the files directly. +flag to edit the files directly, but this will not catch the +redefinition of an +.Em alias +that is also present in a different file. .Ss Other special characters and reserved words The pound sign .Pq Ql # @@ -1569,7 +1655,7 @@ Please note that using .Sy ALL can be dangerous since in a command context, it allows the user to run -.Sy any +.Em any command on the system. .Pp An exclamation point @@ -1645,6 +1731,16 @@ .Pp .Sy Boolean Flags : .Bl -tag -width 16n +.It always_query_group_plugin +If a +.Em group_plugin +is configured, use it to resolve groups of the form %group as long +as there is not also a system group of the same name. +Normally, only groups of the form %:group are passed to the +.Em group_plugin . +This flag is +.Em off +by default. .It always_set_home If enabled, .Nm sudo @@ -1657,13 +1753,13 @@ This effectively means that the .Fl H option is always implied. -Note that +Note that by default, .Ev HOME -is already set when the +will be set to the home directory of the target user when the .Em env_reset option is enabled, so .Em always_set_home -is only effective for configurations where either +only has an effect for configurations where either .Em env_reset is disabled or .Ev HOME @@ -1707,17 +1803,6 @@ is compiled with .Sy zlib support. -.It use_netgroups -If set, netgroups (prefixed with -.Ql + ) , -may be used in place of a user or host. -For LDAP-based sudoers, netgroup support requires an expensive -substring match on the server. -If netgroups are not needed, this option can be disabled to reduce the -load on the LDAP server. -This flag is -.Em on -by default. .It exec_background By default, .Nm sudo @@ -1826,11 +1911,13 @@ specified by the .Em env_file option (if any). -The default contents of the +The contents of the .Li env_keep and .Li env_check -lists are displayed when +lists, as modified by global Defaults parameters in +.Em sudoers , +are displayed when .Nm sudo is run by root with the .Fl V @@ -1871,9 +1958,9 @@ characters are used with the negation operator, .Ql !\& , as such rules can be trivially bypassed. -As such, this option should not be used when +As such, this option should not be used when the .Em sudoers -contains rules that contain negated path names which include globbing +file contains rules that contain negated path names which include globbing characters. This flag is .Em off @@ -1997,71 +2084,29 @@ .It log_input If set, .Nm sudo -will run the command in a -.Em pseudo tty -and log all user input. +will run the command in a pseudo-tty and log all user input. If the standard input is not connected to the user's tty, due to I/O redirection or because the command is part of a pipeline, that input is also captured and stored in a separate log file. +For more information, see the +.Sx "I/O LOG FILES" +section. This flag is .Em off by default. -.Pp -Input is logged to the directory specified by the -.Em iolog_dir -option -.Po -.Pa @iolog_dir@ -by default -.Pc -using a unique session ID that is included in the normal -.Nm sudo -log line, prefixed with -.Dq Li TSID= . -The -.Em iolog_file -option may be used to control the format of the session ID. -.Pp -Note that user input may contain sensitive information such as -passwords (even if they are not echoed to the screen), which will -be stored in the log file unencrypted. -In most cases, logging the command output via -.Em log_output -is all that is required. .It log_output If set, .Nm sudo -will run the command in a -.Em pseudo tty -and log all output that is sent to the screen, similar to the +will run the command in a pseudo-tty and log all output that is sent +to the screen, similar to the .Xr script 1 command. -If the standard output or standard error is not connected to the -user's tty, due to I/O redirection or because the command is part -of a pipeline, that output is also captured and stored in separate -log files. +For more information, see the +.Sx "I/O LOG FILES" +section. This flag is .Em off by default. -.Pp -Output is logged to the directory specified by the -.Em iolog_dir -option -.Po -.Pa @iolog_dir@ -by default -.Pc -using a unique session ID that is included in the normal -.Nm sudo -log line, prefixed with -.Dq Li TSID= . -The -.Em iolog_file -option may be used to control the format of the session ID. -.Pp -Output logs may be viewed with the -.Xr sudoreplay @mansectsu@ -utility, which can also be used to list or search the available logs. .It log_year If set, the four-digit year will be logged in the (non-syslog) .Nm sudo @@ -2080,19 +2125,30 @@ This flag is .Em @long_otp_prompt@ by default. -.It mail_always +.It mail_all_cmnds Send mail to the .Em mailto user every time a user attempts to run a command via -.Nm sudo . -Mail will be sent for both successful and unsuccessful attempts. +.Nm sudo +(this includes +.Nm sudoedit ) . No mail will be sent if the user runs .Nm sudo with the .Fl l or .Fl v -option unless there is an authentication error. +option unless there is an authentication error and the +.Em mail_badpass +flag is also set. +This flag is +.Em off +by default. +.It mail_always +Send mail to the +.Em mailto +user every time a user runs +.Nm sudo . This flag is .Em off by default. @@ -2103,8 +2159,9 @@ .Nm sudo does not enter the correct password. If the command the user is attempting to run is not permitted by -.Em sudoers +.Nm sudoers and one of the +.Em mail_all_cmnds , .Em mail_always , .Em mail_no_host , .Em mail_no_perms @@ -2143,6 +2200,18 @@ This flag is .Em @mail_no_user@ by default. +.It netgroup_tuple +If set, netgroup lookups will be performed using the full netgroup +tuple: host name, user name and domain (if one is set). +Historically, +.Nm sudo +only matched the user name and domain for netgroups used in a +.Li User_List +and only matched the host name and domain for netgroups used in a +.Li Host_List . +This flag is +.Em off +by default. .It noexec If set, all commands run via .Nm sudo @@ -2152,8 +2221,8 @@ .Li EXEC tag. See the description of -.Em NOEXEC and EXEC -below as well as the +.Em EXEC and NOEXEC +above as well as the .Sx Preventing shell escapes section at the end of this manual. This flag is @@ -2363,12 +2432,18 @@ to determine the real identity of the user, it may be desirable to change this behavior. This can be done by negating the set_logname option. -Note that if the +Note that +.Em set_logname +will have no effect +if the .Em env_reset -option has not been disabled, entries in the +option has not been disabled and the .Em env_keep -list will override the value of -.Em set_logname . +list contains +.Ev LOGNAME , +.Ev USER +or +.Ev USERNAME . This flag is .Em on by default. @@ -2439,6 +2514,48 @@ This flag is .Em off by default. +.It sudoedit_checkdir +If set, +.Nm sudoedit +will check all directory components of the path to be edited for writability +by the invoking user. +Symbolic links will not be followed in writable directories and +.Nm sudoedit +will refuse to edit a file located in a writable directory. +These restrictions are not enforced when +.Nm sudoedit +is run by root. +On some systems, if all directory components of the path to be edited +are not readable by the target user, +.Nm sudoedit +will be unable to edit the file. +This flag is +.Em on +by default. +.Pp +This setting was first introduced in version 1.8.15 but initially +suffered from a race condition. +The check for symbolic links in writable intermediate directories +was added in version 1.8.16. +.It sudoedit_follow +By default, +.Nm sudoedit +will not follow symbolic links when opening files. +The +.Em sudoedit_follow +option can be enabled to allow +.Nm sudoedit +to open symbolic links. +It may be overridden on a per-command basis by the +.Em FOLLOW +and +.Em NOFOLLOW +tags. +This flag is +.Em off +by default. +.Pp +This setting is only supported by version 1.8.15 or higher. .It targetpw If set, .Nm sudo @@ -2468,12 +2585,13 @@ .It umask_override If set, .Nm sudo -will set the umask as specified by +will set the umask as specified in the .Em sudoers -without modification. -This makes it possible to specify a more permissive umask in +file without modification. +This makes it possible to specify a umask in the .Em sudoers -than the user's own umask and matches historical behavior. +file that is more permissive than the user's own umask and matches +historical behavior. If .Em umask_override is not set, @@ -2496,6 +2614,21 @@ This flag is .Em off by default. +.It use_netgroups +If set, netgroups (prefixed with +.Ql + ) , +may be used in place of a user or host. +For LDAP-based sudoers, netgroup support requires an expensive +substring match on the server unless the +.Sy NETGROUP_BASE +directive is present in the +.Pa @ldap_conf@ +file. +If netgroups are not needed, this option can be disabled to reduce the +load on the LDAP server. +This flag is +.Em on +by default. .It use_pty If set, .Nm sudo @@ -2552,6 +2685,32 @@ to start closing. The default is .Li 3 . +.It maxseq +The maximum sequence number that will be substituted for the +.Dq Li %{seq} +escape in the I/O log file (see the +.Em iolog_dir +description above for more information). +While the value substituted for +.Dq Li %{seq} +is in base 36, +.Em maxseq +itself should be expressed in decimal. +Values larger than 2176782336 (which corresponds to the +base 36 sequence number +.Dq ZZZZZZ ) +will be silently truncated to 2176782336. +The default value is 2176782336. +.Pp +Once the local sequence number reaches the value of +.Em maxseq , +it will +.Dq roll over +to zero, after which +.Nm +will truncate and re-use any existing I/O log path names. +.Pp +This setting is only supported by version 1.8.7 or higher. .It passwd_tries The number of tries a user gets to enter his/her password before .Nm sudo @@ -2760,32 +2919,6 @@ will expand to the host name of the machine. Default is .Dq Li @mailsub@ . -.It maxseq -The maximum sequence number that will be substituted for the -.Dq Li %{seq} -escape in the I/O log file (see the -.Em iolog_dir -description above for more information). -While the value substituted for -.Dq Li %{seq} -is in base 36, -.Em maxseq -itself should be expressed in decimal. -Values larger than 2176782336 (which corresponds to the -base 36 sequence number -.Dq ZZZZZZ ) -will be silently truncated to 2176782336. -The default value is 2176782336. -.Pp -Once the local sequence number reaches the value of -.Em maxseq , -it will -.Dq roll over -to zero, after which -.Nm -will truncate and re-use any existing I/O log path names. -.Pp -This setting is only supported by version 1.8.7 or higher. .It noexec_file As of .Nm sudo @@ -2876,9 +3009,9 @@ .It role The default SELinux role to use when constructing a new security context to run the command. -The default role may be overridden on a per-command basis in +The default role may be overridden on a per-command basis in the .Em sudoers -or via command line options. +file or via command line options. This option is only available when .Nm sudo is built with SELinux support. @@ -2932,9 +3065,9 @@ .It type The default SELinux type to use when constructing a new security context to run the command. -The default type may be overridden on a per-command basis in +The default type may be overridden on a per-command basis in the .Em sudoers -or via command line options. +file or via command line options. This option is only available when .Nm sudo is built with SELinux support. @@ -2966,7 +3099,7 @@ This is not set by default. .It group_plugin A string containing a -.Em sudoers +.Nm sudoers group plugin with optional arguments. The string should consist of the plugin path, either fully-qualified or relative to the @@ -3019,7 +3152,7 @@ .It all All the user's .Em sudoers -entries for the current host must have +file entries for the current host must have the .Li NOPASSWD flag set to avoid entering a password. @@ -3030,7 +3163,7 @@ .It any At least one of the user's .Em sudoers -entries for the current host +file entries for the current host must have the .Li NOPASSWD flag set to avoid entering a password. @@ -3138,7 +3271,7 @@ .It all All the user's .Em sudoers -entries for the current host must have the +file entries for the current host must have the .Li NOPASSWD flag set to avoid entering a password. .It always @@ -3148,7 +3281,7 @@ .It any At least one of the user's .Em sudoers -entries for the current host must have the +file entries for the current host must have the .Li NOPASSWD flag set to avoid entering a password. .It never @@ -3170,7 +3303,7 @@ .Sy Lists that can be used in a boolean context : .Bl -tag -width 16n .It env_check -Environment variables to be removed from the user's environment if +Environment variables to be removed from the user's environment unless they are considered .Dq safe . For all variables except @@ -3184,12 +3317,14 @@ This can be used to guard against printf-style format vulnerabilities in poorly-written programs. The -.Li TZ +.Li TZ variable is considered unsafe if any of the following are true: .Bl -bullet .It -It consists of a fully-qualified path name that does not match -the location of the +It consists of a fully-qualified path name, +optionally prefixed with a colon +.Pq Ql :\& , +that does not match the location of the .Pa zoneinfo directory. .It @@ -3218,7 +3353,7 @@ option is enabled or disabled, variables specified by .Li env_check will be preserved in the environment if they pass the aforementioned check. -The default list of environment variables to check is displayed when +The global list of environment variables to check is displayed when .Nm sudo is run by root with the @@ -3237,7 +3372,7 @@ and .Li \&! operators respectively. -The default list of environment variables to remove is displayed when +The global list of environment variables to remove is displayed when .Nm sudo is run by root with the .Fl V @@ -3261,7 +3396,7 @@ and .Li \&! operators respectively. -The default list of variables to keep +The global list of variables to keep is displayed when .Nm sudo is run by root with the @@ -3328,7 +3463,7 @@ can log events using either .Xr syslog 3 or a simple log file. -In each case the log format is almost identical. +The log format is almost identical in both cases. .Ss Accepted command log entries Commands that sudo runs are logged using the following format (split into multiple lines for readability): @@ -3472,9 +3607,9 @@ a different value. Normally, .Nm -tries to open +tries to open the .Em sudoers -using group permissions to avoid this problem. +file using group permissions to avoid this problem. Consider either changing the ownership of .Pa @sysconfdir@/sudoers or adding an argument like @@ -3550,7 +3685,7 @@ .Xr sudo.conf @mansectform@ file. .It unable to open @rundir@/ts/username -.Em sudoers +.Nm sudoers was unable to read or create the user's time stamp file. This can happen when .Em timestampowner @@ -3561,7 +3696,7 @@ .Pa @rundir@ is 0711. .It unable to write to @rundir@/ts/username -.Em sudoers +.Nm sudoers was unable to write to the user's time stamp file. .It @rundir@/ts is owned by uid X, should be Y The time stamp directory is owned by a user other than @@ -3569,18 +3704,18 @@ This can occur when the value of .Em timestampowner has been changed. -.Em sudoers +.Nm sudoers will ignore the time stamp directory until the owner is corrected. .It @rundir@/ts is group writable The time stamp directory is group-writable; it should be writable only by .Em timestampowner . The default mode for the time stamp directory is 0700. -.Em sudoers +.Nm sudoers will ignore the time stamp directory until the mode is corrected. .El .Ss Notes on logging via syslog By default, -.Em sudoers +.Nm sudoers logs messages via .Xr syslog 3 . The @@ -3589,7 +3724,7 @@ and .Em progname fields are added by the syslog daemon, not -.Em sudoers +.Nm sudoers itself. As such, they may vary in format on different systems. .Pp @@ -3608,11 +3743,11 @@ If the .Em logfile option is set, -.Em sudoers +.Nm sudoers will log to a local file, such as .Pa /var/log/sudo . When logging to a file, -.Em sudoers +.Nm sudoers uses a format similar to .Xr syslog 3 , with a few important differences: @@ -3643,6 +3778,85 @@ .Ql \&! ) , word wrap will be disabled. .El +.Sh I/O LOG FILES +When I/O logging is enabled, +.Nm sudo +will run the command in a pseudo-tty and log all user input and/or output. +I/O is logged to the directory specified by the +.Em iolog_dir +option +.Po +.Pa @iolog_dir@ +by default +.Pc +using a unique session ID that is included in the +.Nm sudo +log line, prefixed with +.Dq Li TSID= . +The +.Em iolog_file +option may be used to control the format of the session ID. +.Pp +Each I/O log is stored in a separate directory that contains the +following files: +.Bl -tag -width 8n +.It Pa log +a text file containing the time the command was run, the name of the user +who ran +.Nm sudo , +the name of the target user, the name of the target group (optional), +the terminal that +.Nm sudo +was run from, the number of rows and columns of the terminal, +the working directory the command was run from and the path name of +the command itself (with arguments if present) +.It Pa timing +a log of the amount of time between, and the number of bytes in, each +I/O log entry (used for session playback) +.It Pa ttyin +input from the user's tty (what the user types) +.It Pa stdin +input from a pipe or file +.It Pa ttyout +output from the pseudo-tty (what the command writes to the screen) +.It Pa stdout +standard output to a pipe or redirected to a file +.It Pa stderr +standard error to a pipe or redirected to a file +.El +.Pp +All files other than +.Pa log +are compressed in gzip format unless the +.Em compress_io +option has been disabled. +Due to buffering, the I/O log data will not be complete until the +.Nm sudo +command has completed. +The output portion of an I/O log file can be viewed with the +.Xr sudoreplay @mansectsu@ +utility, which can also be used to list or search the available logs. +.Pp +Note that user input may contain sensitive information such as +passwords (even if they are not echoed to the screen), which will +be stored in the log file unencrypted. +In most cases, logging the command output via +.Em log_output +or +.Li LOG_OUTPUT +is all that is required. +.Pp +Since each session's I/O logs are stored in a separate directory, +traditional log rotation utilities cannot be used to limit the +number of I/O logs. +The simplest way to limit the number of I/O is by setting the +.Em maxseq +option to the maximum number of logs you wish to store. +Once the I/O log sequence number reaches +.Em maxseq , +it will be reset to zero and +.Nm +will truncate and re-use any existing I/O logs. .Sh FILES .Bl -tag -width 24n .It Pa @sysconfdir@/sudo.conf @@ -3657,11 +3871,11 @@ I/O log files .It Pa @rundir@/ts Directory containing time stamps for the -.Em sudoers +.Nm sudoers security policy .It Pa @vardir@/lectured Directory containing lecture status files for the -.Em sudoers +.Nm sudoers security policy .It Pa /etc/environment Initial environment for @@ -3671,7 +3885,7 @@ .Sh EXAMPLES Below are example .Em sudoers -entries. +file entries. Admittedly, some of these are a bit contrived. First, we allow a few environment variables to pass and then define our .Em aliases : @@ -3886,9 +4100,24 @@ root on the .Em HPPA machines. -Note that this assumes +Because command line arguments are matched as a single, +concatenated string, the +.Ql * +wildcard will match +.Em multiple +words. +This example assumes that .Xr passwd 1 does not take multiple user names on the command line. +Note that on GNU systems, options to +.Xr passwd 1 +may be specified after the user argument. +As a result, this rule will also allow: +.Bd -literal -offset 4n +passwd username --expire +.Ed +.Pp +which may not be desirable. .Bd -literal bob SPARC = (OP) ALL : SGI = (OP) ALL .Ed @@ -4020,7 +4249,7 @@ to www. .Bd -literal ALL CDROM = NOPASSWD: /sbin/umount /CDROM,\e - /sbin/mount -o nosuid\,nodev /dev/cd0a /CDROM + /sbin/mount -o nosuid\e,nodev /dev/cd0a /CDROM .Ed .Pp Any user may mount or unmount a CD-ROM on the machines in the CDROM @@ -4074,7 +4303,7 @@ .Pp For example, given the following .Em sudoers -entry: +file entry: .Bd -literal john ALL = /usr/bin/passwd [a-zA-Z0-9]*, /usr/bin/chsh [a-zA-Z0-9]*,\e /usr/bin/chfn [a-zA-Z0-9]*, !/usr/bin/* root @@ -4191,17 +4420,32 @@ (see below). .Ss Secure editing The -.Em sudoers +.Nm sudoers plugin includes .Nm sudoedit support which allows users to securely edit files with the editor of their choice. As .Nm sudoedit -is a built-in command, it must be specified in +is a built-in command, it must be specified in the .Em sudoers -without a leading path. +file without a leading path. However, it may take command line arguments just as a normal command does. +Wildcards used in +.Em sudoedit +command line arguments are expected to be path names, so a forward slash +.Pq Ql / +will not be matched by a wildcard. +.Pp +Unlike other +.Nm sudo +commands, the editor is run with the permissions of the invoking +user and with the environment unmodified. +More information may be found in the description of the +.Fl e +option in +.Xr sudo @mansectsu@ . +.Pp For example, to allow user operator to edit the .Dq message of the day file: @@ -4221,8 +4465,36 @@ After the file has been edited, .Pa /etc/motd will be updated with the contents of the temporary copy. -.Ss Time stamp file checks +.Pp +Users should +.Em never +be granted +.Nm sudoedit +permission to edit a file that resides in a directory the user +has write access to, either directly or via a wildcard. +If the user has write access to the directory it is possible to +replace the legitimate file with a link to another file, +allowing the editing of arbitrary files. +To prevent this, starting with version 1.8.16, symbolic links will +not be followed in writable directories and +.Nm sudoedit +will refuse to edit a file located in a writable directory +unless the +.Em sudoedit_checkdir +option has been disabled or the invoking user is root. +Additionally, in version 1.8.15 and higher, +.Nm sudoedit +will refuse to open a symbolic link unless either the +.Em sudoedit_follow +option is enabled or the +.Em sudoedit +command is prefixed with the +.Li FOLLOW +tag in the .Em sudoers +file. +.Ss Time stamp file checks +.Nm sudoers will check the ownership of its time stamp directory .Po .Pa @rundir@/ts @@ -4244,14 +4516,14 @@ .Pa /var/run directory. To avoid potential problems, -.Em sudoers +.Nm sudoers will ignore time stamp files that date from before the machine booted on systems where the boot time is available. .Pp Some systems with graphical desktop environments allow unprivileged users to change the system clock. Since -.Em sudoers +.Nm sudoers relies on the system clock for time stamp validation, it may be possible on such systems for a user to run .Nm sudo @@ -4259,16 +4531,16 @@ .Em timestamp_timeout by setting the clock back. To combat this, -.Em sudoers +.Nm sudoers uses a monotonic clock (which never moves backwards) for its time stamps if the system supports it. .Pp -.Em sudoers +.Nm sudoers will not honor time stamps set far in the future. Time stamps with a date greater than current_time + 2 * .Li TIMEOUT will be ignored and -.Em sudoers +.Nm sudoers will log and complain. .Pp Since time stamp files live in the file system, they can outlive a @@ -4279,8 +4551,9 @@ .Nm sudo without authenticating so long as the record's time stamp is within .Li @timeout@ -minutes (or whatever value the timeout is set to in -.Em sudoers ) . +minutes (or whatever value the timeout is set to in the +.Em sudoers +file). When the .Em tty_tickets option is enabled, the time stamp record includes the device @@ -4345,6 +4618,7 @@ user authentication .It Em defaults .Em sudoers +file .Em Defaults settings .It Em env @@ -4354,13 +4628,14 @@ .It Em logging logging support .It Em match -matching of users, groups, hosts and netgroups in +matching of users, groups, hosts and netgroups in the .Em sudoers +file .It Em netif network interface handling .It Em nss network service switch handling in -.Em sudoers +.Nm sudoers .It Em parser .Em sudoers file parsing @@ -4396,9 +4671,22 @@ .Xr strftime 3 , .Xr sudo.conf @mansectform@ , .Xr sudoers.ldap @mansectform@ , -.Xr sudo_plugin @mansectsu@ , .Xr sudo @mansectsu@ , +.Xr sudo_plugin @mansectsu@ , .Xr visudo @mansectsu@ +.Sh AUTHORS +Many people have worked on +.Nm sudo +over the years; this version consists of code written primarily by: +.Bd -ragged -offset indent +.An Todd C. Miller +.Ed +.Pp +See the CONTRIBUTORS file in the +.Nm sudo +distribution (https://www.sudo.ws/contributors.html) for an +exhaustive list of people who have contributed to +.Nm sudo . .Sh CAVEATS The .Em sudoers @@ -4408,9 +4696,9 @@ .Nm visudo command which locks the file and does grammatical checking. It is -imperative that +imperative that the .Em sudoers -be free of syntax errors since +file be free of syntax errors since .Nm sudo will not run with a syntactically incorrect .Em sudoers @@ -4428,10 +4716,10 @@ .Sh BUGS If you feel you have found a bug in .Nm sudo , -please submit a bug report at http://bugzilla.sudo.ws/ +please submit a bug report at https://bugzilla.sudo.ws/ .Sh SUPPORT Limited free support is available via the sudo-users mailing list, -see http://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or +see https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search the archives. .Sh DISCLAIMER .Nm sudo @@ -4442,4 +4730,4 @@ particular purpose are disclaimed. See the LICENSE file distributed with .Nm sudo -or http://www.sudo.ws/license.html for complete details. +or https://www.sudo.ws/license.html for complete details. diff -Nru sudo-1.8.12/doc/sudo.man.in sudo-1.8.16/doc/sudo.man.in --- sudo-1.8.12/doc/sudo.man.in 2014-12-05 00:00:10.000000000 +0000 +++ sudo-1.8.16/doc/sudo.man.in 2016-03-17 16:13:11.000000000 +0000 @@ -1,7 +1,7 @@ .\" DO NOT EDIT THIS FILE, IT IS NOT THE MASTER! .\" IT IS GENERATED AUTOMATICALLY FROM sudo.mdoc.in .\" -.\" Copyright (c) 1994-1996, 1998-2005, 2007-2014 +.\" Copyright (c) 1994-1996, 1998-2005, 2007-2016 .\" 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 "SUDO" "8" "December 4, 2014" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" +.TH "SUDO" "8" "January 19, 2016" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" .nh .if n .ad l .SH "NAME" @@ -89,6 +89,10 @@ \fIcommand\fR as the superuser or another user, as specified by the security policy. +The invoking user's real +(\fInot\fR +effective) user ID is used to determine the user name with which +to query the security policy. .PP \fBsudo\fR supports a plugin architecture for security policies and input/output @@ -191,7 +195,7 @@ \fI/etc/login.conf\fR. The system administrator may specify a list of sudo-specific authentication methods by adding an -\(lqauth-sudo\(rq +\(Lqauth-sudo\(Rq entry in \fI/etc/login.conf\fR. This option is only available on systems that support BSD authentication. @@ -259,13 +263,13 @@ the security policy. If the user is authorized by the policy, the following steps are taken: -.RS 13n +.RS 16n .TP 5n -1. +1.\& Temporary copies are made of the files to be edited with the owner set to the invoking user. .TP 5n -2. +2.\& The editor specified by the policy is run to edit the temporary files. The @@ -286,12 +290,31 @@ sudoers(@mansectform@) option is used. .TP 5n -3. +3.\& If they have been modified, the temporary files are copied back to their original location and the temporary versions are removed. .RE .RS 12n .sp +To help prevent the editing of unauthorized files, the following +restrictions are enforced unless explicitly allowed by the security policy: +.RS 16n +.TP 4n +\fB\(bu\fR +Symbolic links may not be edited (version 1.8.15 and higher). +.TP 4n +\fB\(bu\fR +Symbolic links along the path to be edited are not followed when the +parent directory is writable by the invoking user unless that user +is root (version 1.8.16 and higher). +.TP 4n +\fB\(bu\fR +Files located in a directory that is writable by the invoking user may +not be edited unless that user is root (version 1.8.16 and higher). +.RE +.sp +Users are never allowed to edit device special files. +.sp If the specified file does not exist, it will be created. Note that unlike most commands run by \fIsudo\fR, @@ -544,7 +567,7 @@ \fB\-u\fR \fIuser\fR, \fB\--user\fR=\fIuser\fR Run the command as a user other than the default target user (usually -\fIroot ).\fR +\fIroot\fR). The \fIuser\fR may be either a user name or a numeric user ID @@ -682,7 +705,7 @@ command's exit status to the security policy's close function and exits. If an I/O logging plugin is configured or if the security policy explicitly requests it, a new pseudo-terminal -(\(lqpty\(rq) +(\(Lqpty\(Rq) is created and a second \fBsudo\fR process is used to relay job control signals between the user's @@ -690,7 +713,7 @@ This extra process makes it possible to, for example, suspend and resume the command. Without it, the command would be in what POSIX terms an -\(lqorphaned process group\(rq +\(Lqorphaned process group\(Rq and it would not receive any job control signals. As a special case, if the policy plugin does not define a close function and no pty is required, @@ -717,16 +740,15 @@ process, \fBsudo\fR will relay signals it receives to the command. -Unless the command is being run in a new pty, the -\fRSIGHUP\fR, +The \fRSIGINT\fR and \fRSIGQUIT\fR -signals are not relayed unless they are sent by a user process, -not the kernel. -Otherwise, the command would receive +signals are only relayed when the command is being run in a new pty +or when the signal was sent by a user process, not the kernel. +This prevents the command from receiving \fRSIGINT\fR -twice every time the user entered control-C. +twice each time the user enters control-C. Some signals, such as \fRSIGSTOP\fR and @@ -812,9 +834,12 @@ \fBsudo\fR plugin architecture. .SH "EXIT VALUE" -Upon successful execution of a program, the exit status from -\fIsudo\fR -will simply be the exit status of the program that was executed. +Upon successful execution of a command, the exit status from +\fBsudo\fR +will be the exit status of the program that was executed. +If the command terminated due to receipt of a signal, +\fBsudo\fR +will send itself the signal that terminated the command. .PP Otherwise, \fBsudo\fR @@ -822,21 +847,21 @@ problem or if \fBsudo\fR cannot execute the given command. -In the latter case the error string is printed to the standard error. +In the latter case, the error string is printed to the standard error. If \fBsudo\fR cannot stat(2) one or more entries in the user's \fRPATH\fR, -an error is printed on stderr. +an error is printed to the standard error. (If the directory does not exist or if it is not really a directory, the entry is ignored and no error is printed.) This should not happen under normal circumstances. The most common reason for stat(2) to return -\(lqpermission denied\(rq +\(Lqpermission denied\(Rq is if you are running an automounter and one of the directories in your \fRPATH\fR @@ -860,6 +885,15 @@ \fBsudo\fR executes. .PP +Users should +\fInever\fR +be granted +\fBsudo\fR +privileges to execute files that are writable by the user or +that reside in a directory that is writable by the user. +If the user can modify or replace the command there is no way +to limit what additional commands they can run. +.PP Please note that \fBsudo\fR will normally only log the command it explicitly runs. @@ -887,10 +921,12 @@ \fBsudo\fR disables core dumps by default while it is executing (they are re-enabled for the command that is run). +This historical practice dates from a time when most operating +systems allowed setuid processes to dump core by default. To aid in debugging \fBsudo\fR crashes, you may wish to re-enable core dumps by setting -\(lqdisable_coredump\(rq +\(Lqdisable_coredump\(Rq to false in the sudo.conf(@mansectform@) file as follows: @@ -920,31 +956,59 @@ is set. .TP 17n \fRMAIL\fR -In +Set to the mail spool of the target user when the \fB\-i\fR -mode or when +option is specified or when \fIenv_reset\fR is enabled in -\fIsudoers\fR, -set to the mail spool of the target user. +\fIsudoers\fR +(unless +\fRMAIL\fR +is present in the +\fIenv_keep\fR +list). .TP 17n \fRHOME\fR -Set to the home directory of the target user if +Set to the home directory of the target user when the \fB\-i\fR or \fB\-H\fR -are specified, -\fIenv_reset\fR -or -\fIalways_set_home\fR -are set in -\fIsudoers\fR, -or when the +options are specified, when the \fB\-s\fR option is specified and \fIset_home\fR is set in -\fIsudoers\fR. +\fIsudoers\fR, +when +\fIalways_set_home\fR +is enabled in +\fIsudoers\fR, +or when +\fIenv_reset\fR +is enabled in +\fIsudoers\fR +and +\fIHOME\fR +is not present in the +\fIenv_keep\fR +list. +.TP 17n +\fRLOGNAME\fR +Set to the login name of the target user when the +\fB\-i\fR +option is specified, when the +\fIset_logname\fR +option is enabled in +\fIsudoers\fR +or when the +\fIenv_reset\fR +option is enabled in +\fIsudoers\fR +(unless +\fRLOGNAME\fR +is present in the +\fIenv_keep\fR +list). .TP 17n \fRPATH\fR May be overridden by the security policy. @@ -986,9 +1050,13 @@ Set to the login name of the user who invoked sudo. .TP 17n \fRUSER\fR -Set to the target user (root unless the -\fB\-u\fR -option is specified). +Set to the same value as +\fRLOGNAME\fR, +described above. +.TP 17n +\fRUSERNAME\fR +Same as +\fRUSER\fR. .TP 17n \fRVISUAL\fR Default editor to use in @@ -1080,7 +1148,7 @@ .SH "HISTORY" See the HISTORY file in the \fBsudo\fR -distribution (http://www.sudo.ws/history.html) for a brief +distribution (https://www.sudo.ws/history.html) for a brief history of sudo. .SH "AUTHORS" Many people have worked on @@ -1093,7 +1161,7 @@ .PP See the CONTRIBUTORS file in the \fBsudo\fR -distribution (http://www.sudo.ws/contributors.html) for an +distribution (https://www.sudo.ws/contributors.html) for an exhaustive list of people who have contributed to \fBsudo\fR. .SH "CAVEATS" @@ -1134,18 +1202,18 @@ .SH "BUGS" If you feel you have found a bug in \fBsudo\fR, -please submit a bug report at http://bugzilla.sudo.ws/ +please submit a bug report at https://bugzilla.sudo.ws/ .SH "SUPPORT" Limited free support is available via the sudo-users mailing list, -see http://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or +see https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search the archives. .SH "DISCLAIMER" \fBsudo\fR is provided -\(lqAS IS\(rq +\(LqAS IS\(Rq and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the LICENSE file distributed with \fBsudo\fR -or http://www.sudo.ws/license.html for complete details. +or https://www.sudo.ws/license.html for complete details. diff -Nru sudo-1.8.12/doc/sudo.mdoc.in sudo-1.8.16/doc/sudo.mdoc.in --- sudo-1.8.12/doc/sudo.mdoc.in 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/doc/sudo.mdoc.in 2016-03-17 16:13:10.000000000 +0000 @@ -1,5 +1,5 @@ .\" -.\" Copyright (c) 1994-1996, 1998-2005, 2007-2014 +.\" Copyright (c) 1994-1996, 1998-2005, 2007-2016 .\" Todd C. Miller .\" .\" Permission to use, copy, modify, and distribute this software for any @@ -19,7 +19,7 @@ .\" Agency (DARPA) and Air Force Research Laboratory, Air Force .\" Materiel Command, USAF, under agreement number F39502-99-1-0512. .\" -.Dd December 4, 2014 +.Dd January 19, 2016 .Dt SUDO @mansectsu@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -77,6 +77,10 @@ .Ar command as the superuser or another user, as specified by the security policy. +The invoking user's real +.No ( Em not +effective) user ID is used to determine the user name with which +to query the security policy. .Pp .Nm supports a plugin architecture for security policies and input/output @@ -265,6 +269,22 @@ their original location and the temporary versions are removed. .El .Pp +To help prevent the editing of unauthorized files, the following +restrictions are enforced unless explicitly allowed by the security policy: +.Bl -bullet -offset 4 +.It +Symbolic links may not be edited (version 1.8.15 and higher). +.It +Symbolic links along the path to be edited are not followed when the +parent directory is writable by the invoking user unless that user +is root (version 1.8.16 and higher). +.It +Files located in a directory that is writable by the invoking user may +not be edited unless that user is root (version 1.8.16 and higher). +.El +.Pp +Users are never allowed to edit device special files. +.Pp If the specified file does not exist, it will be created. Note that unlike most commands run by .Em sudo , @@ -490,7 +510,7 @@ .It Fl u Ar user , Fl -user Ns = Ns Ar user Run the command as a user other than the default target user (usually -.Em root ). +.Em root ) . The .Ar user may be either a user name or a numeric user ID @@ -652,16 +672,15 @@ process, .Nm will relay signals it receives to the command. -Unless the command is being run in a new pty, the -.Dv SIGHUP , +The .Dv SIGINT and .Dv SIGQUIT -signals are not relayed unless they are sent by a user process, -not the kernel. -Otherwise, the command would receive +signals are only relayed when the command is being run in a new pty +or when the signal was sent by a user process, not the kernel. +This prevents the command from receiving .Dv SIGINT -twice every time the user entered control-C. +twice each time the user enters control-C. Some signals, such as .Dv SIGSTOP and @@ -747,9 +766,12 @@ .Nm plugin architecture. .Sh EXIT VALUE -Upon successful execution of a program, the exit status from -.Em sudo -will simply be the exit status of the program that was executed. +Upon successful execution of a command, the exit status from +.Nm +will be the exit status of the program that was executed. +If the command terminated due to receipt of a signal, +.Nm +will send itself the signal that terminated the command. .Pp Otherwise, .Nm @@ -757,14 +779,14 @@ problem or if .Nm cannot execute the given command. -In the latter case the error string is printed to the standard error. +In the latter case, the error string is printed to the standard error. If .Nm cannot .Xr stat 2 one or more entries in the user's .Ev PATH , -an error is printed on stderr. +an error is printed to the standard error. (If the directory does not exist or if it is not really a directory, the entry is ignored and no error is printed.) This should not happen under normal circumstances. @@ -795,6 +817,15 @@ .Nm executes. .Pp +Users should +.Em never +be granted +.Nm +privileges to execute files that are writable by the user or +that reside in a directory that is writable by the user. +If the user can modify or replace the command there is no way +to limit what additional commands they can run. +.Pp Please note that .Nm will normally only log the command it explicitly runs. @@ -822,6 +853,8 @@ .Nm disables core dumps by default while it is executing (they are re-enabled for the command that is run). +This historical practice dates from a time when most operating +systems allowed setuid processes to dump core by default. To aid in debugging .Nm crashes, you may wish to re-enable core dumps by setting @@ -851,30 +884,57 @@ .Ev VISUAL is set. .It Ev MAIL -In +Set to the mail spool of the target user when the .Fl i -mode or when +option is specified or when .Em env_reset is enabled in -.Em sudoers , -set to the mail spool of the target user. +.Em sudoers +(unless +.Ev MAIL +is present in the +.Em env_keep +list). .It Ev HOME -Set to the home directory of the target user if +Set to the home directory of the target user when the .Fl i or .Fl H -are specified, -.Em env_reset -or -.Em always_set_home -are set in -.Em sudoers , -or when the +options are specified, when the .Fl s option is specified and .Em set_home is set in -.Em sudoers . +.Em sudoers , +when +.Em always_set_home +is enabled in +.Em sudoers , +or when +.Em env_reset +is enabled in +.Em sudoers +and +.Em HOME +is not present in the +.Em env_keep +list. +.It Ev LOGNAME +Set to the login name of the target user when the +.Fl i +option is specified, when the +.Em set_logname +option is enabled in +.Em sudoers +or when the +.Em env_reset +option is enabled in +.Em sudoers +(unless +.Ev LOGNAME +is present in the +.Em env_keep +list). .It Ev PATH May be overridden by the security policy. .It Ev SHELL @@ -905,9 +965,12 @@ .It Ev SUDO_USER Set to the login name of the user who invoked sudo. .It Ev USER -Set to the target user (root unless the -.Fl u -option is specified). +Set to the same value as +.Ev LOGNAME , +described above. +.It Ev USERNAME +Same as +.Ev USER . .It Ev VISUAL Default editor to use in .Fl e @@ -979,19 +1042,19 @@ .Sh HISTORY See the HISTORY file in the .Nm -distribution (http://www.sudo.ws/history.html) for a brief +distribution (https://www.sudo.ws/history.html) for a brief history of sudo. .Sh AUTHORS Many people have worked on .Nm over the years; this version consists of code written primarily by: .Bd -ragged -offset indent -Todd C. Miller +.An Todd C. Miller .Ed .Pp See the CONTRIBUTORS file in the .Nm -distribution (http://www.sudo.ws/contributors.html) for an +distribution (https://www.sudo.ws/contributors.html) for an exhaustive list of people who have contributed to .Nm . .Sh CAVEATS @@ -1029,10 +1092,10 @@ .Sh BUGS If you feel you have found a bug in .Nm , -please submit a bug report at http://bugzilla.sudo.ws/ +please submit a bug report at https://bugzilla.sudo.ws/ .Sh SUPPORT Limited free support is available via the sudo-users mailing list, -see http://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or +see https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search the archives. .Sh DISCLAIMER .Nm @@ -1043,4 +1106,4 @@ particular purpose are disclaimed. See the LICENSE file distributed with .Nm -or http://www.sudo.ws/license.html for complete details. +or https://www.sudo.ws/license.html for complete details. diff -Nru sudo-1.8.12/doc/sudo_plugin.cat sudo-1.8.16/doc/sudo_plugin.cat --- sudo-1.8.12/doc/sudo_plugin.cat 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/doc/sudo_plugin.cat 2016-03-17 16:13:11.000000000 +0000 @@ -499,6 +499,11 @@ This setting has no effect unless I/O logging is enabled or _u_s_e___p_t_y is enabled. + execfd=number + If specified, ssuuddoo will use the fexecve(2) system call + to execute the command instead of execve(2). The + specified _n_u_m_b_e_r must refer to an open file descriptor. + iolog_compress=bool Set to true if the I/O logging plugins, if any, should compress the log data. This is a hint to the I/O @@ -606,6 +611,27 @@ substitution and transparently enable _s_u_d_o_e_d_i_t when the user attempts to run an editor. + sudoedit_checkdir=bool + Set to false to disable directory writability checks in + ssuuddooeeddiitt. By default, ssuuddooeeddiitt 1.8.16 and higher will + check all directory components of the path to be edited + for writability by the invoking user. Symbolic links + will not be followed in writable directories and + ssuuddooeeddiitt will refuse to edit a file located in a + writable directory. These restrictions are not + enforced when ssuuddooeeddiitt is run by root. The + _s_u_d_o_e_d_i_t___f_o_l_l_o_w option can be set to false to disable + this check. Only available starting with API version + 1.8. + + sudoedit_follow=bool + Set to true to allow ssuuddooeeddiitt to edit files that are + symbolic links. By default, ssuuddooeeddiitt 1.8.15 and higher + will refuse to open a symbolic link. The + _s_u_d_o_e_d_i_t___f_o_l_l_o_w option can be used to restore the older + behavior and allow ssuuddooeeddiitt to open symbolic links. + Only available starting with API version 1.8. + timeout=int Command timeout. If non-zero then when the timeout expires the command will be killed. @@ -791,7 +817,7 @@ #define SUDO_API_VERSION_SET_MAJOR(vp, n) do { \ *(vp) = (*(vp) & 0x0000ffff) | ((n) << 16); \ } while(0) - #define SUDO_VERSION_SET_MINOR(vp, n) do { \ + #define SUDO_API_VERSION_SET_MINOR(vp, n) do { \ *(vp) = (*(vp) & 0xffff0000) | (n); \ } while(0) @@ -1118,8 +1144,8 @@ typedef int (*sudo_hook_fn_t)(); struct sudo_hook { - int hook_version; - int hook_type; + unsigned int hook_version; + unsigned int hook_type; sudo_hook_fn_t hook_fn; void *closure; }; @@ -1224,19 +1250,10 @@ /* Hook API version major/minor */ #define SUDO_HOOK_VERSION_MAJOR 1 #define SUDO_HOOK_VERSION_MINOR 0 - #define SUDO_HOOK_MKVERSION(x, y) ((x << 16) | y) - #define SUDO_HOOK_VERSION SUDO_HOOK_MKVERSION(SUDO_HOOK_VERSION_MAJOR,\ + #define SUDO_HOOK_VERSION SUDO_API_MKVERSION(SUDO_HOOK_VERSION_MAJOR,\ SUDO_HOOK_VERSION_MINOR) - /* Getters and setters for hook API version */ - #define SUDO_HOOK_VERSION_GET_MAJOR(v) ((v) >> 16) - #define SUDO_HOOK_VERSION_GET_MINOR(v) ((v) & 0xffff) - #define SUDO_HOOK_VERSION_SET_MAJOR(vp, n) do { \ - *(vp) = (*(vp) & 0x0000ffff) | ((n) << 16); \ - } while(0) - #define SUDO_HOOK_VERSION_SET_MINOR(vp, n) do { \ - *(vp) = (*(vp) & 0xffff0000) | (n); \ - } while(0) + For getters and setters see the _P_o_l_i_c_y _p_l_u_g_i_n _A_P_I. RReemmoottee ccoommmmaanndd eexxeeccuuttiioonn The ssuuddoo front end does not have native support for running remote @@ -1271,6 +1288,11 @@ informational or error messages to the user, which is usually more convenient for simple messages where no use input is required. + _C_o_n_v_e_r_s_a_t_i_o_n _f_u_n_c_t_i_o_n _s_t_r_u_c_t_u_r_e_s + + The conversation function takes as arguments pointers to the following + structures: + struct sudo_conv_message { #define SUDO_CONV_PROMPT_ECHO_OFF 0x0001 /* do not echo user input */ #define SUDO_CONV_PROMPT_ECHO_ON 0x0002 /* echo user input */ @@ -1289,25 +1311,47 @@ char *reply; }; + typedef int (*sudo_conv_callback_fn_t)(int signo, void *closure); + struct sudo_conv_callback { + unsigned int version; + void *closure; + sudo_conv_callback_fn_t on_suspend; + sudo_conv_callback_fn_t on_resume; + }; + + Pointers to the ccoonnvveerrssaattiioonn() and pprriinnttff()-style functions are passed in + to the plugin's ooppeenn() function when the plugin is initialized. The + following type definitions can be used in the declaration of the ooppeenn() + function: + typedef int (*sudo_conv_t)(int num_msgs, const struct sudo_conv_message msgs[], - struct sudo_conv_reply replies[]); + struct sudo_conv_reply replies[], + struct sudo_conv_callback *callback); typedef int (*sudo_printf_t)(int msg_type, const char *fmt, ...); - Pointers to the ccoonnvveerrssaattiioonn() and pprriinnttff()-style functions are passed in - to the plugin's ooppeenn() function when the plugin is initialized. - To use the ccoonnvveerrssaattiioonn() function, the plugin must pass an array of sudo_conv_message and sudo_conv_reply structures. There must be a struct sudo_conv_message and struct sudo_conv_reply for each message in the - conversation. The plugin is responsible for freeing the reply buffer - located in each struct sudo_conv_reply, if it is not NULL. - SUDO_CONV_REPL_MAX represents the maximum length of the reply buffer (not - including the trailing NUL character). In practical terms, this is the - longest password ssuuddoo will support. It is also useful as a maximum value - for the mmeemmsseett__ss() function when clearing passwords filled in by the - conversation function. + conversation. The struct sudo_conv_callback pointer, if not NULL, should + contain function pointers to be called when the ssuuddoo process is suspended + and/or resumed during conversation input. The _o_n___s_u_s_p_e_n_d and _o_n___r_e_s_u_m_e + functions are called with the signal that caused ssuuddoo to be suspended and + the _c_l_o_s_u_r_e pointer from the struct sudo_conv_callback. These functions + should return 0 on success and -1 on error. On error, the conversation + will end and the conversation function will return a value of -1. The + intended use is to allow the plugin to release resources, such as locks, + that should not be held indefinitely while suspended and then reacquire + them when the process is resumed. Note that the functions are not + actually invoked from within a signal handler. + + The plugin is responsible for freeing the reply buffer located in each + struct sudo_conv_reply, if it is not NULL. SUDO_CONV_REPL_MAX represents + the maximum length of the reply buffer (not including the trailing NUL + character). In practical terms, this is the longest password ssuuddoo will + support. It is also useful as a maximum value for the mmeemmsseett__ss() + function when clearing passwords filled in by the conversation function. The pprriinnttff()-style function uses the same underlying mechanism as the ccoonnvveerrssaattiioonn() function but only supports SUDO_CONV_INFO_MSG and @@ -1407,16 +1451,7 @@ #define GROUP_API_VERSION_MINOR 0 #define GROUP_API_VERSION ((GROUP_API_VERSION_MAJOR << 16) | \ GROUP_API_VERSION_MINOR) - - /* Getters and setters for group version */ - #define GROUP_API_VERSION_GET_MAJOR(v) ((v) >> 16) - #define GROUP_API_VERSION_GET_MINOR(v) ((v) & 0xffff) - #define GROUP_API_VERSION_SET_MAJOR(vp, n) do { \ - *(vp) = (*(vp) & 0x0000ffff) | ((n) << 16); \ - } while(0) - #define GROUP_API_VERSION_SET_MINOR(vp, n) do { \ - *(vp) = (*(vp) & 0xffff0000) | (n); \ - } while(0) + For getters and setters see the _P_o_l_i_c_y _p_l_u_g_i_n _A_P_I. PPLLUUGGIINN AAPPII CCHHAANNGGEELLOOGG The following revisions have been made to the Sudo Plugin API. @@ -1479,23 +1514,47 @@ may occur multiple times if there are multiple plugin-specific Debug lines in the sudo.conf(4) file. + Version 1.8 (sudo 1.8.15) + The _s_u_d_o_e_d_i_t___c_h_e_c_k_d_i_r and _s_u_d_o_e_d_i_t___f_o_l_l_o_w entries were added to the + command_info list. The default value of _s_u_d_o_e_d_i_t___c_h_e_c_k_d_i_r was + changed to true in sudo 1.8.16. + + The sudo _c_o_n_v_e_r_s_a_t_i_o_n function now takes a pointer to a struct + sudo_conv_callback as its fourth argument. The sudo_conv_t + definition has been updated to match. The plugin must specify that + it supports plugin API version 1.8 or higher to receive a + conversation function pointer that supports this argument. + + Version 1.9 (sudo 1.8.16) + The _e_x_e_c_f_d entry was added to the command_info list. + SSEEEE AALLSSOO sudo.conf(4), sudoers(4), sudo(1m) +AAUUTTHHOORRSS + Many people have worked on ssuuddoo over the years; this version consists of + code written primarily by: + + Todd C. Miller + + See the CONTRIBUTORS file in the ssuuddoo distribution + (https://www.sudo.ws/contributors.html) for an exhaustive list of people + who have contributed to ssuuddoo. + BBUUGGSS If you feel you have found a bug in ssuuddoo, please submit a bug report at - http://bugzilla.sudo.ws/ + https://bugzilla.sudo.ws/ SSUUPPPPOORRTT Limited free support is available via the sudo-users mailing list, see - http://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search the - archives. + https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search + the archives. DDIISSCCLLAAIIMMEERR ssuuddoo is provided ``AS IS'' and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the LICENSE - file distributed with ssuuddoo or http://www.sudo.ws/license.html for + file distributed with ssuuddoo or https://www.sudo.ws/license.html for complete details. -Sudo 1.8.12 December 4, 2014 Sudo 1.8.12 +Sudo 1.8.16 January 20, 2016 Sudo 1.8.16 diff -Nru sudo-1.8.12/doc/sudo_plugin.man.in sudo-1.8.16/doc/sudo_plugin.man.in --- sudo-1.8.12/doc/sudo_plugin.man.in 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/doc/sudo_plugin.man.in 2016-03-17 16:13:11.000000000 +0000 @@ -1,7 +1,7 @@ .\" DO NOT EDIT THIS FILE, IT IS NOT THE MASTER! .\" IT IS GENERATED AUTOMATICALLY FROM sudo_plugin.mdoc.in .\" -.\" Copyright (c) 2009-2014 Todd C. Miller +.\" Copyright (c) 2009-2016 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 @@ .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.TH "SUDO_PLUGIN" "5" "December 4, 2014" "Sudo @PACKAGE_VERSION@" "File Formats Manual" +.TH "SUDO_PLUGIN" "5" "January 20, 2016" "Sudo @PACKAGE_VERSION@" "File Formats Manual" .nh .if n .ad l .SH "NAME" @@ -160,7 +160,7 @@ A vector of user-supplied \fBsudo\fR settings in the form of -\(lqname=value\(rq +\(Lqname=value\(Rq strings. The vector is terminated by a \fRNULL\fR @@ -290,9 +290,9 @@ network_addrs=list A space-separated list of IP network addresses and netmasks in the form -\(lqaddr/netmask\(rq, +\(Lqaddr/netmask\(Rq, e.g.\& -\(lq192.168.1.2/255.255.255.0\(rq. +\(Lq192.168.1.2/255.255.255.0\(Rq. The address and netmask pairs may be either IPv4 or IPv6, depending on what the operating system supports. If the address contains a colon @@ -339,9 +339,9 @@ .TP 6n progname=string The command name that sudo was run as, typically -\(lqsudo\(rq +\(Lqsudo\(Rq or -\(lqsudoedit\(rq. +\(Lqsudoedit\(Rq. .TP 6n prompt=string The prompt to use when requesting a password, if specified via @@ -419,7 +419,7 @@ .TP 6n user_info A vector of information about the user running the command in the form of -\(lqname=value\(rq +\(Lqname=value\(Rq strings. The vector is terminated by a \fRNULL\fR @@ -540,7 +540,7 @@ The path to the user's terminal device. If the user has no terminal device associated with the session, the value will be empty, as in -\(lq\fRtty=\fR\(rq. +\(Lq\fRtty=\fR\(Rq. .TP 6n uid=uid_t The real user ID of the user invoking @@ -557,7 +557,7 @@ user_env The user's environment in the form of a \fRNULL\fR-terminated vector of -\(lqname=value\(rq +\(Lqname=value\(Rq strings. .sp When parsing @@ -710,10 +710,10 @@ \fIargv_out\fR, separated from the editor and its arguments by a -\(lq\fR--\fR\(rq +\(Lq\fR--\fR\(Rq element. The -\(lq\fR--\fR\(rq +\(Lq\fR--\fR\(Rq will be removed by \fBsudo\fR @@ -766,7 +766,7 @@ line in the form of a \fRNULL\fR-terminated vector of -\(lqname=value\(rq +\(Lqname=value\(Rq strings. The plugin may reject the command if one or more variables are not allowed to be set, or it may silently ignore such variables. @@ -786,7 +786,7 @@ .TP 6n command_info Information about the command being run in the form of -\(lqname=value\(rq +\(Lqname=value\(Rq strings. These values are used by \fBsudo\fR @@ -881,6 +881,17 @@ \fIuse_pty\fR is enabled. .TP 6n +execfd=number +If specified, +\fBsudo\fR +will use the +fexecve(2) +system call to execute the command instead of +execve(2). +The specified +\fInumber\fR +must refer to an open file descriptor. +.TP 6n iolog_compress=bool Set to true if the I/O logging plugins, if any, should compress the log data. @@ -999,6 +1010,38 @@ \fIsudoedit\fR when the user attempts to run an editor. .TP 6n +sudoedit_checkdir=bool +Set to false to disable directory writability checks in +\fBsudoedit\fR. +By default, +\fBsudoedit\fR +1.8.16 and higher will check all directory components of the path to be +edited for writability by the invoking user. +Symbolic links will not be followed in writable directories and +\fBsudoedit\fR +will refuse to edit a file located in a writable directory. +These restrictions are not enforced when +\fBsudoedit\fR +is run by root. +The +\fIsudoedit_follow\fR +option can be set to false to disable this check. +Only available starting with API version 1.8. +.TP 6n +sudoedit_follow=bool +Set to true to allow +\fBsudoedit\fR +to edit files that are symbolic links. +By default, +\fBsudoedit\fR +1.8.15 and higher will refuse to open a symbolic link. +The +\fIsudoedit_follow\fR +option can be used to restore the older behavior and allow +\fBsudoedit\fR +to open symbolic links. +Only available starting with API version 1.8. +.TP 6n timeout=int Command timeout. If non-zero then when the timeout expires the command will be killed. @@ -1217,7 +1260,7 @@ run in, in the form of a \fRNULL\fR-terminated vector of -\(lqname=value\(rq +\(Lqname=value\(Rq strings. This is the same string passed back to the front end via the Policy Plugin's @@ -1377,7 +1420,7 @@ #define SUDO_API_VERSION_SET_MAJOR(vp, n) do { \e *(vp) = (*(vp) & 0x0000ffff) | ((n) << 16); \e } while(0) -#define SUDO_VERSION_SET_MINOR(vp, n) do { \e +#define SUDO_API_VERSION_SET_MINOR(vp, n) do { \e *(vp) = (*(vp) & 0xffff0000) | (n); \e } while(0) .RE @@ -1554,7 +1597,7 @@ A vector of user-supplied \fBsudo\fR settings in the form of -\(lqname=value\(rq +\(Lqname=value\(Rq strings. The vector is terminated by a \fRNULL\fR @@ -1583,7 +1626,7 @@ .TP 6n user_info A vector of information about the user running the command in the form of -\(lqname=value\(rq +\(Lqname=value\(Rq strings. The vector is terminated by a \fRNULL\fR @@ -1625,7 +1668,7 @@ The user's environment in the form of a \fRNULL\fR-terminated vector of -\(lqname=value\(rq +\(Lqname=value\(Rq strings. .sp When parsing @@ -1989,8 +2032,8 @@ typedef int (*sudo_hook_fn_t)(); struct sudo_hook { - int hook_version; - int hook_type; + unsigned int hook_version; + unsigned int hook_type; sudo_hook_fn_t hook_fn; void *closure; }; @@ -2187,21 +2230,13 @@ /* Hook API version major/minor */ #define SUDO_HOOK_VERSION_MAJOR 1 #define SUDO_HOOK_VERSION_MINOR 0 -#define SUDO_HOOK_MKVERSION(x, y) ((x << 16) | y) -#define SUDO_HOOK_VERSION SUDO_HOOK_MKVERSION(SUDO_HOOK_VERSION_MAJOR,\e +#define SUDO_HOOK_VERSION SUDO_API_MKVERSION(SUDO_HOOK_VERSION_MAJOR,\e SUDO_HOOK_VERSION_MINOR) - -/* Getters and setters for hook API version */ -#define SUDO_HOOK_VERSION_GET_MAJOR(v) ((v) >> 16) -#define SUDO_HOOK_VERSION_GET_MINOR(v) ((v) & 0xffff) -#define SUDO_HOOK_VERSION_SET_MAJOR(vp, n) do { \e - *(vp) = (*(vp) & 0x0000ffff) | ((n) << 16); \e -} while(0) -#define SUDO_HOOK_VERSION_SET_MINOR(vp, n) do { \e - *(vp) = (*(vp) & 0xffff0000) | (n); \e -} while(0) .RE .fi +.PP +For getters and setters see the +\fIPolicy plugin API\fR. .SS "Remote command execution" The \fBsudo\fR @@ -2215,11 +2250,11 @@ A plugin may also accept a \fIrunas_user\fR in the form of -\(lquser@hostname\(rq +\(Lquser@hostname\(Rq which will work with older versions of \fBsudo\fR. It is anticipated that remote commands will be supported by executing a -\(lqhelper\(rq +\(Lqhelper\(Rq program. The policy plugin should setup the execution environment such that the \fBsudo\fR @@ -2258,6 +2293,11 @@ function is also available that can be used to display informational or error messages to the user, which is usually more convenient for simple messages where no use input is required. +.PP +\fIConversation function structures\fR +.PP +The conversation function takes as arguments pointers to the following +structures: .nf .sp .RS 0n @@ -2279,11 +2319,13 @@ char *reply; }; -typedef int (*sudo_conv_t)(int num_msgs, - const struct sudo_conv_message msgs[], - struct sudo_conv_reply replies[]); - -typedef int (*sudo_printf_t)(int msg_type, const char *fmt, ...); +typedef int (*sudo_conv_callback_fn_t)(int signo, void *closure); +struct sudo_conv_callback { + unsigned int version; + void *closure; + sudo_conv_callback_fn_t on_suspend; + sudo_conv_callback_fn_t on_resume; +}; .RE .fi .PP @@ -2295,6 +2337,20 @@ in to the plugin's \fBopen\fR() function when the plugin is initialized. +The following type definitions can be used in the declaration of the +\fBopen\fR() +function: +.nf +.sp +.RS 0n +typedef int (*sudo_conv_t)(int num_msgs, + const struct sudo_conv_message msgs[], + struct sudo_conv_reply replies[], + struct sudo_conv_callback *callback); + +typedef int (*sudo_printf_t)(int msg_type, const char *fmt, ...); +.RE +.fi .PP To use the \fBconversation\fR() @@ -2309,6 +2365,31 @@ \fRstruct sudo_conv_reply\fR for each message in the conversation. +The +\fRstruct sudo_conv_callback\fR +pointer, if not +\fRNULL\fR, +should contain function pointers to be called when the +\fBsudo\fR +process is suspended and/or resumed during conversation input. +The +\fIon_suspend\fR +and +\fIon_resume\fR +functions are called with the signal that caused +\fBsudo\fR +to be suspended and the +\fIclosure\fR +pointer from the +\fRstruct sudo_conv_callback\fR. +These functions should return 0 on success and \-1 on error. +On error, the conversation will end and the conversation function +will return a value of \-1. +The intended use is to allow the plugin to release resources, such as locks, +that should not be held indefinitely while suspended and then reacquire them +when the process is resumed. +Note that the functions are not actually invoked from within a signal handler. +.PP The plugin is responsible for freeing the reply buffer located in each \fRstruct sudo_conv_reply\fR, if it is not @@ -2515,18 +2596,10 @@ #define GROUP_API_VERSION_MINOR 0 #define GROUP_API_VERSION ((GROUP_API_VERSION_MAJOR << 16) | \e GROUP_API_VERSION_MINOR) - -/* Getters and setters for group version */ -#define GROUP_API_VERSION_GET_MAJOR(v) ((v) >> 16) -#define GROUP_API_VERSION_GET_MINOR(v) ((v) & 0xffff) -#define GROUP_API_VERSION_SET_MAJOR(vp, n) do { \e - *(vp) = (*(vp) & 0x0000ffff) | ((n) << 16); \e -} while(0) -#define GROUP_API_VERSION_SET_MINOR(vp, n) do { \e - *(vp) = (*(vp) & 0xffff0000) | (n); \e -} while(0) .RE .fi +For getters and setters see the +\fIPolicy plugin API\fR. .SH "PLUGIN API CHANGELOG" The following revisions have been made to the Sudo Plugin API. .TP 6n @@ -2641,25 +2714,69 @@ entry now starts with a debug file path name and may occur multiple times if there are multiple plugin-specific Debug lines in the sudo.conf(@mansectform@) file. +.TP 6n +Version 1.8 (sudo 1.8.15) +The +\fIsudoedit_checkdir\fR +and +\fIsudoedit_follow\fR +entries were added to the +\fRcommand_info\fR +list. +The default value of +\fIsudoedit_checkdir\fR +was changed to true in sudo 1.8.16. +.sp +The sudo +\fIconversation\fR +function now takes a pointer to a +\fRstruct sudo_conv_callback\fR +as its fourth argument. +The +\fRsudo_conv_t\fR +definition has been updated to match. +The plugin must specify that it supports plugin API version 1.8 or higher +to receive a conversation function pointer that supports this argument. +.TP 6n +Version 1.9 (sudo 1.8.16) +The +\fIexecfd\fR +entry was added to the +\fRcommand_info\fR +list. .SH "SEE ALSO" sudo.conf(@mansectform@), sudoers(@mansectform@), sudo(@mansectsu@) +.SH "AUTHORS" +Many people have worked on +\fBsudo\fR +over the years; this version consists of code written primarily by: +.sp +.RS 6n +Todd C. Miller +.RE +.PP +See the CONTRIBUTORS file in the +\fBsudo\fR +distribution (https://www.sudo.ws/contributors.html) for an +exhaustive list of people who have contributed to +\fBsudo\fR. .SH "BUGS" If you feel you have found a bug in \fBsudo\fR, -please submit a bug report at http://bugzilla.sudo.ws/ +please submit a bug report at https://bugzilla.sudo.ws/ .SH "SUPPORT" Limited free support is available via the sudo-users mailing list, -see http://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or +see https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search the archives. .SH "DISCLAIMER" \fBsudo\fR is provided -\(lqAS IS\(rq +\(LqAS IS\(Rq and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the LICENSE file distributed with \fBsudo\fR -or http://www.sudo.ws/license.html for complete details. +or https://www.sudo.ws/license.html for complete details. diff -Nru sudo-1.8.12/doc/sudo_plugin.mdoc.in sudo-1.8.16/doc/sudo_plugin.mdoc.in --- sudo-1.8.12/doc/sudo_plugin.mdoc.in 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/doc/sudo_plugin.mdoc.in 2016-03-17 16:13:10.000000000 +0000 @@ -1,5 +1,5 @@ .\" -.\" Copyright (c) 2009-2014 Todd C. Miller +.\" Copyright (c) 2009-2016 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 @@ -14,7 +14,7 @@ .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd December 4, 2014 +.Dd January 20, 2016 .Dt SUDO_PLUGIN @mansectform@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -211,7 +211,7 @@ so the value was always the same as that used by the .Nm sudo front end and did not include a path name, only the flags themselves. -As of version 1.7 of the plugin interface, +As of version 1.7 of the plugin interface, .Nm sudo will only pass .Em debug_flags @@ -784,6 +784,16 @@ This setting has no effect unless I/O logging is enabled or .Em use_pty is enabled. +.It execfd=number +If specified, +.Nm sudo +will use the +.Xr fexecve 2 +system call to execute the command instead of +.Xr execve 2 . +The specified +.Em number +must refer to an open file descriptor. .It iolog_compress=bool Set to true if the I/O logging plugins, if any, should compress the log data. @@ -881,6 +891,36 @@ enable .Em sudoedit when the user attempts to run an editor. +.It sudoedit_checkdir=bool +Set to false to disable directory writability checks in +.Nm sudoedit . +By default, +.Nm sudoedit +1.8.16 and higher will check all directory components of the path to be +edited for writability by the invoking user. +Symbolic links will not be followed in writable directories and +.Nm sudoedit +will refuse to edit a file located in a writable directory. +These restrictions are not enforced when +.Nm sudoedit +is run by root. +The +.Em sudoedit_follow +option can be set to false to disable this check. +Only available starting with API version 1.8. +.It sudoedit_follow=bool +Set to true to allow +.Nm sudoedit +to edit files that are symbolic links. +By default, +.Nm sudoedit +1.8.15 and higher will refuse to open a symbolic link. +The +.Em sudoedit_follow +option can be used to restore the older behavior and allow +.Nm sudoedit +to open symbolic links. +Only available starting with API version 1.8. .It timeout=int Command timeout. If non-zero then when the timeout expires the command will be killed. @@ -1215,7 +1255,7 @@ #define SUDO_API_VERSION_SET_MAJOR(vp, n) do { \e *(vp) = (*(vp) & 0x0000ffff) | ((n) << 16); \e } while(0) -#define SUDO_VERSION_SET_MINOR(vp, n) do { \e +#define SUDO_API_VERSION_SET_MINOR(vp, n) do { \e *(vp) = (*(vp) & 0xffff0000) | (n); \e } while(0) .Ed @@ -1743,8 +1783,8 @@ typedef int (*sudo_hook_fn_t)(); struct sudo_hook { - int hook_version; - int hook_type; + unsigned int hook_version; + unsigned int hook_type; sudo_hook_fn_t hook_fn; void *closure; }; @@ -1897,20 +1937,12 @@ /* Hook API version major/minor */ #define SUDO_HOOK_VERSION_MAJOR 1 #define SUDO_HOOK_VERSION_MINOR 0 -#define SUDO_HOOK_MKVERSION(x, y) ((x << 16) | y) -#define SUDO_HOOK_VERSION SUDO_HOOK_MKVERSION(SUDO_HOOK_VERSION_MAJOR,\e +#define SUDO_HOOK_VERSION SUDO_API_MKVERSION(SUDO_HOOK_VERSION_MAJOR,\e SUDO_HOOK_VERSION_MINOR) - -/* Getters and setters for hook API version */ -#define SUDO_HOOK_VERSION_GET_MAJOR(v) ((v) >> 16) -#define SUDO_HOOK_VERSION_GET_MINOR(v) ((v) & 0xffff) -#define SUDO_HOOK_VERSION_SET_MAJOR(vp, n) do { \e - *(vp) = (*(vp) & 0x0000ffff) | ((n) << 16); \e -} while(0) -#define SUDO_HOOK_VERSION_SET_MINOR(vp, n) do { \e - *(vp) = (*(vp) & 0xffff0000) | (n); \e -} while(0) .Ed +.Pp +For getters and setters see the +.Sx Policy plugin API . .Ss Remote command execution The .Nm sudo @@ -1967,6 +1999,11 @@ function is also available that can be used to display informational or error messages to the user, which is usually more convenient for simple messages where no use input is required. +.Pp +.Em Conversation function structures +.Pp +The conversation function takes as arguments pointers to the following +structures: .Bd -literal struct sudo_conv_message { #define SUDO_CONV_PROMPT_ECHO_OFF 0x0001 /* do not echo user input */ @@ -1986,11 +2023,13 @@ char *reply; }; -typedef int (*sudo_conv_t)(int num_msgs, - const struct sudo_conv_message msgs[], - struct sudo_conv_reply replies[]); - -typedef int (*sudo_printf_t)(int msg_type, const char *fmt, ...); +typedef int (*sudo_conv_callback_fn_t)(int signo, void *closure); +struct sudo_conv_callback { + unsigned int version; + void *closure; + sudo_conv_callback_fn_t on_suspend; + sudo_conv_callback_fn_t on_resume; +}; .Ed .Pp Pointers to the @@ -2001,6 +2040,17 @@ in to the plugin's .Fn open function when the plugin is initialized. +The following type definitions can be used in the declaration of the +.Fn open +function: +.Bd -literal +typedef int (*sudo_conv_t)(int num_msgs, + const struct sudo_conv_message msgs[], + struct sudo_conv_reply replies[], + struct sudo_conv_callback *callback); + +typedef int (*sudo_printf_t)(int msg_type, const char *fmt, ...); +.Ed .Pp To use the .Fn conversation @@ -2015,6 +2065,31 @@ .Li struct sudo_conv_reply for each message in the conversation. +The +.Li struct sudo_conv_callback +pointer, if not +.Dv NULL , +should contain function pointers to be called when the +.Nm sudo +process is suspended and/or resumed during conversation input. +The +.Fa on_suspend +and +.Fa on_resume +functions are called with the signal that caused +.Nm sudo +to be suspended and the +.Fa closure +pointer from the +.Li struct sudo_conv_callback . +These functions should return 0 on success and \-1 on error. +On error, the conversation will end and the conversation function +will return a value of \-1. +The intended use is to allow the plugin to release resources, such as locks, +that should not be held indefinitely while suspended and then reacquire them +when the process is resumed. +Note that the functions are not actually invoked from within a signal handler. +.Pp The plugin is responsible for freeing the reply buffer located in each .Li struct sudo_conv_reply , if it is not @@ -2192,17 +2267,9 @@ #define GROUP_API_VERSION_MINOR 0 #define GROUP_API_VERSION ((GROUP_API_VERSION_MAJOR << 16) | \e GROUP_API_VERSION_MINOR) - -/* Getters and setters for group version */ -#define GROUP_API_VERSION_GET_MAJOR(v) ((v) >> 16) -#define GROUP_API_VERSION_GET_MINOR(v) ((v) & 0xffff) -#define GROUP_API_VERSION_SET_MAJOR(vp, n) do { \e - *(vp) = (*(vp) & 0x0000ffff) | ((n) << 16); \e -} while(0) -#define GROUP_API_VERSION_SET_MINOR(vp, n) do { \e - *(vp) = (*(vp) & 0xffff0000) | (n); \e -} while(0) .Ed +For getters and setters see the +.Sx Policy plugin API . .Sh PLUGIN API CHANGELOG The following revisions have been made to the Sudo Plugin API. .Bl -tag -width 4n @@ -2310,18 +2377,59 @@ entry now starts with a debug file path name and may occur multiple times if there are multiple plugin-specific Debug lines in the .Xr sudo.conf @mansectform@ file. +.It Version 1.8 (sudo 1.8.15) +The +.Em sudoedit_checkdir +and +.Em sudoedit_follow +entries were added to the +.Li command_info +list. +The default value of +.Em sudoedit_checkdir +was changed to true in sudo 1.8.16. +.Pp +The sudo +.Em conversation +function now takes a pointer to a +.Li struct sudo_conv_callback +as its fourth argument. +The +.Li sudo_conv_t +definition has been updated to match. +The plugin must specify that it supports plugin API version 1.8 or higher +to receive a conversation function pointer that supports this argument. +.It Version 1.9 (sudo 1.8.16) +The +.Em execfd +entry was added to the +.Li command_info +list. .El .Sh SEE ALSO .Xr sudo.conf @mansectform@ , .Xr sudoers @mansectform@ , .Xr sudo @mansectsu@ +.Sh AUTHORS +Many people have worked on +.Nm sudo +over the years; this version consists of code written primarily by: +.Bd -ragged -offset indent +.An Todd C. Miller +.Ed +.Pp +See the CONTRIBUTORS file in the +.Nm sudo +distribution (https://www.sudo.ws/contributors.html) for an +exhaustive list of people who have contributed to +.Nm sudo . .Sh BUGS If you feel you have found a bug in .Nm sudo , -please submit a bug report at http://bugzilla.sudo.ws/ +please submit a bug report at https://bugzilla.sudo.ws/ .Sh SUPPORT Limited free support is available via the sudo-users mailing list, -see http://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or +see https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search the archives. .Sh DISCLAIMER .Nm sudo @@ -2332,4 +2440,4 @@ particular purpose are disclaimed. See the LICENSE file distributed with .Nm sudo -or http://www.sudo.ws/license.html for complete details. +or https://www.sudo.ws/license.html for complete details. diff -Nru sudo-1.8.12/doc/sudoreplay.cat sudo-1.8.16/doc/sudoreplay.cat --- sudo-1.8.12/doc/sudoreplay.cat 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/doc/sudoreplay.cat 2016-03-17 16:13:11.000000000 +0000 @@ -250,25 +250,32 @@ # sudoreplay -l ( user jeff or user bob ) tty console SSEEEE AALLSSOO - sudo.conf(4), sudo(1m), script(1) + script(1), sudo.conf(4), sudo(1m) AAUUTTHHOORRSS - Todd C. Miller + Many people have worked on ssuuddoo over the years; this version consists of + code written primarily by: + + Todd C. Miller + + See the CONTRIBUTORS file in the ssuuddoo distribution + (https://www.sudo.ws/contributors.html) for an exhaustive list of people + who have contributed to ssuuddoo. BBUUGGSS If you feel you have found a bug in ssuuddoorreeppllaayy, please submit a bug - report at http://bugzilla.sudo.ws/ + report at https://bugzilla.sudo.ws/ SSUUPPPPOORRTT Limited free support is available via the sudo-users mailing list, see - http://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search the - archives. + https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search + the archives. DDIISSCCLLAAIIMMEERR ssuuddoorreeppllaayy is provided ``AS IS'' and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the LICENSE - file distributed with ssuuddoo or http://www.sudo.ws/license.html for + file distributed with ssuuddoo or https://www.sudo.ws/license.html for complete details. -Sudo 1.8.12 February 5, 2015 Sudo 1.8.12 +Sudo 1.8.16 November 20, 2015 Sudo 1.8.16 diff -Nru sudo-1.8.12/doc/sudoreplay.man.in sudo-1.8.16/doc/sudoreplay.man.in --- sudo-1.8.12/doc/sudoreplay.man.in 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/doc/sudoreplay.man.in 2016-03-17 16:13:11.000000000 +0000 @@ -16,7 +16,7 @@ .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.TH "SUDOREPLAY" "8" "February 5, 2015" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" +.TH "SUDOREPLAY" "8" "November 20, 2015" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" .nh .if n .ad l .SH "NAME" @@ -120,7 +120,7 @@ .TP 12n \fB\-l\fR, \fB\--list\fR [\fIsearch expression\fR] Enable -\(lqlist mode\(rq. +\(Lqlist mode\(Rq. In this mode, \fBsudoreplay\fR will list available sessions in a format similar to the @@ -288,13 +288,13 @@ next Friday The first second of the Friday in the next (upcoming) week. Not to be confused with -\(lqthis friday\(rq +\(Lqthis friday\(Rq which would match the friday of the current week. .TP 8n last week The current time but 7 days ago. This is equivalent to -\(lqa week ago\(rq. +\(Lqa week ago\(Rq. .TP 8n a fortnight ago The current time but 14 days ago. @@ -316,13 +316,13 @@ .PP Note that relative time specifications do not always work as expected. For example, the -\(lqnext\(rq +\(Lqnext\(Rq qualifier is intended to be used in conjunction with a day such as -\(lqnext Monday\(rq. +\(Lqnext Monday\(Rq. When used with units of weeks, months, years, etc the result will be one more than expected. For example, -\(lqnext week\(rq +\(Lqnext week\(Rq will result in a time exactly two weeks from now, which is probably not what was intended. This will be addressed in a future version of @@ -414,26 +414,38 @@ .RE .fi .SH "SEE ALSO" +script(1), sudo.conf(@mansectform@), -sudo(@mansectsu@), -script(1) +sudo(@mansectsu@) .SH "AUTHORS" +Many people have worked on +\fBsudo\fR +over the years; this version consists of code written primarily by: +.sp +.RS 6n Todd C. Miller +.RE +.PP +See the CONTRIBUTORS file in the +\fBsudo\fR +distribution (https://www.sudo.ws/contributors.html) for an +exhaustive list of people who have contributed to +\fBsudo\fR. .SH "BUGS" If you feel you have found a bug in \fBsudoreplay\fR, -please submit a bug report at http://bugzilla.sudo.ws/ +please submit a bug report at https://bugzilla.sudo.ws/ .SH "SUPPORT" Limited free support is available via the sudo-users mailing list, -see http://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or +see https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search the archives. .SH "DISCLAIMER" \fBsudoreplay\fR is provided -\(lqAS IS\(rq +\(LqAS IS\(Rq and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the LICENSE file distributed with \fBsudo\fR -or http://www.sudo.ws/license.html for complete details. +or https://www.sudo.ws/license.html for complete details. diff -Nru sudo-1.8.12/doc/sudoreplay.mdoc.in sudo-1.8.16/doc/sudoreplay.mdoc.in --- sudo-1.8.12/doc/sudoreplay.mdoc.in 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/doc/sudoreplay.mdoc.in 2016-03-17 16:13:10.000000000 +0000 @@ -14,7 +14,7 @@ .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. .\" -.Dd February 5, 2015 +.Dd November 20, 2015 .Dt SUDOREPLAY @mansectsu@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -362,18 +362,29 @@ # sudoreplay -l ( user jeff or user bob ) tty console .Ed .Sh SEE ALSO +.Xr script 1 , .Xr sudo.conf @mansectform@ , -.Xr sudo @mansectsu@ , -.Xr script 1 +.Xr sudo @mansectsu@ .Sh AUTHORS -Todd C. Miller +Many people have worked on +.Nm sudo +over the years; this version consists of code written primarily by: +.Bd -ragged -offset indent +.An Todd C. Miller +.Ed +.Pp +See the CONTRIBUTORS file in the +.Nm sudo +distribution (https://www.sudo.ws/contributors.html) for an +exhaustive list of people who have contributed to +.Nm sudo . .Sh BUGS If you feel you have found a bug in .Nm , -please submit a bug report at http://bugzilla.sudo.ws/ +please submit a bug report at https://bugzilla.sudo.ws/ .Sh SUPPORT Limited free support is available via the sudo-users mailing list, -see http://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or +see https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search the archives. .Sh DISCLAIMER .Nm @@ -384,4 +395,4 @@ particular purpose are disclaimed. See the LICENSE file distributed with .Nm sudo -or http://www.sudo.ws/license.html for complete details. +or https://www.sudo.ws/license.html for complete details. diff -Nru sudo-1.8.12/doc/UPGRADE sudo-1.8.16/doc/UPGRADE --- sudo-1.8.12/doc/UPGRADE 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/doc/UPGRADE 2016-03-17 16:13:10.000000000 +0000 @@ -1,6 +1,55 @@ Notes on upgrading from an older release ======================================== +o Upgrading from a version prior to 1.8.16: + + When editing files with sudoedit, files in a directory that is + writable by the invoking user may no longer be edited by default. + Also, sudoedit will refuse to follow a symbolic link in the + path to be edited if that directory containing the link is + writable by the user. This behavior can be disabled by negating + the sudoedit_checkdir sudoers option, which is now enabled by + default. + +o Upgrading from a version prior to 1.8.15: + + Prior to version 1.8.15, when env_reset was enabled (the default) + and the -s option was not used, the SHELL environment variable + was set to the shell of the invoking user. In 1.8.15 and above, + when env_reset is enabled and the -s option is not used, SHELL + is set based on the target user. + + When editing files with sudoedit, symbolic links will no longer + be followed by default. The old behavior can be restored by + enabling the sudoedit_follow option in sudoers or on a per-command + basis with the FOLLOW and NOFOLLOW tags. + + Prior to version 1.8.15, groups listed in sudoers that were not + found in the system group database were passed to the group + plugin, if any. Starting with 1.8.15, only groups of the form + %:group are resolved via the group plugin by default. The old + behavior can be restored by using the always_query_group_plugin + sudoers option. + + Locking of the time stamp file has changed in sudo 1.8.15. + Previously, the user's entire time stamp file was locked while + retrieving and updating a time stamp record. Now, only a single + record, specific to the tty or parent process ID, is locked. + This lock is held while the user enters their password. If + sudo is suspended at the password prompt (or run in the + background), the lock is dropped until sudo is resumed, at which + point it will be reacquired. This allows sudo to be used in a + pipeline even when a password is required--only one instance + of sudo will prompt for a password. + +o Upgrading from a version prior to 1.8.14: + + On HP-UX, sudo will no longer check for "plugin.sl" if "plugin.so" + is specified but does not exist. This was a temporary hack for + backwards compatibility with Sudo 1.8.6 and below when the + plugin path name was not listed in sudo.conf. A plugin path + name that explicitly ends in ".sl" will still work as expected. + o Upgrading from a version prior to 1.8.10: The time stamp file format has changed in sudo 1.8.10. There @@ -10,18 +59,18 @@ authentication users. On systems that support it, monotonic time is stored instead of wall clock time. As a result, it is important that the time stamp files not persist when the system - reboots. For this reason, ther default location for the time + reboots. For this reason, the default location for the time stamp files has changed back to a directory located in /var/run. Systems that do not have /var/run (e.g. AIX) or that do not clear it on boot (e.g. HP-UX) will need to clear the time stamp - directory via a startup script. Such a script is installed by + directory via a start up script. Such a script is installed by default on AIX and HP-UX systems. Because there is now a single time stamp file per user, the -K option will remove all of the user's time stamps, not just the time stamp for the current terminal. - Lecture status is now stored separatedly from the time stamps + Lecture status is now stored separately from the time stamps in a separate directory: /var/db/sudo/lectured, /var/lib/sudo/lectured or /var/adm/sudo/lectured depending on what is present on the system. diff -Nru sudo-1.8.12/doc/visudo.cat sudo-1.8.16/doc/visudo.cat --- sudo-1.8.12/doc/visudo.cat 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/doc/visudo.cat 2016-03-17 16:13:11.000000000 +0000 @@ -176,7 +176,7 @@ Todd C. Miller See the CONTRIBUTORS file in the ssuuddoo distribution - (http://www.sudo.ws/contributors.html) for an exhaustive list of people + (https://www.sudo.ws/contributors.html) for an exhaustive list of people who have contributed to ssuuddoo. CCAAVVEEAATTSS @@ -185,18 +185,18 @@ BBUUGGSS If you feel you have found a bug in vviissuuddoo, please submit a bug report at - http://bugzilla.sudo.ws/ + https://bugzilla.sudo.ws/ SSUUPPPPOORRTT Limited free support is available via the sudo-users mailing list, see - http://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search the - archives. + https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search + the archives. DDIISSCCLLAAIIMMEERR vviissuuddoo is provided ``AS IS'' and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the LICENSE - file distributed with ssuuddoo or http://www.sudo.ws/license.html for + file distributed with ssuuddoo or https://www.sudo.ws/license.html for complete details. -Sudo 1.8.12 December 4, 2014 Sudo 1.8.12 +Sudo 1.8.16 November 20, 2015 Sudo 1.8.16 diff -Nru sudo-1.8.12/doc/visudo.man.in sudo-1.8.16/doc/visudo.man.in --- sudo-1.8.12/doc/visudo.man.in 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/doc/visudo.man.in 2016-03-17 16:13:11.000000000 +0000 @@ -1,7 +1,7 @@ .\" DO NOT EDIT THIS FILE, IT IS NOT THE MASTER! .\" IT IS GENERATED AUTOMATICALLY FROM visudo.mdoc.in .\" -.\" Copyright (c) 1996,1998-2005, 2007-2014 +.\" Copyright (c) 1996,1998-2005, 2007-2015 .\" 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" "8" "December 4, 2014" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" +.TH "VISUDO" "8" "November 20, 2015" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" .nh .if n .ad l .SH "NAME" @@ -94,7 +94,7 @@ \fBvisudo\fR will print a message stating the line number(s) where the error occurred and the user will receive the -\(lqWhat now?\(rq +\(LqWhat now?\(Rq prompt. At this point the user may enter \(oqe\(cq @@ -158,7 +158,7 @@ The lock file used is the specified \fIsudoers\fR file with -\(lq\.tmp\(rq +\(Lq\.tmp\(Rq appended to it. In \fIcheck-only\fR @@ -392,7 +392,7 @@ .PP See the CONTRIBUTORS file in the \fBsudo\fR -distribution (http://www.sudo.ws/contributors.html) for an +distribution (https://www.sudo.ws/contributors.html) for an exhaustive list of people who have contributed to \fBsudo\fR. .SH "CAVEATS" @@ -403,18 +403,18 @@ .SH "BUGS" If you feel you have found a bug in \fBvisudo\fR, -please submit a bug report at http://bugzilla.sudo.ws/ +please submit a bug report at https://bugzilla.sudo.ws/ .SH "SUPPORT" Limited free support is available via the sudo-users mailing list, -see http://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or +see https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search the archives. .SH "DISCLAIMER" \fBvisudo\fR is provided -\(lqAS IS\(rq +\(LqAS IS\(Rq and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. See the LICENSE file distributed with \fBsudo\fR -or http://www.sudo.ws/license.html for complete details. +or https://www.sudo.ws/license.html for complete details. diff -Nru sudo-1.8.12/doc/visudo.mdoc.in sudo-1.8.16/doc/visudo.mdoc.in --- sudo-1.8.12/doc/visudo.mdoc.in 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/doc/visudo.mdoc.in 2016-03-17 16:13:10.000000000 +0000 @@ -1,5 +1,5 @@ .\" -.\" Copyright (c) 1996,1998-2005, 2007-2014 +.\" Copyright (c) 1996,1998-2005, 2007-2015 .\" Todd C. Miller .\" .\" Permission to use, copy, modify, and distribute this software for any @@ -19,7 +19,7 @@ .\" Agency (DARPA) and Air Force Research Laboratory, Air Force .\" Materiel Command, USAF, under agreement number F39502-99-1-0512. .\" -.Dd December 4, 2014 +.Dd November 20, 2015 .Dt VISUDO @mansectsu@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -368,12 +368,12 @@ .Nm sudo over the years; this version consists of code written primarily by: .Bd -ragged -offset indent -Todd C. Miller +.An Todd C. Miller .Ed .Pp See the CONTRIBUTORS file in the .Nm sudo -distribution (http://www.sudo.ws/contributors.html) for an +distribution (https://www.sudo.ws/contributors.html) for an exhaustive list of people who have contributed to .Nm sudo . .Sh CAVEATS @@ -384,10 +384,10 @@ .Sh BUGS If you feel you have found a bug in .Nm , -please submit a bug report at http://bugzilla.sudo.ws/ +please submit a bug report at https://bugzilla.sudo.ws/ .Sh SUPPORT Limited free support is available via the sudo-users mailing list, -see http://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or +see https://www.sudo.ws/mailman/listinfo/sudo-users to subscribe or search the archives. .Sh DISCLAIMER .Nm @@ -398,4 +398,4 @@ particular purpose are disclaimed. See the LICENSE file distributed with .Nm sudo -or http://www.sudo.ws/license.html for complete details. +or https://www.sudo.ws/license.html for complete details. diff -Nru sudo-1.8.12/examples/Makefile.in sudo-1.8.16/examples/Makefile.in --- sudo-1.8.12/examples/Makefile.in 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/examples/Makefile.in 2015-10-31 23:35:00.000000000 +0000 @@ -20,7 +20,8 @@ #### Start of system configuration section. #### srcdir = @srcdir@ -exampledir = $(datarootdir)/examples/$(PACKAGE_TARNAME) +docdir = @docdir@ +exampledir = @exampledir@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @@ -76,6 +77,8 @@ uninstall: -rm -rf $(DESTDIR)$(exampledir) +splint: + cppcheck: check: diff -Nru sudo-1.8.12/include/compat/endian.h sudo-1.8.16/include/compat/endian.h --- sudo-1.8.12/include/compat/endian.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/include/compat/endian.h 2015-10-31 23:35:00.000000000 +0000 @@ -14,8 +14,8 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _COMPAT_ENDIAN_H -#define _COMPAT_ENDIAN_H +#ifndef COMPAT_ENDIAN_H +#define COMPAT_ENDIAN_H #ifndef BYTE_ORDER # undef LITTLE_ENDIAN @@ -69,4 +69,4 @@ # endif #endif /* BYTE_ORDER */ -#endif /* _COMPAT_ENDIAN_H */ +#endif /* COMPAT_ENDIAN_H */ diff -Nru sudo-1.8.12/include/compat/fnmatch.h sudo-1.8.16/include/compat/fnmatch.h --- sudo-1.8.12/include/compat/fnmatch.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/include/compat/fnmatch.h 2015-10-31 23:35:00.000000000 +0000 @@ -14,8 +14,8 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _FNMATCH_H -#define _FNMATCH_H +#ifndef COMPAT_FNMATCH_H +#define COMPAT_FNMATCH_H #define FNM_NOMATCH 1 /* String does not match pattern */ @@ -29,4 +29,4 @@ #define fnmatch(_a, _b, _c) sudo_fnmatch((_a), (_b), (_c)) -#endif /* _FNMATCH_H */ +#endif /* COMPAT_FNMATCH_H */ diff -Nru sudo-1.8.12/include/compat/getaddrinfo.h sudo-1.8.16/include/compat/getaddrinfo.h --- sudo-1.8.12/include/compat/getaddrinfo.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/include/compat/getaddrinfo.h 2015-10-31 23:35:00.000000000 +0000 @@ -20,8 +20,8 @@ * work. */ -#ifndef _COMPAT_GETADDRINFO_H -#define _COMPAT_GETADDRINFO_H +#ifndef COMPAT_GETADDRINFO_H +#define COMPAT_GETADDRINFO_H #include @@ -80,4 +80,4 @@ #define gai_strerror(_a) sudo_gai_strerror((_a)) #endif /* !HAVE_GETADDRINFO */ -#endif /* _COMPAT_GETADDRINFO_H */ +#endif /* COMPAT_GETADDRINFO_H */ diff -Nru sudo-1.8.12/include/compat/getopt.h sudo-1.8.16/include/compat/getopt.h --- sudo-1.8.12/include/compat/getopt.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/include/compat/getopt.h 2015-10-31 23:35:00.000000000 +0000 @@ -31,8 +31,8 @@ * POSSIBILITY OF SUCH DAMAGE. */ -#ifndef _SUDO_GETOPT_H_ -#define _SUDO_GETOPT_H_ +#ifndef COMPAT_GETOPT_H +#define COMPAT_GETOPT_H /* * GNU-like getopt_long()/getopt_long_only() with 4.4BSD optreset extension. @@ -78,4 +78,4 @@ extern int optopt; extern int optreset; -#endif /* !_SUDO_GETOPT_H_ */ +#endif /* !COMPAT_GETOPT_H */ diff -Nru sudo-1.8.12/include/compat/glob.h sudo-1.8.16/include/compat/glob.h --- sudo-1.8.12/include/compat/glob.h 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/include/compat/glob.h 2015-10-31 23:35:00.000000000 +0000 @@ -32,8 +32,8 @@ * @(#)glob.h 8.1 (Berkeley) 6/2/93 */ -#ifndef _GLOB_H_ -#define _GLOB_H_ +#ifndef COMPAT_GLOB_H +#define COMPAT_GLOB_H struct stat; typedef struct { @@ -73,4 +73,4 @@ #define glob(_a, _b, _c, _d) sudo_glob((_a), (_b), (_c), (_d)) #define globfree(_a) sudo_globfree((_a)) -#endif /* !_GLOB_H_ */ +#endif /* !COMPAT_GLOB_H */ diff -Nru sudo-1.8.12/include/compat/nss_dbdefs.h sudo-1.8.16/include/compat/nss_dbdefs.h --- sudo-1.8.12/include/compat/nss_dbdefs.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/include/compat/nss_dbdefs.h 2015-10-31 23:35:00.000000000 +0000 @@ -14,8 +14,8 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _COMPAT_NSS_DBDEFS_H -#define _COMPAT_NSS_DBDEFS_H +#ifndef COMPAT_NSS_DBDEFS_H +#define COMPAT_NSS_DBDEFS_H /* * Bits of nss_dbdefs.h and nss_common.h needed to implement @@ -103,4 +103,4 @@ extern nss_XbyY_buf_t *_nss_XbyY_buf_alloc(int, int); extern void _nss_XbyY_buf_free(nss_XbyY_buf_t *); -#endif /* _COMPAT_NSS_DBDEFS_H */ +#endif /* COMPAT_NSS_DBDEFS_H */ diff -Nru sudo-1.8.12/include/compat/sha2.h sudo-1.8.16/include/compat/sha2.h --- sudo-1.8.12/include/compat/sha2.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/include/compat/sha2.h 2015-10-31 23:35:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013-2014 Todd C. Miller + * Copyright (c) 2013-2015 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,8 +19,8 @@ * by Steve Reid and Wei Dai respectively. */ -#ifndef _SUDOERS_SHA2_H -#define _SUDOERS_SHA2_H +#ifndef COMPAT_SHA2_H +#define COMPAT_SHA2_H #define SHA224_BLOCK_LENGTH 64 #define SHA224_DIGEST_LENGTH 28 @@ -47,28 +47,52 @@ uint8_t buffer[SHA512_BLOCK_LENGTH]; } SHA2_CTX; -__dso_public void SHA224Init(SHA2_CTX *ctx); -__dso_public void SHA224Pad(SHA2_CTX *ctx); -__dso_public void SHA224Transform(uint32_t state[8], const uint8_t buffer[SHA224_BLOCK_LENGTH]); -__dso_public void SHA224Update(SHA2_CTX *ctx, const uint8_t *data, size_t len); -__dso_public void SHA224Final(uint8_t digest[SHA224_DIGEST_LENGTH], SHA2_CTX *ctx); - -__dso_public void SHA256Init(SHA2_CTX *ctx); -__dso_public void SHA256Pad(SHA2_CTX *ctx); -__dso_public void SHA256Transform(uint32_t state[8], const uint8_t buffer[SHA256_BLOCK_LENGTH]); -__dso_public void SHA256Update(SHA2_CTX *ctx, const uint8_t *data, size_t len); -__dso_public void SHA256Final(uint8_t digest[SHA256_DIGEST_LENGTH], SHA2_CTX *ctx); - -__dso_public void SHA384Init(SHA2_CTX *ctx); -__dso_public void SHA384Pad(SHA2_CTX *ctx); -__dso_public void SHA384Transform(uint64_t state[8], const uint8_t buffer[SHA384_BLOCK_LENGTH]); -__dso_public void SHA384Update(SHA2_CTX *ctx, const uint8_t *data, size_t len); -__dso_public void SHA384Final(uint8_t digest[SHA384_DIGEST_LENGTH], SHA2_CTX *ctx); - -__dso_public void SHA512Init(SHA2_CTX *ctx); -__dso_public void SHA512Pad(SHA2_CTX *ctx); -__dso_public void SHA512Transform(uint64_t state[8], const uint8_t buffer[SHA512_BLOCK_LENGTH]); -__dso_public void SHA512Update(SHA2_CTX *ctx, const uint8_t *data, size_t len); -__dso_public void SHA512Final(uint8_t digest[SHA512_DIGEST_LENGTH], SHA2_CTX *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); + +#define SHA224Init sudo_SHA224Init +#define SHA224Pad sudo_SHA224Pad +#define SHA224Transform sudo_SHA224Transform +#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); + +#define SHA256Init sudo_SHA256Init +#define SHA256Pad sudo_SHA256Pad +#define SHA256Transform sudo_SHA256Transform +#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); + +#define SHA384Init sudo_SHA384Init +#define SHA384Pad sudo_SHA384Pad +#define SHA384Transform sudo_SHA384Transform +#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); + +#define SHA512Init sudo_SHA512Init +#define SHA512Pad sudo_SHA512Pad +#define SHA512Transform sudo_SHA512Transform +#define SHA512Update sudo_SHA512Update +#define SHA512Final sudo_SHA512Final -#endif /* _SUDOERS_SHA2_H */ +#endif /* COMPAT_SHA2_H */ diff -Nru sudo-1.8.12/include/compat/stdbool.h sudo-1.8.16/include/compat/stdbool.h --- sudo-1.8.12/include/compat/stdbool.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/include/compat/stdbool.h 2015-10-31 23:35:00.000000000 +0000 @@ -5,8 +5,8 @@ * Public domain. */ -#ifndef _COMPAT_STDBOOL_H_ -#define _COMPAT_STDBOOL_H_ +#ifndef COMPAT_STDBOOL_H +#define COMPAT_STDBOOL_H #ifndef __cplusplus @@ -41,4 +41,4 @@ /* Inform that everything is fine */ #define __bool_true_false_are_defined 1 -#endif /* _COMPAT_STDBOOL_H_ */ +#endif /* COMPAT_STDBOOL_H */ diff -Nru sudo-1.8.12/include/compat/timespec.h sudo-1.8.16/include/compat/timespec.h --- sudo-1.8.12/include/compat/timespec.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/include/compat/timespec.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2005, 2010 Todd C. Miller - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef _SUDO_TIMESPEC_H -#define _SUDO_TIMESPEC_H - -struct timespec { - time_t tv_sec; - long tv_nsec; -}; - -#endif /* _SUDO_TIMESPEC_H */ diff -Nru sudo-1.8.12/include/compat/utime.h sudo-1.8.16/include/compat/utime.h --- sudo-1.8.12/include/compat/utime.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/include/compat/utime.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,28 +0,0 @@ -/* - * Copyright (c) 1996, 1998-2005, 2010 - * Todd C. Miller - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef _UTIME_H -#define _UTIME_H - -struct utimbuf { - time_t actime; /* access time */ - time_t modtime; /* mod time */ -}; - -int utime(const char *, const struct utimbuf *); - -#endif /* _UTIME_H */ diff -Nru sudo-1.8.12/include/Makefile.in sudo-1.8.16/include/Makefile.in --- sudo-1.8.12/include/Makefile.in 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/include/Makefile.in 2015-10-31 23:35:00.000000000 +0000 @@ -73,6 +73,8 @@ uninstall: -rm -f $(DESTDIR)$(includedir)/sudo_plugin.h +splint: + cppcheck: check: diff -Nru sudo-1.8.12/include/sudo_alloc.h sudo-1.8.16/include/sudo_alloc.h --- sudo-1.8.12/include/sudo_alloc.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/include/sudo_alloc.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2009-2010, 2012-1014 - * Todd C. Miller - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef _SUDO_ALLOC_H -#define _SUDO_ALLOC_H - -#include - -#undef sudo_efree -#define sudo_efree(x) free((void *)(x)) - -__dso_public int sudo_easprintf_v1(char **ret, const char *fmt, ...) __printflike(2, 3); -__dso_public int sudo_evasprintf_v1(char **ret, const char *fmt, va_list) __printflike(2, 0); -__dso_public void *sudo_ecalloc_v1(size_t nmemb, size_t size) __malloc_like; -__dso_public void *sudo_emalloc_v1(size_t size) __malloc_like; -__dso_public void *sudo_emallocarray_v1(size_t nmemb, size_t size) __malloc_like; -__dso_public void *sudo_erealloc_v1(void *ptr, size_t size); -__dso_public void *sudo_ereallocarray_v1(void *ptr, size_t nmemb, size_t size); -__dso_public void *sudo_erecalloc_v1(void *ptr, size_t onmemb, size_t nmemb, size_t msize); -__dso_public char *sudo_estrdup_v1(const char *src) __malloc_like; -__dso_public char *sudo_estrndup_v1(const char *src, size_t maxlen) __malloc_like; - -#define sudo_easprintf sudo_easprintf_v1 -#define sudo_evasprintf(_a, _b, _c) sudo_evasprintf_v1((_a), (_b), (_c)) -#define sudo_ecalloc(_a, _b) sudo_ecalloc_v1((_a), (_b)) -#define sudo_emalloc(_a) sudo_emalloc_v1((_a)) -#define sudo_emallocarray(_a, _b) sudo_emallocarray_v1((_a), (_b)) -#define sudo_erealloc(_a, _b) sudo_erealloc_v1((_a), (_b)) -#define sudo_ereallocarray(_a, _b, _c) sudo_ereallocarray_v1((_a), (_b), (_c)) -#define sudo_erecalloc(_a, _b, _c, _d) sudo_erecalloc_v1((_a), (_b), (_c), (_d)) -#define sudo_estrdup(_a) sudo_estrdup_v1((_a)) -#define sudo_estrndup(_a, _b) sudo_estrndup_v1((_a), (_b)) - -#endif /* _SUDO_ALLOC_H */ diff -Nru sudo-1.8.12/include/sudo_compat.h sudo-1.8.16/include/sudo_compat.h --- sudo-1.8.12/include/sudo_compat.h 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/include/sudo_compat.h 2016-03-17 16:13:10.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 1998-2005, 2008, 2009-2014 + * Copyright (c) 1996, 1998-2005, 2008, 2009-2016 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -19,14 +19,12 @@ * Materiel Command, USAF, under agreement number F39502-99-1-0512. */ -#ifndef _SUDO_COMPAT_H -#define _SUDO_COMPAT_H +#ifndef SUDO_COMPAT_H +#define SUDO_COMPAT_H #include -#ifdef STDC_HEADERS -# include -#endif #include +#include /* for rsize_t */ /* * Macros and functions that may be missing on some operating systems. @@ -71,15 +69,6 @@ # endif #endif -/* Hint to compiler that returned pointer is unique (malloc but not realloc). */ -#ifndef __malloc_like -# if __GNUC_PREREQ__(2, 96) -# define __malloc_like __attribute__((__malloc__)) -# else -# define __malloc_like -# endif -#endif - /* * Given the pointer x to the member m of the struct s, return * a pointer to the containing structure. @@ -120,10 +109,6 @@ /* * Some systems lack full limit definitions. */ -#if defined(HAVE_DECL_OPEN_MAX) && !HAVE_DECL_OPEN_MAX -# define OPEN_MAX 256 -#endif - #if defined(HAVE_DECL_LLONG_MAX) && !HAVE_DECL_LLONG_MAX # if defined(HAVE_DECL_QUAD_MAX) && HAVE_DECL_QUAD_MAX # define LLONG_MAX QUAD_MAX @@ -164,16 +149,8 @@ # endif #endif -#if defined(HAVE_DECL_HOST_NAME_MAX) && !HAVE_DECL_HOST_NAME_MAX -# if defined(HAVE_DECL__POSIX_HOST_NAME_MAX) && HAVE_DECL__POSIX_HOST_NAME_MAX -# define HOST_NAME_MAX _POSIX_HOST_NAME_MAX -# else -# define HOST_NAME_MAX 255 -# endif -#endif - /* - * Posix versions for those without... + * POSIX versions for those without... */ #ifndef _S_IFMT # define _S_IFMT S_IFMT @@ -193,25 +170,23 @@ #ifndef S_ISDIR # define S_ISDIR(m) (((m) & _S_IFMT) == _S_IFDIR) #endif /* S_ISDIR */ - -/* - * Some OS's may not have this. - */ -#ifndef S_IRWXU -# define S_IRWXU 0000700 /* rwx for owner */ -#endif /* S_IRWXU */ - -/* - * These should be defined in but not everyone has them. - */ -#ifndef STDIN_FILENO -# define STDIN_FILENO 0 -#endif -#ifndef STDOUT_FILENO -# define STDOUT_FILENO 1 -#endif -#ifndef STDERR_FILENO -# define STDERR_FILENO 2 +#ifndef S_ISLNK +# define S_ISLNK(m) (((m) & _S_IFMT) == _S_IFLNK) +#endif /* S_ISLNK */ + +/* For futimens() and utimensat() emulation. */ +#if !defined(HAVE_FUTIMENS) && !defined(HAVE_UTIMENSAT) +# ifndef UTIME_OMIT +# define UTIME_OMIT -1L +# endif +# ifndef UTIME_NOW +# define UTIME_NOW -2L +# endif +#endif +#if !defined(HAVE_OPENAT) || (!defined(HAVE_FUTIMENS) && !defined(HAVE_UTIMENSAT)) +# ifndef AT_FDCWD +# define AT_FDCWD -100 +# endif #endif /* @@ -233,17 +208,6 @@ #define ISSET(t, f) ((t) & (f)) /* - * Older systems may be missing stddef.h and/or offsetof macro - */ -#ifndef offsetof -# ifdef __offsetof -# define offsetof(type, field) __offsetof(type, field) -# else -# define offsetof(type, field) ((size_t)(&((type *)0)->field)) -# endif -#endif - -/* * Simple isblank() macro and function for systems without it. */ #ifndef HAVE_ISBLANK @@ -260,13 +224,6 @@ #endif /* HAVE__INNETGR */ /* - * On POSIX systems, O_NOCTTY is the default so some OS's may lack this define. - */ -#ifndef O_NOCTTY -# define O_NOCTTY 0 -#endif /* O_NOCTTY */ - -/* * Add IRIX-like sigaction_t for those without it. * SA_RESTART is not required by POSIX; SunOS has SA_INTERRUPT instead. */ @@ -288,14 +245,6 @@ # define HAVE_DIRFD #endif -/* - * Define futimes() in terms of futimesat() if needed. - */ -#if !defined(HAVE_FUTIMES) && defined(HAVE_FUTIMESAT) -# define futimes(_f, _tv) futimesat(_f, NULL, _tv) -# define HAVE_FUTIMES -#endif - #if !defined(HAVE_KILLPG) && !defined(killpg) # define killpg(s) kill(-(s)) #endif @@ -319,14 +268,24 @@ #endif /* For sig2str() */ -#ifndef HAVE_SIG2STR +#if !defined(HAVE_DECL_SIG2STR_MAX) || !HAVE_DECL_SIG2STR_MAX # define SIG2STR_MAX 32 #endif +/* WCOREDUMP is not POSIX, this usually works (verified on AIX). */ #ifndef WCOREDUMP # define WCOREDUMP(x) ((x) & 0x80) #endif +/* Number of bits in a byte. */ +#ifndef NBBY +# ifdef __NBBY +# define NBBY __NBBY +# else +# define NBBY 8 +# endif +#endif + #ifndef HAVE_SETEUID # if defined(HAVE_SETRESUID) # define seteuid(u) setresuid(-1, (u), -1) @@ -365,6 +324,21 @@ int getdomainname(char *, size_t); #endif +/* + * HP-UX 11.00 has broken pread/pwrite that can't handle a 64-bit off_t + * on 32-bit machines. + */ +#if defined(__hpux) && !defined(__LP64__) +# ifdef HAVE_PREAD64 +# undef pread +# define pread(_a, _b, _c, _d) pread64((_a), (_b), (_c), (_d)) +# endif +# ifdef HAVE_PWRITE64 +# undef pwrite +# define pwrite(_a, _b, _c, _d) pwrite64((_a), (_b), (_c), (_d)) +# endif +#endif /* __hpux && !__LP64__ */ + /* We wrap OpenBSD's strtonum() to get translatable error strings. */ __dso_public long long sudo_strtonum(const char *, long long, long long, const char **); #undef strtonum @@ -375,7 +349,7 @@ * All libc replacements are prefixed with "sudo_" to avoid namespace issues. */ -struct timeval; +struct passwd; struct timespec; #ifndef HAVE_CLOSEFROM @@ -398,16 +372,16 @@ # undef getline # define getline(_a, _b, _c) sudo_getline((_a), (_b), (_c)) #endif /* HAVE_GETLINE */ -#ifndef HAVE_UTIMES -__dso_public int sudo_utimes(const char *file, const struct timeval *times); -# undef utimes -# define utimes(_a, _b) sudo_utimes((_a), (_b)) -#endif /* HAVE_UTIMES */ -#ifdef HAVE_FUTIME -__dso_public int sudo_futimes(int fd, const struct timeval *times); -# undef futimes -# define futimes(_a, _b) sudo_futimes((_a), (_b)) -#endif /* HAVE_FUTIME */ +#ifndef HAVE_UTIMENSAT +__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_FUTIMENS +__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); # undef snprintf @@ -438,6 +412,16 @@ # 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); +# 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); +# 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); # undef memrchr @@ -471,16 +455,7 @@ # undef sig2str # define sig2str(_a, _b) sudo_sig2str((_a), (_b)) #endif /* HAVE_SIG2STR */ -#ifndef HAVE_CLOCK_GETTIME -# define CLOCK_REALTIME 0 -# ifdef __MACH__ -# define CLOCK_MONOTONIC 1 -# endif -__dso_public int sudo_clock_gettime(clockid_t clock_id, struct timespec *tp); -# undef clock_gettime -# define clock_gettime(_a, _b) sudo_clock_gettime((_a), (_b)) -#endif /* HAVE_CLOCK_GETTIME */ -#if !defined(HAVE_INET_NTOP) && defined(_SUDO_NET_IFS_C) +#if !defined(HAVE_INET_NTOP) && defined(SUDO_NET_IFS_C) __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)) @@ -495,5 +470,10 @@ # 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); +# undef reallocarray +# define reallocarray(_a, _b, _c) sudo_reallocarray((_a), (_b), (_c)) +#endif /* HAVE_REALLOCARRAY */ -#endif /* _SUDO_COMPAT_H */ +#endif /* SUDO_COMPAT_H */ diff -Nru sudo-1.8.12/include/sudo_conf.h sudo-1.8.16/include/sudo_conf.h --- sudo-1.8.12/include/sudo_conf.h 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/include/sudo_conf.h 2015-10-31 23:35:00.000000000 +0000 @@ -14,8 +14,8 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _SUDO_CONF_H -#define _SUDO_CONF_H +#ifndef SUDO_CONF_H +#define SUDO_CONF_H #include "sudo_queue.h" @@ -36,9 +36,9 @@ struct plugin_info { TAILQ_ENTRY(plugin_info) entries; - const char *path; - const char *symbol_name; - char * const * options; + char *path; + char *symbol_name; + char **options; unsigned int lineno; }; TAILQ_HEAD(plugin_info_list, plugin_info); @@ -51,7 +51,7 @@ TAILQ_HEAD(sudo_conf_debug_list, sudo_conf_debug); /* Read main sudo.conf file. */ -__dso_public void sudo_conf_read_v1(const char *conf_file, int conf_types); +__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. */ @@ -78,4 +78,4 @@ #define sudo_conf_group_source() sudo_conf_group_source_v1() #define sudo_conf_max_groups() sudo_conf_max_groups_v1() -#endif /* _SUDO_CONF_H */ +#endif /* SUDO_CONF_H */ diff -Nru sudo-1.8.12/include/sudo_debug.h sudo-1.8.16/include/sudo_debug.h --- sudo-1.8.12/include/sudo_debug.h 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/include/sudo_debug.h 2016-03-17 16:13:10.000000000 +0000 @@ -14,27 +14,17 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _SUDO_DEBUG_H -#define _SUDO_DEBUG_H +#ifndef SUDO_DEBUG_H +#define SUDO_DEBUG_H #include -#include "sudo_queue.h" - -/* Number of bits in a byte. */ -#ifndef NBBY -# ifdef __NBBY -# define NBBY __NBBY -# else -# define NBBY 8 -# endif +#ifdef HAVE_STDBOOL_H +# include +#else +# include "compat/stdbool.h" #endif +#include "sudo_queue.h" -/* Bit map macros. */ -#define sudo_setbit(_a, _i) ((_a)[(_i) / NBBY] |= 1 << ((_i) % NBBY)) -#define sudo_clrbit(_a, _i) ((_a)[(_i) / NBBY] &= ~(1<<((_i) % NBBY))) -#define sudo_isset(_a, _i) ((_a)[(_i) / NBBY] & (1<<((_i) % NBBY))) -#define sudo_isclr(_a, _i) (((_a)[(_i) / NBBY] & (1<<((_i) % NBBY))) == 0) - /* * List of debug files and flags for use in registration. */ @@ -108,15 +98,19 @@ * and sets sudo_debug_subsys for sudo_debug_exit(). */ #ifdef HAVE___FUNC__ -# define debug_decl(funcname, subsys) \ - const int sudo_debug_subsys = (subsys); \ - sudo_debug_enter(__func__, __FILE__, __LINE__, sudo_debug_subsys); +# define debug_decl_func(funcname) +# define debug_decl_vars(funcname, subsys) \ + const int sudo_debug_subsys = (subsys); #else -# define debug_decl(funcname, subsys) \ +# define debug_decl_func(funcname) \ + const char __func__[] = #funcname; +# define debug_decl_vars(funcname, subsys) \ const int sudo_debug_subsys = (subsys); \ - const char __func__[] = #funcname; \ - sudo_debug_enter(__func__, __FILE__, __LINE__, sudo_debug_subsys); + debug_decl_func(funcname); #endif +#define debug_decl(funcname, subsys) \ + debug_decl_vars((funcname), (subsys)) \ + sudo_debug_enter(__func__, __FILE__, __LINE__, sudo_debug_subsys); /* * Wrappers for sudo_debug_exit() and friends. @@ -143,6 +137,14 @@ return sudo_debug_rval; \ } while (0) +#define debug_return_ssize_t(rval) \ + do { \ + ssize_t sudo_debug_rval = (rval); \ + sudo_debug_exit_ssize_t(__func__, __FILE__, __LINE__, sudo_debug_subsys,\ + sudo_debug_rval); \ + return sudo_debug_rval; \ + } while (0) + #define debug_return_long(rval) \ do { \ long sudo_debug_rval = (rval); \ @@ -153,7 +155,7 @@ #define debug_return_bool(rval) \ do { \ - int sudo_debug_rval = (rval); \ + bool sudo_debug_rval = (rval); \ sudo_debug_exit_bool(__func__, __FILE__, __LINE__, sudo_debug_subsys, \ sudo_debug_rval); \ return sudo_debug_rval; \ @@ -225,11 +227,12 @@ __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, int rval); +__dso_public void sudo_debug_exit_bool_v1(const char *func, const char *file, int line, int subsys, bool rval); __dso_public void sudo_debug_exit_int_v1(const char *func, const char *file, int line, int subsys, int rval); __dso_public void sudo_debug_exit_long_v1(const char *func, const char *file, int line, int subsys, long rval); __dso_public void sudo_debug_exit_ptr_v1(const char *func, const char *file, int line, int subsys, const void *rval); __dso_public void sudo_debug_exit_size_t_v1(const char *func, const char *file, int line, int subsys, size_t rval); +__dso_public void sudo_debug_exit_ssize_t_v1(const char *func, const char *file, int line, int subsys, ssize_t rval); __dso_public void sudo_debug_exit_str_v1(const char *func, const char *file, int line, int subsys, const char *rval); __dso_public void sudo_debug_exit_str_masked_v1(const char *func, const char *file, int line, int subsys, const char *rval); __dso_public pid_t sudo_debug_fork_v1(void); @@ -253,6 +256,7 @@ #define sudo_debug_exit_long(_a, _b, _c, _d, _e) sudo_debug_exit_long_v1((_a), (_b), (_c), (_d), (_e)) #define sudo_debug_exit_ptr(_a, _b, _c, _d, _e) sudo_debug_exit_ptr_v1((_a), (_b), (_c), (_d), (_e)) #define sudo_debug_exit_size_t(_a, _b, _c, _d, _e) sudo_debug_exit_size_t_v1((_a), (_b), (_c), (_d), (_e)) +#define sudo_debug_exit_ssize_t(_a, _b, _c, _d, _e) sudo_debug_exit_ssize_t_v1((_a), (_b), (_c), (_d), (_e)) #define sudo_debug_exit_str(_a, _b, _c, _d, _e) sudo_debug_exit_str_v1((_a), (_b), (_c), (_d), (_e)) #define sudo_debug_exit_str_masked(_a, _b, _c, _d, _e) sudo_debug_exit_str_masked_v1((_a), (_b), (_c), (_d), (_e)) #define sudo_debug_fork() sudo_debug_fork_v1() @@ -267,4 +271,4 @@ #define sudo_debug_vprintf2(_a, _b, _c, _d, _e, _f) sudo_debug_vprintf2_v1((_a), (_b), (_c), (_d), (_e), (_f)) #define sudo_debug_write2(_a, _b, _c, _d, _e, _f, _g) sudo_debug_write2_v1((_a), (_b), (_c), (_d), (_e), (_f), (_g)) -#endif /* _SUDO_DEBUG_H */ +#endif /* SUDO_DEBUG_H */ diff -Nru sudo-1.8.12/include/sudo_dso.h sudo-1.8.16/include/sudo_dso.h --- sudo-1.8.12/include/sudo_dso.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/include/sudo_dso.h 2015-10-31 23:35:00.000000000 +0000 @@ -14,8 +14,8 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _SUDO_DSO_H -#define _SUDO_DSO_H +#ifndef SUDO_DSO_H +#define SUDO_DSO_H /* Values for sudo_dso_load() mode. */ #define SUDO_DSO_LAZY 0x1 @@ -52,4 +52,4 @@ #define sudo_dso_load(_a, _b) sudo_dso_load_v1((_a), (_b)) #define sudo_dso_preload_table(_a) sudo_dso_preload_table_v1((_a)) -#endif /* _SUDO_DSO_H */ +#endif /* SUDO_DSO_H */ diff -Nru sudo-1.8.12/include/sudo_event.h sudo-1.8.16/include/sudo_event.h --- sudo-1.8.12/include/sudo_event.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/include/sudo_event.h 2015-10-31 23:35:00.000000000 +0000 @@ -14,8 +14,8 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _SUDO_EVENT_H -#define _SUDO_EVENT_H +#ifndef SUDO_EVENT_H +#define SUDO_EVENT_H #include "sudo_queue.h" @@ -160,4 +160,4 @@ int sudo_ev_del_impl(struct sudo_event_base *base, struct sudo_event *ev); int sudo_ev_scan_impl(struct sudo_event_base *base, int flags); -#endif /* _SUDO_EVENT_H */ +#endif /* SUDO_EVENT_H */ diff -Nru sudo-1.8.12/include/sudo_fatal.h sudo-1.8.16/include/sudo_fatal.h --- sudo-1.8.12/include/sudo_fatal.h 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/include/sudo_fatal.h 2015-10-31 23:35:24.000000000 +0000 @@ -14,10 +14,15 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _SUDO_FATAL_H_ -#define _SUDO_FATAL_H_ +#ifndef SUDO_FATAL_H +#define SUDO_FATAL_H #include +#ifdef HAVE_STDBOOL_H +# include +#else +# include "compat/stdbool.h" +#endif /* HAVE_STDBOOL_H */ /* * We wrap fatal/fatalx and warn/warnx so that the same output can @@ -116,11 +121,12 @@ 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 *msgid) __format_arg(1); -__dso_public char *sudo_warn_strerror_v1(int errnum); +__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_vfatal_nodebug_v1(const char *fmt, va_list ap) __printf0like(1, 0) __attribute__((__noreturn__)); @@ -129,12 +135,11 @@ __dso_public void sudo_warnx_nodebug_v1(const char *fmt, ...) __printflike(1, 2); __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_warn_set_conversation_v1(int (*conv)(int num_msgs, const struct sudo_conv_message *msgs, struct sudo_conv_reply *replies)); +__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)) -#define sudo_warn_gettext(_a) sudo_warn_gettext_v1((_a)) -#define sudo_warn_strerror(_a) sudo_warn_strerror_v1((_a)) +#define sudo_warn_set_locale_func(_a) sudo_warn_set_locale_func_v1((_a)) #define sudo_fatal_nodebug sudo_fatal_nodebug_v1 #define sudo_fatalx_nodebug sudo_fatalx_nodebug_v1 #define sudo_vfatal_nodebug(_a, _b) sudo_vfatal_nodebug_v1((_a), (_b)) @@ -145,4 +150,10 @@ #define sudo_vwarnx_nodebug(_a, _b) sudo_vwarnx_nodebug_v1((_a), (_b)) #define sudo_warn_set_conversation(_a) sudo_warn_set_conversation_v1(_a) -#endif /* _SUDO_FATAL_H_ */ +#ifdef DEFAULT_TEXT_DOMAIN +# define sudo_warn_gettext(_a) sudo_warn_gettext_v1(DEFAULT_TEXT_DOMAIN, (_a)) +#else +# define sudo_warn_gettext(_a) sudo_warn_gettext_v1(NULL, (_a)) +#endif + +#endif /* SUDO_FATAL_H */ diff -Nru sudo-1.8.12/include/sudo_gettext.h sudo-1.8.16/include/sudo_gettext.h --- sudo-1.8.12/include/sudo_gettext.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/include/sudo_gettext.h 2015-10-31 23:35:00.000000000 +0000 @@ -14,8 +14,8 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _SUDO_GETTEXT_H -#define _SUDO_GETTEXT_H +#ifndef SUDO_GETTEXT_H +#define SUDO_GETTEXT_H /* * Solaris locale.h includes libintl.h which causes problems when we @@ -72,4 +72,4 @@ #endif /* HAVE_LIBINTL_H */ -#endif /* _SUDO_GETTEXT_H */ +#endif /* SUDO_GETTEXT_H */ diff -Nru sudo-1.8.12/include/sudo_lbuf.h sudo-1.8.16/include/sudo_lbuf.h --- sudo-1.8.12/include/sudo_lbuf.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/include/sudo_lbuf.h 2015-10-31 23:35:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2010, 2011, 2013, 2014 + * Copyright (c) 2007, 2010, 2011, 2013-2015 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -17,8 +17,8 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef _SUDO_LBUF_H -#define _SUDO_LBUF_H +#ifndef SUDO_LBUF_H +#define SUDO_LBUF_H /* * Line buffer struct. @@ -30,21 +30,26 @@ int indent; int len; int size; - int cols; + short cols; + short error; }; 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 void sudo_lbuf_append_v1(struct sudo_lbuf *lbuf, const char *fmt, ...) __printflike(2, 3); -__dso_public void sudo_lbuf_append_quoted_v1(struct sudo_lbuf *lbuf, const char *set, const char *fmt, ...) __printflike(3, 4); +__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); #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)) #define sudo_lbuf_append sudo_lbuf_append_v1 #define sudo_lbuf_append_quoted sudo_lbuf_append_quoted_v1 #define sudo_lbuf_print(_a) sudo_lbuf_print_v1((_a)) +#define sudo_lbuf_error(_a) sudo_lbuf_error_v1((_a)) +#define sudo_lbuf_clearerr(_a) sudo_lbuf_clearerr_v1((_a)) -#endif /* _SUDO_LBUF_H */ +#endif /* SUDO_LBUF_H */ diff -Nru sudo-1.8.12/include/sudo_plugin.h sudo-1.8.16/include/sudo_plugin.h --- sudo-1.8.12/include/sudo_plugin.h 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/include/sudo_plugin.h 2016-03-17 16:13:10.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009-2014 Todd C. Miller + * Copyright (c) 2009-2016 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 @@ -14,23 +14,23 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _SUDO_PLUGIN_H -#define _SUDO_PLUGIN_H +#ifndef SUDO_PLUGIN_H +#define SUDO_PLUGIN_H /* API version major/minor */ #define SUDO_API_VERSION_MAJOR 1 -#define SUDO_API_VERSION_MINOR 7 -#define SUDO_API_MKVERSION(x, y) ((x << 16) | y) +#define SUDO_API_VERSION_MINOR 9 +#define SUDO_API_MKVERSION(x, y) (((x) << 16) | (y)) #define SUDO_API_VERSION SUDO_API_MKVERSION(SUDO_API_VERSION_MAJOR, SUDO_API_VERSION_MINOR) -/* Getters and setters for API version */ +/* Getters and setters for plugin API versions */ #define SUDO_API_VERSION_GET_MAJOR(v) ((v) >> 16) -#define SUDO_API_VERSION_GET_MINOR(v) ((v) & 0xffff) +#define SUDO_API_VERSION_GET_MINOR(v) ((v) & 0xffffU) #define SUDO_API_VERSION_SET_MAJOR(vp, n) do { \ - *(vp) = (*(vp) & 0x0000ffff) | ((n) << 16); \ + *(vp) = (*(vp) & 0x0000ffffU) | ((n) << 16); \ } while(0) #define SUDO_API_VERSION_SET_MINOR(vp, n) do { \ - *(vp) = (*(vp) & 0xffff0000) | (n); \ + *(vp) = (*(vp) & 0xffff0000U) | (n); \ } while(0) /* Conversation function types and defines */ @@ -61,8 +61,26 @@ char *reply; }; +/* Conversation callback API version major/minor */ +#define SUDO_CONV_CALLBACK_VERSION_MAJOR 1 +#define SUDO_CONV_CALLBACK_VERSION_MINOR 0 +#define SUDO_CONV_CALLBACK_VERSION SUDO_API_MKVERSION(SUDO_CONV_CALLBACK_VERSION_MAJOR, SUDO_CONV_CALLBACK_VERSION_MINOR) + +/* + * Callback struct to be passed to the conversation function. + * Can be used to perform operations on suspend/resume such + * as dropping/acquiring locks. + */ +typedef int (*sudo_conv_callback_fn_t)(int signo, void *closure); +struct sudo_conv_callback { + unsigned int version; + void *closure; + sudo_conv_callback_fn_t on_suspend; + sudo_conv_callback_fn_t on_resume; +}; + typedef int (*sudo_conv_t)(int num_msgs, const struct sudo_conv_message msgs[], - struct sudo_conv_reply replies[]); + struct sudo_conv_reply replies[], struct sudo_conv_callback *callback); typedef int (*sudo_printf_t)(int msg_type, const char *fmt, ...); /* @@ -78,8 +96,8 @@ /* Hook structure definition. */ struct sudo_hook { - int hook_version; - int hook_type; + unsigned int hook_version; + unsigned int hook_type; sudo_hook_fn_t hook_fn; void *closure; }; @@ -87,18 +105,7 @@ /* Hook API version major/minor */ #define SUDO_HOOK_VERSION_MAJOR 1 #define SUDO_HOOK_VERSION_MINOR 0 -#define SUDO_HOOK_MKVERSION(x, y) ((x << 16) | y) -#define SUDO_HOOK_VERSION SUDO_HOOK_MKVERSION(SUDO_HOOK_VERSION_MAJOR, SUDO_HOOK_VERSION_MINOR) - -/* Getters and setters for hook API version */ -#define SUDO_HOOK_VERSION_GET_MAJOR(v) ((v) >> 16) -#define SUDO_HOOK_VERSION_GET_MINOR(v) ((v) & 0xffff) -#define SUDO_HOOK_VERSION_SET_MAJOR(vp, n) do { \ - *(vp) = (*(vp) & 0x0000ffff) | ((n) << 16); \ -} while(0) -#define SUDO_HOOK_VERSION_SET_MINOR(vp, n) do { \ - *(vp) = (*(vp) & 0xffff0000) | (n); \ -} while(0) +#define SUDO_HOOK_VERSION SUDO_API_MKVERSION(SUDO_HOOK_VERSION_MAJOR, SUDO_HOOK_VERSION_MINOR) /* * Hook function return values. @@ -166,17 +173,13 @@ /* Sudoers group plugin version major/minor */ #define GROUP_API_VERSION_MAJOR 1 #define GROUP_API_VERSION_MINOR 0 -#define GROUP_API_VERSION ((GROUP_API_VERSION_MAJOR << 16) | GROUP_API_VERSION_MINOR) +#define GROUP_API_VERSION SUDO_API_MKVERSION(GROUP_API_VERSION_MAJOR, GROUP_API_VERSION_MINOR) -/* Getters and setters for group version */ -#define GROUP_API_VERSION_GET_MAJOR(v) ((v) >> 16) -#define GROUP_API_VERSION_GET_MINOR(v) ((v) & 0xffff) -#define GROUP_API_VERSION_SET_MAJOR(vp, n) do { \ - *(vp) = (*(vp) & 0x0000ffff) | ((n) << 16); \ -} while(0) -#define GROUP_API_VERSION_SET_MINOR(vp, n) do { \ - *(vp) = (*(vp) & 0xffff0000) | (n); \ -} while(0) +/* Getters and setters for group version (for source compat only) */ +#define GROUP_API_VERSION_GET_MAJOR(v) SUDO_API_VERSION_GET_MAJOR(v) +#define GROUP_API_VERSION_GET_MINOR(v) SUDO_API_VERSION_GET_MINOR(v) +#define GROUP_API_VERSION_SET_MAJOR(vp, n) SUDO_API_VERSION_SET_MAJOR(vp, n) +#define GROUP_API_VERSION_SET_MINOR(vp, n) SUDO_API_VERSION_SET_MINOR(vp, n) /* * version: for compatibility checking @@ -192,4 +195,4 @@ int (*query)(const char *user, const char *group, const struct passwd *pwd); }; -#endif /* _SUDO_PLUGIN_H */ +#endif /* SUDO_PLUGIN_H */ diff -Nru sudo-1.8.12/include/sudo_queue.h sudo-1.8.16/include/sudo_queue.h --- sudo-1.8.12/include/sudo_queue.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/include/sudo_queue.h 2015-10-31 23:35:00.000000000 +0000 @@ -30,8 +30,8 @@ * $FreeBSD: head/sys/sys/queue.h 251887 2013-06-18 02:57:56Z lstewart $ */ -#ifndef _SUDO_QUEUE_H_ -#define _SUDO_QUEUE_H_ +#ifndef SUDO_QUEUE_H +#define SUDO_QUEUE_H /* * This file defines four types of data structures: singly-linked lists, @@ -803,4 +803,4 @@ (head)->tqh_last = last; \ } while (0) -#endif /* !_SUDO_QUEUE_H_ */ +#endif /* !SUDO_QUEUE_H */ diff -Nru sudo-1.8.12/include/sudo_util.h sudo-1.8.16/include/sudo_util.h --- sudo-1.8.12/include/sudo_util.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/include/sudo_util.h 2016-03-17 16:13:10.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013-2014 Todd C. Miller + * Copyright (c) 2013-2015 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 @@ -14,8 +14,8 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _SUDO_UTIL_H -#define _SUDO_UTIL_H +#ifndef SUDO_UTIL_H +#define SUDO_UTIL_H #ifdef HAVE_STDBOOL_H # include @@ -104,26 +104,40 @@ #endif /* - * Macros to extract ctime and mtime as timevals. + * The timespec version of st_mtime may vary on different platforms. */ -#ifdef HAVE_ST_MTIM -# ifdef HAVE_ST__TIM -# define ctim_get(_x, _y) TIMESPEC_TO_TIMEVAL((_y), &(_x)->st_ctim.st__tim) -# define mtim_get(_x, _y) TIMESPEC_TO_TIMEVAL((_y), &(_x)->st_mtim.st__tim) +#if defined(HAVE_ST_MTIM) +# if defined(HAVE_ST__TIM) +# define SUDO_ST_MTIM st_mtim.st__tim # else -# define ctim_get(_x, _y) TIMESPEC_TO_TIMEVAL((_y), &(_x)->st_ctim) -# define mtim_get(_x, _y) TIMESPEC_TO_TIMEVAL((_y), &(_x)->st_mtim) +# define SUDO_ST_MTIM st_mtim # endif -#else -# ifdef HAVE_ST_MTIMESPEC -# define ctim_get(_x, _y) TIMESPEC_TO_TIMEVAL((_y), &(_x)->st_ctimespec) -# define mtim_get(_x, _y) TIMESPEC_TO_TIMEVAL((_y), &(_x)->st_mtimespec) +#elif defined(HAVE_ST_MTIMESPEC) +# define SUDO_ST_MTIM st_mtimespec +#endif + +/* + * Macro to extract mtime as timespec. + * If there is no way to set the timestamp using nanosecond precision, + * we only fetch microsecond precision. Otherwise there is a mismatch + * between the timestamp we read and the one we wrote. + */ +#if defined(SUDO_ST_MTIM) +# if defined(HAVE_FUTIMENS) && defined(HAVE_UTIMENSAT) +# define mtim_get(_x, _y) do { (_y).tv_sec = (_x)->SUDO_ST_MTIM.tv_sec; (_y).tv_nsec = (_x)->SUDO_ST_MTIM.tv_nsec; } while (0) # else -# define ctim_get(_x, _y) do { (_y)->tv_sec = (_x)->st_ctime; (_y)->tv_usec = 0; } while (0) -# define mtim_get(_x, _y) do { (_y)->tv_sec = (_x)->st_mtime; (_y)->tv_usec = 0; } while (0) -# endif /* HAVE_ST_MTIMESPEC */ +# define mtim_get(_x, _y) do { (_y).tv_sec = (_x)->SUDO_ST_MTIM.tv_sec; (_y).tv_nsec = ((_x)->SUDO_ST_MTIM.tv_nsec / 1000) * 1000; } while (0) +# endif +#else +# define mtim_get(_x, _y) do { (_y).tv_sec = (_x)->st_mtime; (_y).tv_nsec = 0; } while (0) #endif /* HAVE_ST_MTIM */ +/* Bit map macros. */ +#define sudo_setbit(_a, _i) ((_a)[(_i) / NBBY] |= 1 << ((_i) % NBBY)) +#define sudo_clrbit(_a, _i) ((_a)[(_i) / NBBY] &= ~(1<<((_i) % NBBY))) +#define sudo_isset(_a, _i) ((_a)[(_i) / NBBY] & (1<<((_i) % NBBY))) +#define sudo_isclr(_a, _i) (((_a)[(_i) / NBBY] & (1<<((_i) % NBBY))) == 0) + /* * Macros to quiet gcc's warn_unused_result attribute. */ @@ -137,12 +151,25 @@ #endif /* aix.c */ +__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); #define aix_prep_user(_a, _b) aix_prep_user_v1((_a), (_b)) __dso_public int aix_restoreauthdb_v1(void); #define aix_restoreauthdb() aix_restoreauthdb_v1() __dso_public int aix_setauthdb_v1(char *user); -#define aix_setauthdb(_a) aix_setauthdb_v1((_a)) +__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); +#define sudo_gethostname() sudo_gethostname_v1() + +/* gettime.c */ +__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); +#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); @@ -158,6 +185,8 @@ #define SUDO_UNLOCK 4 /* unlock a file */ __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); +#define sudo_lock_region(_a, _b, _c) sudo_lock_region_v1((_a), (_b), (_c)) /* parseln.c */ __dso_public ssize_t sudo_parseln_v1(char **buf, size_t *bufsize, unsigned int *lineno, FILE *fp); @@ -183,6 +212,10 @@ __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); +#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); #define sudo_strtobool(_a) sudo_strtobool_v1((_a)) @@ -214,4 +247,4 @@ __dso_public void sudo_get_ttysize_v1(int *rowp, int *colp); #define sudo_get_ttysize(_a, _b) sudo_get_ttysize_v1((_a), (_b)) -#endif /* _SUDO_UTIL_H */ +#endif /* SUDO_UTIL_H */ diff -Nru sudo-1.8.12/init.d/sudo.conf.in sudo-1.8.16/init.d/sudo.conf.in --- sudo-1.8.12/init.d/sudo.conf.in 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.16/init.d/sudo.conf.in 2015-10-31 23:35:00.000000000 +0000 @@ -0,0 +1,6 @@ +# Create an empty sudo time stamp directory on OSes using systemd. +# Sudo will create the directory itself but this can cause problems +# on systems that have SELinux enabled since the directories will be +# created with the user's security context. +d @rundir@ 0711 root root +D @rundir@/ts 0700 root root diff -Nru sudo-1.8.12/INSTALL sudo-1.8.16/INSTALL --- sudo-1.8.12/INSTALL 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/INSTALL 2016-03-17 16:13:10.000000000 +0000 @@ -122,6 +122,9 @@ --docdir=DIR Install other sudo documentation in DIR [DATAROOTDIR/doc/sudo] + --with-exampledir=DIR + Install sudo example files in DIR [DATAROOTDIR/doc/sudo/examples] + --with-plugindir=DIR Set the directory that sudo looks in to find the policy and I/O logging plugins. Defaults to the LIBEXEC/sudo. @@ -162,6 +165,14 @@ _FORTIFY_SOURCE defined to 2, building with -fstack-protector and linking with -zrelro, where supported. + --enable-asan + Enable the use of AddressSanitizer if supported by the + compiler. This can help detect common problems such as + buffer overflows and user after free bugs as well as behavior + undefined by the C standard. For more information see + https://github.com/google/sanitizers/wiki/AddressSanitizer + The following compiler flag is used: -fsanitize=address,undefined + --enable-pie Build sudo and related programs as as a position independent executables (PIE). This improves the effectiveness of address @@ -195,14 +206,6 @@ binary itself. This will also disable the noexec option as it too relies on dynamic shared object support. - --enable-static-sudoers - By default, the sudoers plugin is built and installed as a - dynamic shared object. When the --enable-static-sudoers - option is specified, the sudoers plugin is compiled directly - into the sudo binary. Unlike --disable-shared, this does - not prevent other plugins from being used and the noexec - option will continue to function. - --disable-shared-libutil Disable the use of the dynamic libsudo_util library. By default, sudo, the sudoers plugin and the associated sudo @@ -212,6 +215,22 @@ instead. This option may only be used in conjunction with the --enable-static-sudoers option. + --enable-static-sudoers + By default, the sudoers plugin is built and installed as a + dynamic shared object. When the --enable-static-sudoers + option is specified, the sudoers plugin is compiled directly + into the sudo binary. Unlike --disable-shared, this does + not prevent other plugins from being used and the noexec + option will continue to function. + + --enable-tmpfiles.d=DIR + Set the directory to be used when installing the sudo + tmpfiles.d file. This is used to create (or clear) the + sudo time stamp directory on operating systems that use + systemd. If this option is not specified, configure will + use the /usr/lib/tmpfiles.d directory if the file + /usr/lib/tmpfiles.d/systemd.conf exists. + --enable-zlib[=location] Enable the use of the zlib compress library when storing I/O log files. If specified, location is the base directory @@ -381,10 +400,11 @@ link without it. --with-aixauth - Enable support for the AIX 4.x general authentication function. - This will use the authentication scheme specified for the user - on the machine. It is on by default for AIX systems that - support it. + Enable support for the AIX general authentication function. + This will use the authentication scheme specified for the + user on the machine. By default, sudo will use either AIX + authentication or PAM depending on the value of the auth_type + setting in the /etc/security/login.cfg file. --with-bsdauth Enable support for BSD authentication. This is the default @@ -422,7 +442,8 @@ principal name. --with-solaris-audit - Enable audit support for Solaris systems. + Enable audit support for Solaris 11 and above. + For older versions of Solaris, use --with-bsm-audit --with-opie[=DIR] Enable NRL OPIE OTP (One Time Password) support. If specified, diff -Nru sudo-1.8.12/lib/util/aix.c sudo-1.8.16/lib/util/aix.c --- sudo-1.8.12/lib/util/aix.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/util/aix.c 2016-03-17 16:13:10.000000000 +0000 @@ -20,14 +20,8 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include +#include #include #include @@ -35,7 +29,6 @@ #include "sudo_gettext.h" /* must be included before sudo_compat.h */ #include "sudo_compat.h" -#include "sudo_alloc.h" #include "sudo_fatal.h" #include "sudo_debug.h" #include "sudo_util.h" @@ -136,54 +129,128 @@ #ifdef HAVE_SETAUTHDB +# ifndef HAVE_AUTHDB_T +typedef char authdb_t[16]; +# endif + +/* The empty string means to access all defined authentication registries. */ +static authdb_t old_registry; + # if defined(HAVE_DECL_SETAUTHDB) && !HAVE_DECL_SETAUTHDB -int setauthdb(char *new, char *old); +int setauthdb(authdb_t new, authdb_t old); +int getauthdb(authdb_t val); # endif # if defined(HAVE_DECL_USRINFO) && !HAVE_DECL_USRINFO int usrinfo(int cmd, char *buf, int count); # endif /* - * Look up administrative domain for user (SYSTEM in /etc/security/user) and + * Look up authentication registry for user (SYSTEM in /etc/security/user) and * set it as the default for the process. This ensures that password and * group lookups are made against the correct source (files, NIS, LDAP, etc). + * Does not modify errno even on error since callers do not check rval. */ int -aix_setauthdb_v1(char *user) +aix_getauthregistry_v1(char *user, char *saved_registry) { - char *registry; - debug_decl(aix_setauthdb, SUDO_DEBUG_UTIL) + int serrno = errno; + int rval = -1; + debug_decl(aix_getauthregistry, SUDO_DEBUG_UTIL) + saved_registry[0] = '\0'; if (user != NULL) { + char *registry; + if (setuserdb(S_READ) != 0) { sudo_warn(U_("unable to open userdb")); - debug_return_int(-1); + goto done; } - if (getuserattr(user, S_REGISTRY, ®istry, SEC_CHAR) == 0) { - if (setauthdb(registry, NULL) != 0) { - sudo_warn(U_("unable to switch to registry \"%s\" for %s"), - registry, user); - debug_return_int(-1); + rval = getuserattr(user, S_REGISTRY, ®istry, SEC_CHAR); + if (rval == 0) { + /* sizeof(authdb_t) is guaranteed to be 16 */ + if (strlcpy(saved_registry, registry, 16) >= 16) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "registry for user %s too long: %s", user, registry); } + sudo_debug_printf(SUDO_DEBUG_INFO, + "%s: saved authentication registry for user %s is %s", + __func__, user, saved_registry); } enduserdb(); + } else { + /* Get the process-wide registry. */ + rval = getauthdb(saved_registry); } - debug_return_int(0); +done: + errno = serrno; + debug_return_int(rval); +} + +/* + * Set the specified authentication registry for user (SYSTEM in + * /etc/security/user) and set it as the default for the process. + * This ensures that password and group lookups are made against + * the correct source (files, NIS, LDAP, etc). + * If registry is NULL, look it up based on the user name. + * Does not modify errno even on error since callers do not check rval. + */ +int +aix_setauthdb_v1(char *user) +{ + return aix_setauthdb_v2(user, NULL); +} + +int +aix_setauthdb_v2(char *user, char *registry) +{ + authdb_t regbuf; + int serrno = errno; + int rval = -1; + debug_decl(aix_setauthdb, SUDO_DEBUG_UTIL) + + if (user != NULL) { + /* Look up authentication registry if one is not provided. */ + if (registry == NULL) { + if (aix_getauthregistry(user, regbuf) != 0) + goto done; + registry = regbuf; + } + rval = setauthdb(registry, old_registry); + if (rval != 0) { + sudo_warn(U_("unable to switch to registry \"%s\" for %s"), + registry, user); + } else { + sudo_debug_printf(SUDO_DEBUG_INFO, + "%s: setting authentication registry to %s", + __func__, registry); + } + } +done: + errno = serrno; + debug_return_int(rval); } /* - * Restore the saved administrative domain, if any. + * Restore the saved authentication registry, if any. + * Does not modify errno even on error since callers do not check rval. */ int aix_restoreauthdb_v1(void) { + int serrno = errno; + int rval = 0; debug_decl(aix_setauthdb, SUDO_DEBUG_UTIL) - if (setauthdb(NULL, NULL) != 0) { + if (setauthdb(old_registry, NULL) != 0) { sudo_warn(U_("unable to restore registry")); - debug_return_int(-1); - } - debug_return_int(0); + rval = -1; + } else { + sudo_debug_printf(SUDO_DEBUG_INFO, + "%s: setting authentication registry to %s", + __func__, old_registry); +} + errno = serrno; + debug_return_int(rval); } #endif @@ -195,14 +262,18 @@ debug_decl(aix_setauthdb, SUDO_DEBUG_UTIL) /* set usrinfo, like login(1) does */ - len = sudo_easprintf(&info, "NAME=%s%cLOGIN=%s%cLOGNAME=%s%cTTY=%s%c", + len = asprintf(&info, "NAME=%s%cLOGIN=%s%cLOGNAME=%s%cTTY=%s%c", user, '\0', user, '\0', user, '\0', tty ? tty : "", '\0'); + if (len == -1) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_int(-1); + } (void)usrinfo(SETUINFO, info, len); - sudo_efree(info); + free(info); #ifdef HAVE_SETAUTHDB - /* set administrative domain */ - if (aix_setauthdb(user) != 0) + /* set authentication registry */ + if (aix_setauthdb(user, NULL) != 0) debug_return_int(-1); #endif diff -Nru sudo-1.8.12/lib/util/alloc.c sudo-1.8.16/lib/util/alloc.c --- sudo-1.8.12/lib/util/alloc.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/util/alloc.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,259 +0,0 @@ -/* - * Copyright (c) 1999-2005, 2007, 2010-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. - * - * Sponsored in part by the Defense Advanced Research Projects - * Agency (DARPA) and Air Force Research Laboratory, Air Force - * Materiel Command, USAF, under agreement number F39502-99-1-0512. - */ - -#include - -#include -#include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ -#ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif -# include -#endif /* HAVE_STRING_H */ -#ifdef HAVE_STRINGS_H -# include -#endif /* HAVE_STRING_H */ -#if defined(HAVE_MALLOC_H) && !defined(STDC_HEADERS) -# include -#endif /* HAVE_MALLOC_H && !STDC_HEADERS */ -#if defined(HAVE_STDINT_H) -# include -#elif defined(HAVE_INTTYPES_H) -# include -#endif -#include - -#define DEFAULT_TEXT_DOMAIN "sudo" -#include "sudo_gettext.h" /* must be included before sudo_compat.h */ - -#include "sudo_compat.h" -#include "sudo_alloc.h" -#include "sudo_fatal.h" - -/* - * sudo_emalloc() calls the system malloc(3) and exits with an error if - * malloc(3) fails. - */ -void * -sudo_emalloc_v1(size_t size) -{ - void *ptr; - - if (size == 0) - sudo_fatalx_nodebug(_("internal error, tried allocate zero bytes")); - - if ((ptr = malloc(size)) == NULL) - sudo_fatal_nodebug(NULL); - return ptr; -} - -/* - * sudo_emallocarray() allocates nmemb * size bytes and exits with an error - * if overflow would occur or if the system malloc(3) fails. - */ -void * -sudo_emallocarray_v1(size_t nmemb, size_t size) -{ - void *ptr; - - if (nmemb == 0 || size == 0) - sudo_fatalx_nodebug(_("internal error, tried allocate zero bytes")); - if (nmemb > SIZE_MAX / size) - sudo_fatalx_nodebug(_("internal error, %s overflow"), "sudo_emallocarray"); - - size *= nmemb; - if ((ptr = malloc(size)) == NULL) - sudo_fatal_nodebug(NULL); - return ptr; -} - -/* - * sudo_ecalloc() allocates nmemb * size bytes and exits with an error - * if overflow would occur or if the system malloc(3) fails. - * On success, the allocated space is zero-filled. - */ -void * -sudo_ecalloc_v1(size_t nmemb, size_t size) -{ - void *ptr; - - if (nmemb == 0 || size == 0) - sudo_fatalx_nodebug(_("internal error, tried allocate zero bytes")); - if (nmemb != 1) { - if (nmemb > SIZE_MAX / size) - sudo_fatalx_nodebug(_("internal error, %s overflow"), "sudo_ecalloc"); - size *= nmemb; - } - if ((ptr = malloc(size)) == NULL) - sudo_fatal_nodebug(NULL); - memset(ptr, 0, size); - return ptr; -} - -/* - * sudo_erealloc() calls the system realloc(3) and exits with an error if - * realloc(3) fails. You can call sudo_erealloc() with a NULL pointer even - * if the system realloc(3) does not support this. - */ -void * -sudo_erealloc_v1(void *ptr, size_t size) -{ - - if (size == 0) - sudo_fatalx_nodebug(_("internal error, tried allocate zero bytes")); - - ptr = ptr ? realloc(ptr, size) : malloc(size); - if (ptr == NULL) - sudo_fatal_nodebug(NULL); - return ptr; -} - -/* - * sudo_ereallocarray() sudo_realloc(3)s nmemb * size bytes and exits with an - * error if overflow would occur or if the system malloc(3)/realloc(3) fails. - * You can call sudo_ereallocarray() with a NULL pointer even if the system - * realloc(3) does not support this. - */ -void * -sudo_ereallocarray_v1(void *ptr, size_t nmemb, size_t size) -{ - - if (nmemb == 0 || size == 0) - sudo_fatalx_nodebug(_("internal error, tried allocate zero bytes")); - if (nmemb > SIZE_MAX / size) - sudo_fatalx_nodebug(_("internal error, %s overflow"), "sudo_ereallocarray"); - - size *= nmemb; - ptr = ptr ? realloc(ptr, size) : malloc(size); - if (ptr == NULL) - sudo_fatal_nodebug(NULL); - return ptr; -} - -/* - * sudo_erecalloc() realloc(3)s nmemb * msize bytes and exits with an error - * if overflow would occur or if the system malloc(3)/realloc(3) fails. - * On success, the new space is zero-filled. You can call sudo_erealloc() - * with a NULL pointer even if the system realloc(3) does not support this. - */ -void * -sudo_erecalloc_v1(void *ptr, size_t onmemb, size_t nmemb, size_t msize) -{ - size_t size; - - if (nmemb == 0 || msize == 0) - sudo_fatalx_nodebug(_("internal error, tried allocate zero bytes")); - if (nmemb > SIZE_MAX / msize) - sudo_fatalx_nodebug(_("internal error, %s overflow"), "sudo_erecalloc"); - - size = nmemb * msize; - ptr = ptr ? realloc(ptr, size) : malloc(size); - if (ptr == NULL) - sudo_fatal_nodebug(NULL); - if (nmemb > onmemb) { - size = (nmemb - onmemb) * msize; - memset((char *)ptr + (onmemb * msize), 0, size); - } - return ptr; -} - -/* - * sudo_estrdup() is like strdup(3) except that it exits with an error if - * malloc(3) fails. NOTE: unlike strdup(3), sudo_estrdup(NULL) is legal. - */ -char * -sudo_estrdup_v1(const char *src) -{ - char *dst = NULL; - size_t len; - - if (src != NULL) { - len = strlen(src); - dst = (char *) sudo_emalloc(len + 1); - (void) memcpy(dst, src, len); - dst[len] = '\0'; - } - return dst; -} - -/* - * sudo_estrndup() is like strndup(3) except that it exits with an error if - * malloc(3) fails. NOTE: unlike strdup(3), sudo_estrdup(NULL) is legal. - */ -char * -sudo_estrndup_v1(const char *src, size_t maxlen) -{ - char *dst = NULL; - size_t len = 0; - - if (src != NULL) { - while (maxlen != 0 && src[len] != '\0') { - len++; - maxlen--; - } - dst = (char *) sudo_emalloc(len + 1); - (void) memcpy(dst, src, len); - dst[len] = '\0'; - } - return dst; -} - -/* - * sudo_easprintf() calls vasprintf() and exits with an error if vasprintf() - * returns -1 (out of memory). - */ -int -sudo_easprintf_v1(char **ret, const char *fmt, ...) -{ - int len; - va_list ap; - - va_start(ap, fmt); - len = vasprintf(ret, fmt, ap); - va_end(ap); - - if (len == -1) - sudo_fatal_nodebug(NULL); - return len; -} - -/* - * sudo_evasprintf() calls vasprintf() and exits with an error if vasprintf() - * returns -1 (out of memory). - */ -int -sudo_evasprintf_v1(char **ret, const char *fmt, va_list args) -{ - int len; - - if ((len = vasprintf(ret, fmt, args)) == -1) - sudo_fatal_nodebug(NULL); - return len; -} diff -Nru sudo-1.8.12/lib/util/clock_gettime.c sudo-1.8.16/lib/util/clock_gettime.c --- sudo-1.8.12/lib/util/clock_gettime.c 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/lib/util/clock_gettime.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,80 +0,0 @@ -/* - * Copyright (c) 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. - */ - -#include - -#if !defined(HAVE_CLOCK_GETTIME) - -#include -#include - -#include -#include -#ifdef TIME_WITH_SYS_TIME -# include -#endif -#ifndef HAVE_STRUCT_TIMESPEC -# include "compat/timespec.h" -#endif - -#include "sudo_compat.h" - -#ifdef __MACH__ -# include -# include -# include -#endif - -/* - * Trivial clock_gettime() that supports CLOCK_REALTIME - * (and CLOCK_MONOTONIC on Mach). - */ -int -sudo_clock_gettime(clockid_t clock_id, struct timespec *ts) -{ - - switch (clock_id) { -#ifdef __MACH__ - case CLOCK_MONOTONIC: - { - uint64_t abstime, nsec; - static mach_timebase_info_data_t timebase_info; - - if (timebase_info.denom == 0) - (void) mach_timebase_info(&timebase_info); - abstime = mach_absolute_time(); - nsec = abstime * timebase_info.numer / timebase_info.denom; - ts->tv_sec = nsec / 1000000000; - ts->tv_nsec = nsec % 1000000000; - return 0; - } -#endif - case CLOCK_REALTIME: - { - struct timeval tv; - - gettimeofday(&tv, NULL); - ts->tv_sec = tv.tv_sec; - ts->tv_nsec = tv.tv_usec * 1000; - return 0; - } - default: - errno = EINVAL; - return -1; - } -} - -#endif /* !HAVE_CLOCK_GETTIME */ diff -Nru sudo-1.8.12/lib/util/closefrom.c sudo-1.8.16/lib/util/closefrom.c --- sudo-1.8.12/lib/util/closefrom.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/util/closefrom.c 2015-10-31 23:35:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004-2005, 2007, 2010, 2012-2014 + * Copyright (c) 2004-2005, 2007, 2010, 2012-2015 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -22,39 +22,21 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #include #include #ifdef HAVE_PSTAT_GETPROC # include #else -# ifdef HAVE_DIRENT_H -# include -# define NAMLEN(dirent) strlen((dirent)->d_name) -# else -# define dirent direct -# define NAMLEN(dirent) (dirent)->d_namlen -# ifdef HAVE_SYS_NDIR_H -# include -# endif -# ifdef HAVE_SYS_DIR_H -# include -# endif -# ifdef HAVE_NDIR_H -# include -# endif -# endif +# include #endif #include "sudo_compat.h" +#ifndef _POSIX_OPEN_MAX +# define _POSIX_OPEN_MAX 20 +#endif + #if defined(HAVE_FCNTL_CLOSEM) && !defined(HAVE_DIRFD) # define sudo_closefrom closefrom_fallback #endif @@ -69,17 +51,13 @@ long fd, maxfd; /* - * Fall back on sysconf() or getdtablesize(). We avoid checking + * Fall back on sysconf(_SC_OPEN_MAX). We avoid checking * resource limits since it is possible to open a file descriptor * and then drop the rlimit such that it is below the open fd. */ -#ifdef HAVE_SYSCONF maxfd = sysconf(_SC_OPEN_MAX); -#else - maxfd = getdtablesize(); -#endif /* HAVE_SYSCONF */ if (maxfd < 0) - maxfd = OPEN_MAX; + maxfd = _POSIX_OPEN_MAX; for (fd = lowfd; fd < maxfd; fd++) { #ifdef __APPLE__ diff -Nru sudo-1.8.12/lib/util/event.c sudo-1.8.16/lib/util/event.c --- sudo-1.8.12/lib/util/event.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/lib/util/event.c 2015-10-31 23:35:07.000000000 +0000 @@ -19,14 +19,7 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STDBOOL_H # include #else @@ -38,20 +31,15 @@ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include "sudo_compat.h" -#include "sudo_alloc.h" #include "sudo_fatal.h" #include "sudo_debug.h" #include "sudo_event.h" #include "sudo_util.h" -/* XXX - use non-exiting allocators? */ - /* * Add an event to the base's active queue and mark it active. */ @@ -90,11 +78,18 @@ struct sudo_event_base *base; debug_decl(sudo_ev_base_alloc, SUDO_DEBUG_EVENT) - base = sudo_ecalloc(1, sizeof(*base)); + base = calloc(1, sizeof(*base)); + if (base == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "%s: unable to allocate base", __func__); + debug_return_ptr(NULL); + } TAILQ_INIT(&base->events); TAILQ_INIT(&base->timeouts); if (sudo_ev_base_alloc_impl(base) != 0) { - sudo_efree(base); + sudo_debug_printf(SUDO_DEBUG_ERROR, + "%s: unable to allocate impl base", __func__); + free(base); base = NULL; } @@ -112,7 +107,7 @@ sudo_ev_del(base, ev); } sudo_ev_base_free_impl(base); - sudo_efree(base); + free(base); debug_return; } @@ -125,7 +120,12 @@ /* XXX - sanity check events value */ - ev = sudo_ecalloc(1, sizeof(*ev)); + ev = calloc(1, sizeof(*ev)); + if (ev == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "%s: unable to allocate event", __func__); + debug_return_ptr(NULL); + } ev->fd = fd; ev->events = events; ev->pfd_idx = -1; diff -Nru sudo-1.8.12/lib/util/event_poll.c sudo-1.8.16/lib/util/event_poll.c --- sudo-1.8.12/lib/util/event_poll.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/util/event_poll.c 2015-10-31 23:35:00.000000000 +0000 @@ -19,14 +19,7 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STDBOOL_H # include #else @@ -38,20 +31,15 @@ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include #include "sudo_compat.h" -#include "sudo_alloc.h" #include "sudo_fatal.h" #include "sudo_debug.h" #include "sudo_event.h" -/* XXX - use non-exiting allocators? */ - int sudo_ev_base_alloc_impl(struct sudo_event_base *base) { @@ -60,7 +48,13 @@ base->pfd_high = -1; base->pfd_max = 32; - base->pfds = sudo_ereallocarray(NULL, base->pfd_max, sizeof(struct pollfd)); + base->pfds = reallocarray(NULL, base->pfd_max, sizeof(struct pollfd)); + if (base->pfds == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "%s: unable to allocate %d pollfds", __func__, base->pfd_max); + base->pfd_max = 0; + debug_return_int(-1); + } for (i = 0; i < base->pfd_max; i++) { base->pfds[i].fd = -1; } @@ -72,7 +66,7 @@ sudo_ev_base_free_impl(struct sudo_event_base *base) { debug_decl(sudo_ev_base_free_impl, SUDO_DEBUG_EVENT) - sudo_efree(base->pfds); + free(base->pfds); debug_return; } @@ -84,10 +78,18 @@ /* If out of space in pfds array, realloc. */ if (base->pfd_free == base->pfd_max) { + struct pollfd *pfds; int i; - base->pfd_max <<= 1; - base->pfds = - sudo_ereallocarray(base->pfds, base->pfd_max, sizeof(struct pollfd)); + + pfds = + reallocarray(base->pfds, base->pfd_max, 2 * sizeof(struct pollfd)); + if (pfds == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "%s: unable to allocate %d pollfds", __func__, base->pfd_max * 2); + debug_return_int(-1); + } + base->pfds = pfds; + base->pfd_max *= 2; for (i = base->pfd_free; i < base->pfd_max; i++) { base->pfds[i].fd = -1; } diff -Nru sudo-1.8.12/lib/util/event_select.c sudo-1.8.16/lib/util/event_select.c --- sudo-1.8.12/lib/util/event_select.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/util/event_select.c 2015-10-31 23:35:00.000000000 +0000 @@ -25,14 +25,7 @@ # include #endif /* HAVE_SYS_SELECT_H */ #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STDBOOL_H # include #else @@ -44,31 +37,33 @@ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include "sudo_compat.h" -#include "sudo_alloc.h" #include "sudo_fatal.h" #include "sudo_debug.h" #include "sudo_event.h" #include "sudo_util.h" -/* XXX - use non-exiting allocators? */ - int sudo_ev_base_alloc_impl(struct sudo_event_base *base) { debug_decl(sudo_ev_base_alloc_impl, SUDO_DEBUG_EVENT) base->maxfd = NFDBITS - 1; - base->readfds_in = sudo_ecalloc(1, sizeof(fd_mask)); - base->writefds_in = sudo_ecalloc(1, sizeof(fd_mask)); - base->readfds_out = sudo_ecalloc(1, sizeof(fd_mask)); - base->writefds_out = sudo_ecalloc(1, sizeof(fd_mask)); - + base->readfds_in = calloc(1, sizeof(fd_mask)); + base->writefds_in = calloc(1, sizeof(fd_mask)); + base->readfds_out = calloc(1, sizeof(fd_mask)); + base->writefds_out = calloc(1, sizeof(fd_mask)); + + if (base->readfds_in == NULL || base->writefds_in == NULL || + base->readfds_out == NULL || base->writefds_out == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "%s: unable to calloc(1, %zu)", __func__, sizeof(fd_mask)); + sudo_ev_base_free_impl(base); + debug_return_int(-1); + } debug_return_int(0); } @@ -76,10 +71,10 @@ sudo_ev_base_free_impl(struct sudo_event_base *base) { debug_decl(sudo_ev_base_free_impl, SUDO_DEBUG_EVENT) - sudo_efree(base->readfds_in); - sudo_efree(base->writefds_in); - sudo_efree(base->readfds_out); - sudo_efree(base->writefds_out); + free(base->readfds_in); + free(base->writefds_in); + free(base->readfds_out); + free(base->writefds_out); debug_return; } @@ -92,10 +87,36 @@ if (ev->fd > base->maxfd) { const int o = (base->maxfd + 1) / NFDBITS; const int n = howmany(ev->fd + 1, NFDBITS); - base->readfds_in = sudo_erecalloc(base->readfds_in, o, n, sizeof(fd_mask)); - base->writefds_in = sudo_erecalloc(base->writefds_in, o, n, sizeof(fd_mask)); - base->readfds_out = sudo_erecalloc(base->readfds_out, o, n, sizeof(fd_mask)); - base->writefds_out = sudo_erecalloc(base->writefds_out, o, n, sizeof(fd_mask)); + const size_t used_bytes = o * sizeof(fd_mask); + const size_t new_bytes = (n - o) * sizeof(fd_mask); + fd_set *rfds_in, *wfds_in, *rfds_out, *wfds_out; + + rfds_in = reallocarray(base->readfds_in, n, sizeof(fd_mask)); + wfds_in = reallocarray(base->writefds_in, n, sizeof(fd_mask)); + rfds_out = reallocarray(base->readfds_out, n, sizeof(fd_mask)); + wfds_out = reallocarray(base->writefds_out, n, sizeof(fd_mask)); + if (rfds_in == NULL || wfds_in == NULL || + rfds_out == NULL || wfds_out == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "%s: unable to reallocarray(%d, %zu)", + __func__, n, sizeof(fd_mask)); + free(rfds_in); + free(wfds_in); + free(rfds_out); + debug_return_int(-1); + } + + /* Clear newly allocated space. */ + memset((char *)rfds_in + used_bytes, 0, new_bytes); + memset((char *)wfds_in + used_bytes, 0, new_bytes); + memset((char *)rfds_out + used_bytes, 0, new_bytes); + memset((char *)wfds_out + used_bytes, 0, new_bytes); + + /* Update base. */ + base->readfds_in = rfds_in; + base->writefds_in = wfds_in; + base->readfds_out = rfds_out; + base->writefds_out = wfds_out; base->maxfd = (n * NFDBITS) - 1; } diff -Nru sudo-1.8.12/lib/util/fatal.c sudo-1.8.16/lib/util/fatal.c --- sudo-1.8.12/lib/util/fatal.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/util/fatal.c 2015-10-31 23:35:24.000000000 +0000 @@ -32,7 +32,6 @@ #include "sudo_gettext.h" /* must be included before sudo_compat.h */ #include "sudo_compat.h" -#include "sudo_alloc.h" #include "sudo_fatal.h" #include "sudo_queue.h" #include "sudo_util.h" @@ -46,8 +45,10 @@ 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 void _warning(int errnum, const char *fmt, va_list ap); +static void warning(int errnum, const char *fmt, va_list ap); static void do_cleanup(void) @@ -68,7 +69,7 @@ va_list ap; va_start(ap, fmt); - _warning(errno, fmt, ap); + warning(errno, fmt, ap); va_end(ap); do_cleanup(); exit(EXIT_FAILURE); @@ -80,7 +81,7 @@ va_list ap; va_start(ap, fmt); - _warning(0, fmt, ap); + warning(0, fmt, ap); va_end(ap); do_cleanup(); exit(EXIT_FAILURE); @@ -89,7 +90,7 @@ void sudo_vfatal_nodebug_v1(const char *fmt, va_list ap) { - _warning(errno, fmt, ap); + warning(errno, fmt, ap); do_cleanup(); exit(EXIT_FAILURE); } @@ -97,7 +98,7 @@ void sudo_vfatalx_nodebug_v1(const char *fmt, va_list ap) { - _warning(0, fmt, ap); + warning(0, fmt, ap); do_cleanup(); exit(EXIT_FAILURE); } @@ -108,7 +109,7 @@ va_list ap; va_start(ap, fmt); - _warning(errno, fmt, ap); + warning(errno, fmt, ap); va_end(ap); } @@ -117,50 +118,70 @@ { va_list ap; va_start(ap, fmt); - _warning(0, fmt, ap); + warning(0, fmt, ap); va_end(ap); } void sudo_vwarn_nodebug_v1(const char *fmt, va_list ap) { - _warning(errno, fmt, ap); + warning(errno, fmt, ap); } void sudo_vwarnx_nodebug_v1(const char *fmt, va_list ap) { - _warning(0, fmt, ap); + warning(0, fmt, ap); } static void -_warning(int errnum, const char *fmt, va_list ap) +warning(int errnum, const char *fmt, va_list ap) { + int cookie; + + /* Set user locale if setter was specified. */ + if (sudo_warn_setlocale != NULL) + sudo_warn_setlocale(false, &cookie); + if (sudo_warn_conversation != NULL) { struct sudo_conv_message msgs[6]; + char static_buf[1024], *buf = static_buf; int nmsgs = 0; - char *str = NULL; /* Use conversation function. */ msgs[nmsgs].msg_type = SUDO_CONV_ERROR_MSG; msgs[nmsgs++].msg = getprogname(); if (fmt != NULL) { - sudo_evasprintf(&str, fmt, ap); + va_list ap2; + int buflen; + + /* Use static buffer if possible, else dynamic. */ + va_copy(ap2, ap); + buflen = vsnprintf(static_buf, sizeof(static_buf), fmt, ap2); + va_end(ap2); + if (buflen >= (int)sizeof(static_buf)) { + buf = malloc(++buflen); + if (buf != NULL) + (void)vsnprintf(buf, buflen, fmt, ap); + else + buf = static_buf; + } msgs[nmsgs].msg_type = SUDO_CONV_ERROR_MSG; msgs[nmsgs++].msg = ": "; msgs[nmsgs].msg_type = SUDO_CONV_ERROR_MSG; - msgs[nmsgs++].msg = str; + msgs[nmsgs++].msg = buf; } if (errnum) { msgs[nmsgs].msg_type = SUDO_CONV_ERROR_MSG; msgs[nmsgs++].msg = ": "; msgs[nmsgs].msg_type = SUDO_CONV_ERROR_MSG; - msgs[nmsgs++].msg = sudo_warn_strerror(errnum); + msgs[nmsgs++].msg = strerror(errnum); } msgs[nmsgs].msg_type = SUDO_CONV_ERROR_MSG; msgs[nmsgs++].msg = "\n"; - sudo_warn_conversation(nmsgs, msgs, NULL); - sudo_efree(str); + sudo_warn_conversation(nmsgs, msgs, NULL, NULL); + if (buf != static_buf) + free(buf); } else { /* Write to the standard error. */ fputs(getprogname(), stderr); @@ -170,10 +191,14 @@ } if (errnum) { fputs(": ", stderr); - fputs(sudo_warn_strerror(errnum), stderr); + fputs(strerror(errnum), stderr); } putc('\n', stderr); } + + /* Restore old locale as needed. */ + if (sudo_warn_setlocale != NULL) + sudo_warn_setlocale(true, &cookie); } /* @@ -232,3 +257,35 @@ { sudo_warn_conversation = conv; } + +/* + * Set the locale function so the plugin can use a non-default + * locale for user warnings. + */ +void +sudo_warn_set_locale_func_v1(bool (*func)(bool, int *)) +{ + sudo_warn_setlocale_prev = sudo_warn_setlocale; + sudo_warn_setlocale = func; +} + +#ifdef HAVE_LIBINTL_H +char * +sudo_warn_gettext_v1(const char *domainname, const char *msgid) +{ + int cookie; + char *msg; + + /* Set user locale if setter was specified. */ + if (sudo_warn_setlocale != NULL) + sudo_warn_setlocale(false, &cookie); + + msg = dgettext(domainname, msgid); + + /* Restore old locale as needed. */ + if (sudo_warn_setlocale != NULL) + sudo_warn_setlocale(true, &cookie); + + return msg; +} +#endif /* HAVE_LIBINTL_H */ diff -Nru sudo-1.8.12/lib/util/fnmatch.c sudo-1.8.16/lib/util/fnmatch.c --- sudo-1.8.12/lib/util/fnmatch.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/util/fnmatch.c 2016-03-17 16:13:10.000000000 +0000 @@ -26,6 +26,22 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/* + * Copyright (c) 2008, 2016 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. + */ + /* Authored by William A. Rowe Jr. , April 2011 * * Derived from The Open Group Base Specifications Issue 7, IEEE Std 1003.1-2008 @@ -183,11 +199,19 @@ break; /* Match character classes. */ - if (classmatch(*pattern, **string, nocase, pattern) - == RANGE_MATCH) { + switch (classmatch(*pattern, **string, nocase, pattern)) { + case RANGE_MATCH: result = 0; continue; - } + case RANGE_NOMATCH: + /* Valid character class but no match. */ + continue; + default: + /* Not a valid character class. */ + break; + } + if (!**pattern) + break; leadingclosebrace: /* Look at only well-formed range patterns; diff -Nru sudo-1.8.12/lib/util/getaddrinfo.c sudo-1.8.16/lib/util/getaddrinfo.c --- sudo-1.8.12/lib/util/getaddrinfo.c 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/lib/util/getaddrinfo.c 2015-10-31 23:35:00.000000000 +0000 @@ -38,14 +38,7 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ @@ -58,6 +51,10 @@ #include #include +#ifdef NEED_RESOLV_H +# include +# include +#endif /* NEED_RESOLV_H */ #include "sudo_compat.h" #include "compat/getaddrinfo.h" diff -Nru sudo-1.8.12/lib/util/getcwd.c sudo-1.8.16/lib/util/getcwd.c --- sudo-1.8.12/lib/util/getcwd.c 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/lib/util/getcwd.c 2015-10-31 23:35:00.000000000 +0000 @@ -36,42 +36,15 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#if defined(HAVE_MALLOC_H) && !defined(STDC_HEADERS) -# include -#endif /* HAVE_MALLOC_H && !STDC_HEADERS */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ -#ifdef HAVE_DIRENT_H -# include -# define NAMLEN(dirent) strlen((dirent)->d_name) -#else -# define dirent direct -# define NAMLEN(dirent) (dirent)->d_namlen -# ifdef HAVE_SYS_NDIR_H -# include -# endif -# ifdef HAVE_SYS_DIR_H -# include -# endif -# ifdef HAVE_NDIR_H -# include -# endif -#endif +#include +#include #include "sudo_compat.h" @@ -79,6 +52,12 @@ (dp->d_name[0] == '.' && (dp->d_name[1] == '\0' || \ (dp->d_name[1] == '.' && dp->d_name[2] == '\0'))) +#if defined(HAVE_STRUCT_DIRENT_D_NAMLEN) && HAVE_STRUCT_DIRENT_D_NAMLEN +# define NAMLEN(dirent) (dirent)->d_namlen +#else +# define NAMLEN(dirent) strlen((dirent)->d_name) +#endif + char * sudo_getcwd(char *pt, size_t size) { @@ -165,8 +144,9 @@ if (bup + 3 + MAXNAMLEN + 1 >= eup) { char *nup; - if ((nup = realloc(up, upsize *= 2)) == NULL) + if ((nup = reallocarray(up, upsize, 2)) == NULL) goto err; + upsize *= 2; up = nup; bup = up; eup = up + upsize; @@ -228,8 +208,9 @@ } off = bpt - pt; len = ept - bpt; - if ((npt = realloc(pt, ptsize *= 2)) == NULL) + if ((npt = reallocarray(pt, ptsize, 2)) == NULL) goto err; + ptsize *= 2; pt = npt; bpt = pt + off; ept = pt + ptsize; diff -Nru sudo-1.8.12/lib/util/getgrouplist.c sudo-1.8.16/lib/util/getgrouplist.c --- sudo-1.8.12/lib/util/getgrouplist.c 2015-02-09 18:40:11.000000000 +0000 +++ sudo-1.8.16/lib/util/getgrouplist.c 2016-03-17 16:13:11.000000000 +0000 @@ -21,14 +21,7 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ @@ -69,11 +62,13 @@ groups[0] = basegid; #ifdef HAVE_SETAUTHDB - aix_setauthdb((char *) name); + aix_setauthdb((char *) name, NULL); #endif if ((grset = getgrset(name)) != NULL) { + char *last; const char *errstr; - for (cp = strtok(grset, ","); cp != NULL; cp = strtok(NULL, ",")) { + + for (cp = strtok_r(grset, ",", &last); cp != NULL; cp = strtok_r(NULL, ",", &last)) { gid = sudo_strtoid(cp, NULL, NULL, &errstr); if (errstr == NULL && gid != basegid) { if (ngroups == grpsize) diff -Nru sudo-1.8.12/lib/util/gethostname.c sudo-1.8.16/lib/util/gethostname.c --- sudo-1.8.12/lib/util/gethostname.c 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.16/lib/util/gethostname.c 2015-10-31 23:35:00.000000000 +0000 @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2015 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 "sudo_compat.h" +#include "sudo_util.h" + +/* + * Return a malloc()ed copy of the system hostname, or NULL if + * malloc() or gethostname() fails. + */ +char * +sudo_gethostname_v1(void) +{ + char *hname; + size_t host_name_max; + +#ifdef _SC_HOST_NAME_MAX + host_name_max = (size_t)sysconf(_SC_HOST_NAME_MAX); + if (host_name_max == (size_t)-1) +#endif + host_name_max = 255; /* POSIX and historic BSD */ + + hname = malloc(host_name_max + 1); + if (hname != NULL) { + if (gethostname(hname, host_name_max + 1) == 0) { + /* Old gethostname() may not NUL-terminate if there is no room. */ + hname[host_name_max] = '\0'; + } else { + free(hname); + hname = NULL; + } + } + return hname; +} diff -Nru sudo-1.8.12/lib/util/getline.c sudo-1.8.16/lib/util/getline.c --- sudo-1.8.12/lib/util/getline.c 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/lib/util/getline.c 2015-10-31 23:35:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009-2010, 2012-2014 Todd C. Miller + * Copyright (c) 2009-2010, 2012-2015 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 @@ -21,14 +21,7 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ @@ -39,10 +32,6 @@ #include "sudo_compat.h" -#ifndef LINE_MAX -# define LINE_MAX 2048 -#endif - #ifdef HAVE_FGETLN ssize_t sudo_getline(char **bufp, size_t *bufsizep, FILE *fp) @@ -56,7 +45,7 @@ bufsize = *bufp ? *bufsizep : 0; if (bufsize == 0 || bufsize - 1 < len) { bufsize = len + 1; - cp = *bufp ? realloc(*bufp, bufsize) : malloc(bufsize); + cp = realloc(*bufp, bufsize); if (cp == NULL) return -1; *bufp = cp; @@ -79,7 +68,7 @@ bufsize = *bufsizep; if (buf == NULL || bufsize == 0) { bufsize = LINE_MAX; - cp = buf ? realloc(buf, bufsize) : malloc(bufsize); + cp = realloc(buf, bufsize); if (cp == NULL) return -1; buf = cp; @@ -93,10 +82,10 @@ len = strlen(buf); if (!len || buf[len - 1] == '\n' || feof(fp)) break; - bufsize *= 2; - cp = realloc(buf, bufsize); + cp = reallocarray(buf, bufsize, 2); if (cp == NULL) return -1; + bufsize *= 2; buf = cp; } *bufp = buf; diff -Nru sudo-1.8.12/lib/util/getopt_long.c sudo-1.8.16/lib/util/getopt_long.c --- sudo-1.8.12/lib/util/getopt_long.c 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/lib/util/getopt_long.c 2015-10-31 23:35:00.000000000 +0000 @@ -52,15 +52,9 @@ #include +#include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ diff -Nru sudo-1.8.12/lib/util/gettime.c sudo-1.8.16/lib/util/gettime.c --- sudo-1.8.12/lib/util/gettime.c 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.16/lib/util/gettime.c 2016-03-17 16:13:10.000000000 +0000 @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2014-2015 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 +#ifdef TIME_WITH_SYS_TIME +# include +#endif +#include + +#if defined(__MACH__) && !defined(HAVE_CLOCK_GETTIME) +# include +# include +# include +#endif + +#include "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_util.h" + +/* On Linux, CLOCK_MONOTONIC does not run while suspended. */ +#if defined(CLOCK_BOOTTIME) +# define SUDO_CLOCK_MONOTONIC CLOCK_BOOTTIME +#elif defined(CLOCK_MONOTONIC) +# define SUDO_CLOCK_MONOTONIC CLOCK_MONOTONIC +#endif + +#if defined(HAVE_CLOCK_GETTIME) +int +sudo_gettime_real_v1(struct timespec *ts) +{ + debug_decl(sudo_gettime_real, SUDO_DEBUG_UTIL) + + if (clock_gettime(CLOCK_REALTIME, ts) == -1) { + struct timeval tv; + + sudo_debug_printf(SUDO_DEBUG_WARN|SUDO_DEBUG_ERRNO|SUDO_DEBUG_LINENO, + "clock_gettime(CLOCK_REALTIME) failed, trying gettimeofday()"); + if (gettimeofday(&tv, NULL) == -1) + debug_return_int(-1); + TIMEVAL_TO_TIMESPEC(&tv, ts); + } + debug_return_int(0); +} +#else +int +sudo_gettime_real_v1(struct timespec *ts) +{ + struct timeval tv; + debug_decl(sudo_gettime_real, SUDO_DEBUG_UTIL) + + if (gettimeofday(&tv, NULL) == -1) + debug_return_int(-1); + TIMEVAL_TO_TIMESPEC(&tv, ts); + debug_return_int(0); +} +#endif + +#if defined(HAVE_CLOCK_GETTIME) && defined(SUDO_CLOCK_MONOTONIC) +int +sudo_gettime_mono_v1(struct timespec *ts) +{ + static int has_monoclock = -1; + debug_decl(sudo_gettime_mono, SUDO_DEBUG_UTIL) + + /* Check whether the kernel/libc actually supports CLOCK_MONOTONIC. */ +# ifdef _SC_MONOTONIC_CLOCK + if (has_monoclock == -1) + has_monoclock = sysconf(_SC_MONOTONIC_CLOCK) != -1; +# endif + if (!has_monoclock) + debug_return_int(sudo_gettime_real(ts)); + if (clock_gettime(SUDO_CLOCK_MONOTONIC, ts) == -1) { + sudo_debug_printf(SUDO_DEBUG_WARN|SUDO_DEBUG_ERRNO|SUDO_DEBUG_LINENO, + "clock_gettime(%d) failed, using wall clock", + (int)SUDO_CLOCK_MONOTONIC); + has_monoclock = 0; + debug_return_int(sudo_gettime_real(ts)); + } + debug_return_int(0); +} +#elif defined(__MACH__) +int +sudo_gettime_mono_v1(struct timespec *ts) +{ + uint64_t abstime, nsec; + static mach_timebase_info_data_t timebase_info; + debug_decl(sudo_gettime_mono, SUDO_DEBUG_UTIL) + + if (timebase_info.denom == 0) + (void) mach_timebase_info(&timebase_info); + abstime = mach_absolute_time(); + nsec = abstime * timebase_info.numer / timebase_info.denom; + ts->tv_sec = nsec / 1000000000; + ts->tv_nsec = nsec % 1000000000; + debug_return_int(0); +} +#else +int +sudo_gettime_mono_v1(struct timespec *ts) +{ + /* No monotonic clock available, use wall clock. */ + return sudo_gettime_real(ts); +} +#endif diff -Nru sudo-1.8.12/lib/util/gidlist.c sudo-1.8.16/lib/util/gidlist.c --- sudo-1.8.12/lib/util/gidlist.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/util/gidlist.c 2015-10-31 23:35:00.000000000 +0000 @@ -19,21 +19,13 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #include #define DEFAULT_TEXT_DOMAIN "sudo" #include "sudo_gettext.h" /* must be included before sudo_compat.h */ #include "sudo_compat.h" -#include "sudo_alloc.h" #include "sudo_fatal.h" #include "sudo_debug.h" #include "sudo_util.h" @@ -67,7 +59,11 @@ ngids++; /* Allocate and fill in array. */ if (ngids != 0) { - gids = sudo_emallocarray(ngids, sizeof(GETGROUPS_T)); + gids = reallocarray(NULL, ngids, sizeof(GETGROUPS_T)); + if (gids == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_int(-1); + } ngids = 0; if (basegid != NULL) gids[ngids++] = *basegid; diff -Nru sudo-1.8.12/lib/util/glob.c sudo-1.8.16/lib/util/glob.c --- sudo-1.8.12/lib/util/glob.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/util/glob.c 2015-10-31 23:35:00.000000000 +0000 @@ -58,46 +58,21 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ -#if defined(HAVE_MALLOC_H) && !defined(STDC_HEADERS) -# include -#endif /* HAVE_MALLOC_H && !STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #if defined(HAVE_STDINT_H) # include #elif defined(HAVE_INTTYPES_H) # include #endif #include -#ifdef HAVE_DIRENT_H -# include -#else -# define dirent direct -# ifdef HAVE_SYS_NDIR_H -# include -# endif -# ifdef HAVE_SYS_DIR_H -# include -# endif -# ifdef HAVE_NDIR_H -# include -# endif -#endif +#include #include #include #include @@ -203,9 +178,6 @@ Char *bufnext, *bufend, patbuf[PATH_MAX]; struct glob_lim limit = { 0, 0, 0 }; - if (strnlen(pattern, PATH_MAX) == PATH_MAX) - return GLOB_NOMATCH; - patnext = (unsigned char *) pattern; if (!(flags & GLOB_APPEND)) { pglob->gl_pathc = 0; @@ -222,6 +194,9 @@ pglob->gl_pathc >= INT_MAX - pglob->gl_offs - 1) return GLOB_NOSPACE; + if (strnlen(pattern, PATH_MAX) == PATH_MAX) + return GLOB_NOMATCH; + bufnext = patbuf; bufend = bufnext + PATH_MAX - 1; if (flags & GLOB_NOESCAPE) @@ -779,7 +754,7 @@ return GLOB_NOSPACE; } - pathv = realloc(pglob->gl_pathv, newn * sizeof(*pathv)); + pathv = reallocarray(pglob->gl_pathv, newn, sizeof(*pathv)); if (pathv == NULL) goto nospace; if (pglob->gl_pathv == NULL && pglob->gl_offs > 0) { diff -Nru sudo-1.8.12/lib/util/inet_pton.c sudo-1.8.16/lib/util/inet_pton.c --- sudo-1.8.12/lib/util/inet_pton.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/util/inet_pton.c 2015-10-31 23:35:00.000000000 +0000 @@ -26,9 +26,6 @@ #include #include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H diff -Nru sudo-1.8.12/lib/util/key_val.c sudo-1.8.16/lib/util/key_val.c --- sudo-1.8.12/lib/util/key_val.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/util/key_val.c 2015-10-31 23:35:00.000000000 +0000 @@ -19,18 +19,8 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H diff -Nru sudo-1.8.12/lib/util/lbuf.c sudo-1.8.16/lib/util/lbuf.c --- sudo-1.8.12/lib/util/lbuf.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/util/lbuf.c 2015-10-31 23:35:00.000000000 +0000 @@ -20,30 +20,17 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include "sudo_compat.h" -#include "sudo_alloc.h" #include "sudo_debug.h" #include "sudo_lbuf.h" @@ -57,6 +44,7 @@ lbuf->continuation = continuation; lbuf->indent = indent; lbuf->cols = cols; + lbuf->error = 0; lbuf->len = 0; lbuf->size = 0; lbuf->buf = NULL; @@ -69,43 +57,61 @@ { debug_decl(sudo_lbuf_destroy, SUDO_DEBUG_UTIL) - sudo_efree(lbuf->buf); + free(lbuf->buf); lbuf->buf = NULL; debug_return; } -static void +static bool sudo_lbuf_expand(struct sudo_lbuf *lbuf, int extra) { + debug_decl(sudo_lbuf_expand, SUDO_DEBUG_UTIL) + if (lbuf->len + extra + 1 >= lbuf->size) { + char *new_buf; + int new_size = lbuf->size; + do { - lbuf->size += 256; - } while (lbuf->len + extra + 1 >= lbuf->size); - lbuf->buf = sudo_erealloc(lbuf->buf, lbuf->size); + new_size += 256; + } while (lbuf->len + extra + 1 >= new_size); + if ((new_buf = realloc(lbuf->buf, new_size)) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + lbuf->error = 1; + debug_return_bool(false); + } + lbuf->buf = new_buf; + lbuf->size = new_size; } + debug_return_bool(true); } /* * Parse the format and append strings, only %s and %% escapes are supported. * Any characters in set are quoted with a backslash. */ -void +bool sudo_lbuf_append_quoted_v1(struct sudo_lbuf *lbuf, const char *set, const char *fmt, ...) { - va_list ap; - int len; + int len, saved_len = lbuf->len; + bool ret = false; char *cp, *s; + va_list ap; debug_decl(sudo_lbuf_append_quoted, SUDO_DEBUG_UTIL) + if (sudo_lbuf_error(lbuf)) + debug_return_bool(false); + va_start(ap, fmt); while (*fmt != '\0') { if (fmt[0] == '%' && fmt[1] == 's') { if ((s = va_arg(ap, char *)) == NULL) - goto done; + s = "(NULL)"; while ((cp = strpbrk(s, set)) != NULL) { len = (int)(cp - s); - sudo_lbuf_expand(lbuf, len + 2); + if (!sudo_lbuf_expand(lbuf, len + 2)) + goto done; memcpy(lbuf->buf + lbuf->len, s, len); lbuf->len += len; lbuf->buf[lbuf->len++] = '\\'; @@ -114,60 +120,77 @@ } if (*s != '\0') { len = strlen(s); - sudo_lbuf_expand(lbuf, len); + if (!sudo_lbuf_expand(lbuf, len)) + goto done; memcpy(lbuf->buf + lbuf->len, s, len); lbuf->len += len; } fmt += 2; continue; } - sudo_lbuf_expand(lbuf, 2); + if (!sudo_lbuf_expand(lbuf, 2)) + goto done; if (strchr(set, *fmt) != NULL) lbuf->buf[lbuf->len++] = '\\'; lbuf->buf[lbuf->len++] = *fmt++; } + ret = true; + done: + if (!ret) + lbuf->len = saved_len; if (lbuf->size != 0) lbuf->buf[lbuf->len] = '\0'; va_end(ap); - debug_return; + debug_return_bool(ret); } /* * Parse the format and append strings, only %s and %% escapes are supported. */ -void +bool sudo_lbuf_append_v1(struct sudo_lbuf *lbuf, const char *fmt, ...) { + int len, saved_len = lbuf->len; + bool ret = false; va_list ap; - int len; char *s; debug_decl(sudo_lbuf_append, SUDO_DEBUG_UTIL) + if (sudo_lbuf_error(lbuf)) + debug_return_bool(false); + va_start(ap, fmt); while (*fmt != '\0') { if (fmt[0] == '%' && fmt[1] == 's') { if ((s = va_arg(ap, char *)) == NULL) - goto done; + s = "(NULL)"; len = strlen(s); - sudo_lbuf_expand(lbuf, len); + if (!sudo_lbuf_expand(lbuf, len)) + goto done; memcpy(lbuf->buf + lbuf->len, s, len); lbuf->len += len; fmt += 2; continue; } - sudo_lbuf_expand(lbuf, 1); + if (!sudo_lbuf_expand(lbuf, 1)) + goto done; lbuf->buf[lbuf->len++] = *fmt++; } + ret = true; + done: + if (!ret) + lbuf->len = saved_len; if (lbuf->size != 0) lbuf->buf[lbuf->len] = '\0'; va_end(ap); - debug_return; + debug_return_bool(ret); } +/* XXX - check output function return value */ static void sudo_lbuf_println(struct sudo_lbuf *lbuf, char *line, int len) { @@ -229,6 +252,7 @@ /* * Print the buffer with word wrap based on the tty width. * The lbuf is reset on return. + * XXX - check output function return value */ void sudo_lbuf_print_v1(struct sudo_lbuf *lbuf) @@ -269,6 +293,22 @@ done: lbuf->len = 0; /* reset the buffer for re-use. */ + lbuf->error = 0; debug_return; } + +bool +sudo_lbuf_error_v1(struct sudo_lbuf *lbuf) +{ + if (lbuf != NULL && lbuf->error != 0) + return true; + return false; +} + +void +sudo_lbuf_clearerr_v1(struct sudo_lbuf *lbuf) +{ + if (lbuf != NULL) + lbuf->error = 0; +} diff -Nru sudo-1.8.12/lib/util/locking.c sudo-1.8.16/lib/util/locking.c --- sudo-1.8.12/lib/util/locking.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/util/locking.c 2015-10-31 23:35:24.000000000 +0000 @@ -22,55 +22,44 @@ #include #include -#ifdef HAVE_FLOCK -# include -#endif /* HAVE_FLOCK */ -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRING_H */ -#if defined(HAVE_MALLOC_H) && !defined(STDC_HEADERS) -# include -#endif /* HAVE_MALLOC_H && !STDC_HEADERS */ -#include -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ -#include #ifdef HAVE_STDBOOL_H # include #else # include "compat/stdbool.h" #endif +#include +#include +#include +#include #include "sudo_compat.h" #include "sudo_util.h" #include "sudo_debug.h" /* - * Lock/unlock a file. + * Lock/unlock all or part of a file. */ #ifdef HAVE_LOCKF bool -sudo_lock_file_v1(int fd, int lockit) +sudo_lock_file_v1(int fd, int type) { - int op = 0; - debug_decl(sudo_lock_file, SUDO_DEBUG_UTIL) + return sudo_lock_region_v1(fd, type, 0); +} - switch (lockit) { +bool +sudo_lock_region_v1(int fd, int type, off_t len) +{ + int op; + debug_decl(sudo_lock_region, SUDO_DEBUG_UTIL) + + switch (type) { case SUDO_LOCK: op = F_LOCK; break; @@ -80,48 +69,48 @@ case SUDO_UNLOCK: op = F_ULOCK; break; + default: + errno = EINVAL; + debug_return_bool(false); } - debug_return_bool(lockf(fd, op, 0) == 0); + debug_return_bool(lockf(fd, op, len) == 0); } -#elif defined(HAVE_FLOCK) +#else bool -sudo_lock_file_v1(int fd, int lockit) +sudo_lock_file_v1(int fd, int type) { - int op = 0; + return sudo_lock_region_v1(fd, type, 0); +} + +bool +sudo_lock_region_v1(int fd, int type, off_t len) +{ + struct flock lock; + int func; debug_decl(sudo_lock_file, SUDO_DEBUG_UTIL) - switch (lockit) { + switch (type) { case SUDO_LOCK: - op = LOCK_EX; + lock.l_type = F_WRLCK; + func = F_SETLKW; break; case SUDO_TLOCK: - op = LOCK_EX | LOCK_NB; + lock.l_type = F_WRLCK; + func = F_SETLK; break; case SUDO_UNLOCK: - op = LOCK_UN; + lock.l_type = F_UNLCK; + func = F_SETLK; break; + default: + errno = EINVAL; + debug_return_bool(false); } - debug_return_bool(flock(fd, op) == 0); -} -#else -bool -sudo_lock_file_v1(int fd, int lockit) -{ -#ifdef F_SETLK - int func; - struct flock lock; - debug_decl(sudo_lock_file, SUDO_DEBUG_UTIL) - lock.l_start = 0; - lock.l_len = 0; - lock.l_pid = getpid(); - lock.l_type = (lockit == SUDO_UNLOCK) ? F_UNLCK : F_WRLCK; - lock.l_whence = SEEK_SET; - func = (lockit == SUDO_LOCK) ? F_SETLKW : F_SETLK; + lock.l_len = len; + lock.l_pid = 0; + lock.l_whence = len ? SEEK_CUR : SEEK_SET; debug_return_bool(fcntl(fd, func, &lock) == 0); -#else - return true; -#endif } #endif diff -Nru sudo-1.8.12/lib/util/Makefile.in sudo-1.8.16/lib/util/Makefile.in --- sudo-1.8.12/lib/util/Makefile.in 2015-02-04 22:23:38.000000000 +0000 +++ sudo-1.8.16/lib/util/Makefile.in 2015-10-31 23:35:24.000000000 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 2011-2014 Todd C. Miller +# Copyright (c) 2011-2015 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 @@ -45,7 +45,7 @@ # Compiler & tools to use CC = @CC@ -LIBTOOL = @LIBTOOL@ @LT_STATIC@ +LIBTOOL = @LIBTOOL@ SED = @SED@ AWK = @AWK@ @@ -53,8 +53,11 @@ INSTALL = $(SHELL) $(top_srcdir)/install-sh -c INSTALL_OWNER = -o $(install_uid) -g $(install_gid) +# C preprocessor defines +CPPDEFS = -D_PATH_SUDO_CONF=\"$(sysconfdir)/sudo.conf\" + # C preprocessor flags -CPPFLAGS = -I$(incdir) -I$(top_builddir) -I$(srcdir) -I$(top_srcdir) @CPPFLAGS@ +CPPFLAGS = -I$(incdir) -I$(top_builddir) -I$(srcdir) -I$(top_srcdir) $(CPPDEFS) @CPPFLAGS@ # Usually -O and/or -g CFLAGS = @CFLAGS@ @@ -63,6 +66,9 @@ LDFLAGS = @LDFLAGS@ LT_LDFLAGS = @LIBUTIL_LDFLAGS@ @LT_LDFLAGS@ @LT_LDEXPORTS@ +# Flags to pass to libtool +LTFLAGS = @LT_STATIC@ + # PIE flags PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ @@ -77,18 +83,19 @@ # cppcheck options, usually set in the top-level Makefile CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +# splint options, usually set in the top-level Makefile +SPLINT_OPTS = -D__restrict= -checks + # Regression tests -TEST_PROGS = atofoo_test conf_test hltq_test parseln_test progname_test @COMPAT_TEST_PROGS@ -TEST_LIBS = @LIBS@ @LIBINTL@ +TEST_PROGS = atofoo_test conf_test hltq_test parseln_test progname_test \ + strsplit_test parse_gids_test @COMPAT_TEST_PROGS@ +TEST_LIBS = @LIBS@ TEST_LDFLAGS = @LDFLAGS@ # User and group ids the installed files should be "owned" by install_uid = 0 install_gid = 0 -# OS dependent defines -DEFS = @OSDEFS@ -D_PATH_SUDO_CONF=\"$(sysconfdir)/sudo.conf\" - # Set to non-empty for development mode DEVEL = @DEVEL@ @@ -96,24 +103,31 @@ SHELL = @SHELL@ -LTOBJS = alloc.lo event.lo fatal.lo key_val.lo gidlist.lo lbuf.lo locking.lo \ - parseln.lo progname.lo secure_path.lo setgroups.lo strtobool.lo \ - strtoid.lo strtomode.lo sudo_conf.lo sudo_debug.lo sudo_dso.lo \ - term.lo ttysize.lo @COMMON_OBJS@ @LTLIBOBJS@ +LTOBJS = event.lo fatal.lo key_val.lo gethostname.lo gettime.lo \ + gidlist.lo lbuf.lo locking.lo parseln.lo progname.lo secure_path.lo \ + setgroups.lo strsplit.lo strtobool.lo strtoid.lo strtomode.lo \ + sudo_conf.lo sudo_debug.lo sudo_dso.lo term.lo ttysize.lo \ + @COMMON_OBJS@ @LTLIBOBJS@ + +ATOFOO_TEST_OBJS = atofoo_test.lo -ATOFOO_TEST_OBJS = atofoo_test.lo locale_stub.lo +MKTEMP_TEST_OBJS = mktemp_test.lo -PARSELN_TEST_OBJS = parseln_test.lo locale_stub.lo +PARSELN_TEST_OBJS = parseln_test.lo PROGNAME_TEST_OBJS = progname_test.lo progname.lo -CONF_TEST_OBJS = conf_test.lo locale_stub.lo +CONF_TEST_OBJS = conf_test.lo + +HLTQ_TEST_OBJS = hltq_test.lo -HLTQ_TEST_OBJS = hltq_test.lo locale_stub.lo +FNM_TEST_OBJS = fnm_test.lo -FNM_TEST_OBJS = fnm_test.lo locale_stub.lo +GLOBTEST_OBJS = globtest.lo -GLOBTEST_OBJS = globtest.lo locale_stub.lo +STRSPLIT_TEST_OBJS = strsplit_test.lo + +PARSE_GIDS_TEST_OBJS = parse_gids_test.lo all: libsudo_util.la @@ -123,7 +137,7 @@ .SUFFIXES: .c .h .lo .c.lo: - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $< + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $< $(shlib_map): $(shlib_exp) @$(AWK) 'BEGIN { print "{\n\tglobal:" } { print "\t\t"$$0";" } END { print "\tlocal:\n\t\t*;\n};" }' $(shlib_exp) > $@ @@ -134,9 +148,9 @@ libsudo_util.la: $(LTOBJS) @LT_LDDEP@ case "$(LT_LDFLAGS)" in \ *-no-install*) \ - $(LIBTOOL) --mode=link $(CC) -o $@ $(LDFLAGS) $(LT_LDFLAGS) $(LTOBJS) @LIBDL@;; \ + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(LDFLAGS) $(LT_LDFLAGS) $(LTOBJS) @LIBINTL@ @LIBDL@ @LIBRT@;; \ *) \ - $(LIBTOOL) --mode=link $(CC) -o $@ $(LDFLAGS) $(SSP_LDFLAGS) $(LT_LDFLAGS) $(LTOBJS) -version-info $(SHLIB_VERSION) -rpath $(libexecdir)/sudo @LT_DEP_LIBS@ @LIBDL@;; \ + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(LDFLAGS) $(SSP_LDFLAGS) $(LT_LDFLAGS) $(LTOBJS) -version-info $(SHLIB_VERSION) -rpath $(libexecdir)/sudo @LT_DEP_LIBS@ @LIBINTL@ @LIBDL@ @LIBRT@;; \ esac siglist.c: mksiglist @@ -146,10 +160,10 @@ ./mksigname > $@ mksiglist: $(srcdir)/mksiglist.c $(srcdir)/mksiglist.h $(incdir)/sudo_compat.h $(top_builddir)/config.h - $(CC) $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/mksiglist.c -o $@ + $(CC) $(CPPFLAGS) $(CFLAGS) $(srcdir)/mksiglist.c -o $@ mksigname: $(srcdir)/mksigname.c $(srcdir)/mksigname.h $(incdir)/sudo_compat.h $(top_builddir)/config.h - $(CC) $(CPPFLAGS) $(CFLAGS) $(DEFS) $(srcdir)/mksigname.c -o $@ + $(CC) $(CPPFLAGS) $(CFLAGS) $(srcdir)/mksigname.c -o $@ $(srcdir)/mksiglist.h: $(srcdir)/siglist.in @if [ -n "$(DEVEL)" ]; then \ @@ -162,25 +176,34 @@ fi atofoo_test: $(ATOFOO_TEST_OBJS) libsudo_util.la - $(LIBTOOL) --mode=link $(CC) -o $@ $(ATOFOO_TEST_OBJS) libsudo_util.la $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(ATOFOO_TEST_OBJS) libsudo_util.la $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) conf_test: $(CONF_TEST_OBJS) libsudo_util.la - $(LIBTOOL) --mode=link $(CC) -o $@ $(CONF_TEST_OBJS) libsudo_util.la $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(CONF_TEST_OBJS) libsudo_util.la $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) fnm_test: $(FNM_TEST_OBJS) libsudo_util.la - $(LIBTOOL) --mode=link $(CC) -o $@ $(FNM_TEST_OBJS) libsudo_util.la $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(FNM_TEST_OBJS) libsudo_util.la $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) globtest: $(GLOBTEST_OBJS) libsudo_util.la - $(LIBTOOL) --mode=link $(CC) -o $@ $(GLOBTEST_OBJS) libsudo_util.la $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(GLOBTEST_OBJS) libsudo_util.la $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) hltq_test: $(HLTQ_TEST_OBJS) libsudo_util.la - $(LIBTOOL) --mode=link $(CC) -o $@ $(HLTQ_TEST_OBJS) libsudo_util.la $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(HLTQ_TEST_OBJS) libsudo_util.la $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) + +mktemp_test: $(MKTEMP_TEST_OBJS) libsudo_util.la + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(MKTEMP_TEST_OBJS) libsudo_util.la $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) parseln_test: $(PARSELN_TEST_OBJS) libsudo_util.la - $(LIBTOOL) --mode=link $(CC) -o $@ $(PARSELN_TEST_OBJS) libsudo_util.la $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(PARSELN_TEST_OBJS) libsudo_util.la $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) progname_test: $(PROGNAME_TEST_OBJS) - $(LIBTOOL) --mode=link $(CC) -o $@ $(PROGNAME_TEST_OBJS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(PROGNAME_TEST_OBJS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) + +parse_gids_test: $(PARSE_GIDS_TEST_OBJS) libsudo_util.la + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(PARSE_GIDS_TEST_OBJS) libsudo_util.la $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) + +strsplit_test: $(STRSPLIT_TEST_OBJS) libsudo_util.la + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(STRSPLIT_TEST_OBJS) libsudo_util.la $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LDFLAGS) $(TEST_LIBS) pre-install: @@ -188,7 +211,7 @@ case "$(LT_LDFLAGS)" in \ *-no-install*) ;; \ *) if [ X"$(shlib_enable)" = X"yes" ]; then \ - INSTALL_BACKUP='~' $(LIBTOOL) --quiet --mode=install $(INSTALL) $(INSTALL_OWNER) libsudo_util.la $(DESTDIR)$(libexecdir)/sudo; \ + INSTALL_BACKUP='~' $(LIBTOOL) $(LTFLAGS) --quiet --mode=install $(INSTALL) $(INSTALL_OWNER) libsudo_util.la $(DESTDIR)$(libexecdir)/sudo; \ fi;; \ esac @@ -204,7 +227,10 @@ install-plugin: uninstall: - $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libexecdir)/sudo/libsudo_util.la + $(LIBTOOL) $(LTFLAGS) --mode=uninstall rm -f $(DESTDIR)$(libexecdir)/sudo/libsudo_util.la + +splint: + splint $(SPLINT_OPTS) -I$(incdir) -I$(top_builddir) -I$(top_srcdir) $(srcdir)/*.c cppcheck: cppcheck $(CPPCHECK_OPTS) -I$(incdir) -I$(top_builddir) -I$(top_srcdir) $(srcdir)/*.c @@ -213,6 +239,12 @@ check: $(TEST_PROGS) @if test X"$(cross_compiling)" != X"yes"; then \ rval=0; \ + if test -f parse_gids_test; then \ + ./parse_gids_test || rval=`expr $$rval + $$?`; \ + fi; \ + if test -f strsplit_test; then \ + ./strsplit_test || rval=`expr $$rval + $$?`; \ + fi; \ if test -f fnm_test; then \ ./fnm_test $(srcdir)/regress/fnmatch/fnm_test.in || rval=`expr $$rval + $$?`; \ fi; \ @@ -225,6 +257,9 @@ ./globtest $(srcdir)/regress/glob/globtest.in || rval=`expr $$rval + $$?`; \ rm -rf fake; \ fi; \ + if test -f mktemp_test; then \ + ./mktemp_test || rval=`expr $$rval + $$?`; \ + fi; \ ./atofoo_test || rval=`expr $$rval + $$?`; \ ./hltq_test || rval=`expr $$rval + $$?`; \ ./progname_test || rval=`expr $$rval + $$?`; \ @@ -281,7 +316,7 @@ fi clean: - -$(LIBTOOL) --mode=clean rm -f $(TEST_PROGS) *.lo *.o *.la *.a stamp-* core *.core core.* regress/*/*.out regress/*/*.err + -$(LIBTOOL) $(LTFLAGS) --mode=clean rm -f $(TEST_PROGS) *.lo *.o *.la *.a stamp-* core *.core core.* regress/*/*.out regress/*/*.err mostlyclean: clean @@ -296,221 +331,244 @@ cleandir: realclean # Autogenerated dependencies, do not modify -aix.lo: $(srcdir)/aix.c $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.h \ - $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ - $(incdir)/sudo_gettext.h $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ - $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/aix.c -alloc.lo: $(srcdir)/alloc.c $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ - $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/alloc.c +aix.lo: $(srcdir)/aix.c $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/aix.c atofoo_test.lo: $(srcdir)/regress/atofoo/atofoo_test.c \ $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ $(incdir)/sudo_fatal.h $(incdir)/sudo_util.h \ $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/atofoo/atofoo_test.c -clock_gettime.lo: $(srcdir)/clock_gettime.c $(incdir)/compat/timespec.h \ - $(incdir)/sudo_compat.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/clock_gettime.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/atofoo/atofoo_test.c closefrom.lo: $(srcdir)/closefrom.c $(incdir)/sudo_compat.h \ $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/closefrom.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/closefrom.c conf_test.lo: $(srcdir)/regress/sudo_conf/conf_test.c \ $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/sudo_conf/conf_test.c -event.lo: $(srcdir)/event.c $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.h \ - $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ - $(incdir)/sudo_event.h $(incdir)/sudo_fatal.h $(incdir)/sudo_queue.h \ - $(incdir)/sudo_util.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/event.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/sudo_conf/conf_test.c +event.lo: $(srcdir)/event.c $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_event.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/event.c event_poll.lo: $(srcdir)/event_poll.c $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_debug.h $(incdir)/sudo_event.h \ - $(incdir)/sudo_fatal.h $(incdir)/sudo_queue.h \ - $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/event_poll.c + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_event.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_queue.h $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/event_poll.c event_select.lo: $(srcdir)/event_select.c $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_debug.h $(incdir)/sudo_event.h \ - $(incdir)/sudo_fatal.h $(incdir)/sudo_queue.h \ - $(incdir)/sudo_util.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/event_select.c -fatal.lo: $(srcdir)/fatal.c $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.h \ - $(incdir)/sudo_compat.h $(incdir)/sudo_fatal.h \ - $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ - $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/fatal.c + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_event.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/event_select.c +fatal.lo: $(srcdir)/fatal.c $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/fatal.c fnm_test.lo: $(srcdir)/regress/fnmatch/fnm_test.c $(incdir)/compat/fnmatch.h \ $(incdir)/sudo_compat.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/fnmatch/fnm_test.c -fnm_test.o: fnm_test.lo + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/fnmatch/fnm_test.c fnmatch.lo: $(srcdir)/fnmatch.c $(incdir)/compat/charclass.h \ $(incdir)/compat/fnmatch.h $(incdir)/sudo_compat.h \ $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/fnmatch.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/fnmatch.c getaddrinfo.lo: $(srcdir)/getaddrinfo.c $(incdir)/compat/getaddrinfo.h \ $(incdir)/sudo_compat.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/getaddrinfo.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/getaddrinfo.c getcwd.lo: $(srcdir)/getcwd.c $(incdir)/sudo_compat.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/getcwd.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/getcwd.c getgrouplist.lo: $(srcdir)/getgrouplist.c $(incdir)/compat/nss_dbdefs.h \ $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ $(incdir)/sudo_util.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/getgrouplist.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/getgrouplist.c +gethostname.lo: $(srcdir)/gethostname.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) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/gethostname.c getline.lo: $(srcdir)/getline.c $(incdir)/sudo_compat.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/getline.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/getline.c getopt_long.lo: $(srcdir)/getopt_long.c $(incdir)/compat/getopt.h \ - $(incdir)/sudo_compat.h $(incdir)/sudo_fatal.h \ - $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/getopt_long.c + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_fatal.h $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/getopt_long.c +gettime.lo: $(srcdir)/gettime.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/gettime.c gidlist.lo: $(srcdir)/gidlist.c $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ - $(incdir)/sudo_gettext.h $(incdir)/sudo_queue.h \ - $(incdir)/sudo_util.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/gidlist.c + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/gidlist.c glob.lo: $(srcdir)/glob.c $(incdir)/compat/charclass.h $(incdir)/compat/glob.h \ $(incdir)/sudo_compat.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/glob.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/glob.c globtest.lo: $(srcdir)/regress/glob/globtest.c $(incdir)/compat/glob.h \ $(incdir)/sudo_compat.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/glob/globtest.c -globtest.o: globtest.lo + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/glob/globtest.c hltq_test.lo: $(srcdir)/regress/tailq/hltq_test.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_fatal.h \ $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/tailq/hltq_test.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/tailq/hltq_test.c +inet_pton.lo: $(srcdir)/inet_pton.c $(incdir)/sudo_compat.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/inet_pton.c isblank.lo: $(srcdir)/isblank.c $(incdir)/sudo_compat.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/isblank.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/isblank.c key_val.lo: $(srcdir)/key_val.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/key_val.c -lbuf.lo: $(srcdir)/lbuf.c $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h \ + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/key_val.c +lbuf.lo: $(srcdir)/lbuf.c $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ $(incdir)/sudo_debug.h $(incdir)/sudo_lbuf.h $(incdir)/sudo_queue.h \ $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/lbuf.c -locale_stub.lo: $(top_srcdir)/src/locale_stub.c $(incdir)/sudo_compat.h \ - $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ - $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(top_srcdir)/src/locale_stub.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/lbuf.c locking.lo: $(srcdir)/locking.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/locking.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/locking.c memrchr.lo: $(srcdir)/memrchr.c $(incdir)/sudo_compat.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/memrchr.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/memrchr.c memset_s.lo: $(srcdir)/memset_s.c $(incdir)/sudo_compat.h \ $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/memset_s.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/memset_s.c mksiglist.lo: $(srcdir)/mksiglist.c $(incdir)/sudo_compat.h \ $(srcdir)/mksiglist.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/mksiglist.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/mksiglist.c mksigname.lo: $(srcdir)/mksigname.c $(incdir)/sudo_compat.h \ $(srcdir)/mksigname.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/mksigname.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/mksigname.c mktemp.lo: $(srcdir)/mktemp.c $(incdir)/sudo_compat.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/mktemp.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/mktemp.c +mktemp_test.lo: $(srcdir)/regress/mktemp/mktemp_test.c \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/mktemp/mktemp_test.c +parse_gids_test.lo: $(srcdir)/regress/parse_gids/parse_gids_test.c \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/parse_gids/parse_gids_test.c parseln.lo: $(srcdir)/parseln.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/parseln.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/parseln.c parseln_test.lo: $(srcdir)/regress/sudo_parseln/parseln_test.c \ $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ $(incdir)/sudo_util.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/sudo_parseln/parseln_test.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/sudo_parseln/parseln_test.c progname.lo: $(srcdir)/progname.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_util.h \ $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/progname.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/progname.c progname_test.lo: $(srcdir)/regress/progname/progname_test.c \ $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ $(incdir)/sudo_util.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/progname/progname_test.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/progname/progname_test.c pw_dup.lo: $(srcdir)/pw_dup.c $(incdir)/sudo_compat.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/pw_dup.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/pw_dup.c +reallocarray.lo: $(srcdir)/reallocarray.c $(incdir)/sudo_compat.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/reallocarray.c secure_path.lo: $(srcdir)/secure_path.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/secure_path.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/secure_path.c setgroups.lo: $(srcdir)/setgroups.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/setgroups.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/setgroups.c sha2.lo: $(srcdir)/sha2.c $(incdir)/compat/endian.h $(incdir)/compat/sha2.h \ $(incdir)/sudo_compat.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sha2.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/sha2.c sig2str.lo: $(srcdir)/sig2str.c $(incdir)/sudo_compat.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sig2str.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/sig2str.c siglist.lo: siglist.c $(incdir)/sudo_compat.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) siglist.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) siglist.c signame.lo: signame.c $(incdir)/sudo_compat.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) signame.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) signame.c snprintf.lo: $(srcdir)/snprintf.c $(incdir)/sudo_compat.h \ $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/snprintf.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/snprintf.c strlcat.lo: $(srcdir)/strlcat.c $(incdir)/sudo_compat.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/strlcat.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/strlcat.c strlcpy.lo: $(srcdir)/strlcpy.c $(incdir)/sudo_compat.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/strlcpy.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/strlcpy.c +strndup.lo: $(srcdir)/strndup.c $(incdir)/sudo_compat.h $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/strndup.c +strnlen.lo: $(srcdir)/strnlen.c $(incdir)/sudo_compat.h $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/strnlen.c strsignal.lo: $(srcdir)/strsignal.c $(incdir)/sudo_compat.h \ $(incdir)/sudo_gettext.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/strsignal.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/strsignal.c +strsplit.lo: $(srcdir)/strsplit.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/strsplit.c +strsplit_test.lo: $(srcdir)/regress/strsplit/strsplit_test.c \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/strsplit/strsplit_test.c strtobool.lo: $(srcdir)/strtobool.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/strtobool.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/strtobool.c strtoid.lo: $(srcdir)/strtoid.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_gettext.h $(incdir)/sudo_queue.h \ $(incdir)/sudo_util.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/strtoid.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/strtoid.c strtomode.lo: $(srcdir)/strtomode.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_gettext.h $(incdir)/sudo_queue.h \ $(incdir)/sudo_util.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/strtomode.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/strtomode.c strtonum.lo: $(srcdir)/strtonum.c $(incdir)/sudo_compat.h \ $(incdir)/sudo_gettext.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/strtonum.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/strtonum.c sudo_conf.lo: $(srcdir)/sudo_conf.c $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.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 $(top_builddir)/config.h \ - $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sudo_conf.c + $(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 \ + $(top_builddir)/config.h $(top_builddir)/pathnames.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/sudo_conf.c sudo_debug.lo: $(srcdir)/sudo_debug.c $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.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 $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sudo_debug.c + $(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 \ + $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/sudo_debug.c sudo_dso.lo: $(srcdir)/sudo_dso.c $(incdir)/sudo_compat.h $(incdir)/sudo_dso.h \ $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sudo_dso.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/sudo_dso.c term.lo: $(srcdir)/term.c $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ $(incdir)/sudo_debug.h $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/term.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/term.c ttysize.lo: $(srcdir)/ttysize.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/ttysize.c -utimes.lo: $(srcdir)/utimes.c $(incdir)/compat/utime.h $(incdir)/sudo_compat.h \ - $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/utimes.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/ttysize.c +utimens.lo: $(srcdir)/utimens.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) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/utimens.c diff -Nru sudo-1.8.12/lib/util/mksiglist.c sudo-1.8.16/lib/util/mksiglist.c --- sudo-1.8.12/lib/util/mksiglist.c 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/lib/util/mksiglist.c 2015-10-31 23:35:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2012 Todd C. Miller + * Copyright (c) 2010-2012, 2015 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 @@ -20,14 +20,7 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #include #include "sudo_compat.h" @@ -43,6 +36,7 @@ #include "mksiglist.h" printf("#include \n"); + printf("#include \n"); printf("#include \n"); printf("#include \"sudo_compat.h\"\n\n"); printf("const char *const sudo_sys_siglist[NSIG] = {\n"); diff -Nru sudo-1.8.12/lib/util/mksigname.c sudo-1.8.16/lib/util/mksigname.c --- sudo-1.8.12/lib/util/mksigname.c 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/lib/util/mksigname.c 2015-10-31 23:35:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2012 Todd C. Miller + * Copyright (c) 2010-2012, 2015 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 @@ -20,14 +20,7 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #include #include "sudo_compat.h" @@ -43,6 +36,7 @@ #include "mksigname.h" printf("#include \n"); + printf("#include \n"); printf("#include \n"); printf("#include \"sudo_compat.h\"\n\n"); printf("const char *const sudo_sys_signame[NSIG] = {\n"); diff -Nru sudo-1.8.12/lib/util/mktemp.c sudo-1.8.16/lib/util/mktemp.c --- sudo-1.8.12/lib/util/mktemp.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/util/mktemp.c 2015-10-31 23:35:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2003, 2004, 2008-2011, 2013, 2014 + * Copyright (c) 2001, 2003, 2004, 2008-2011, 2013, 2015 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -30,10 +30,14 @@ #ifdef HAVE_STDLIB_H # include #endif /* HAVE_STDLIB_H */ +#ifdef HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ #include -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #ifdef TIME_WITH_SYS_TIME # include #endif @@ -45,6 +49,7 @@ #define TEMPCHARS "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" #define NUM_CHARS (sizeof(TEMPCHARS) - 1) +#define MIN_X 6 #ifndef INT_MAX #define INT_MAX 0x7fffffff @@ -122,15 +127,15 @@ char *start, *cp, *ep; const char tempchars[] = TEMPCHARS; unsigned int r, tries; + size_t len; int fd; - for (ep = path; *ep; ep++) - ; - if (path + slen >= ep) { + len = strlen(path); + if (len < MIN_X || slen < 0 || (size_t)slen > len - MIN_X) { errno = EINVAL; return -1; } - ep -= slen; + ep = path + len - slen; tries = 1; for (start = ep; start > path && start[-1] == 'X'; start--) { @@ -138,9 +143,13 @@ tries *= NUM_CHARS; } tries *= 2; + if (ep - start < MIN_X) { + errno = EINVAL; + return -1; + } do { - for (cp = start; *cp; cp++) { + for (cp = start; cp != ep; cp++) { r = get_random() % NUM_CHARS; *cp = tempchars[r]; } diff -Nru sudo-1.8.12/lib/util/parseln.c sudo-1.8.16/lib/util/parseln.c --- sudo-1.8.12/lib/util/parseln.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/util/parseln.c 2016-03-17 16:13:10.000000000 +0000 @@ -18,30 +18,15 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRING_H */ -#if defined(HAVE_MALLOC_H) && !defined(STDC_HEADERS) -# include -#endif /* HAVE_MALLOC_H && !STDC_HEADERS */ #include -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #ifdef HAVE_STDBOOL_H # include @@ -55,7 +40,7 @@ /* * Read a line of input, honoring line continuation chars. - * Remove comments and strips off leading and trailing spaces. + * Remove comments and strip off leading and trailing spaces. * Returns the line length and updates the buf and bufsize pointers. * XXX - just use a struct w/ state, including getline buffer? * could also make comment char and line continuation configurable @@ -84,7 +69,7 @@ /* Remove comments or check for line continuation (but not both) */ if ((cp = strchr(line, '#')) != NULL) { *cp = '\0'; - len = (size_t)(cp - line); + len = (ssize_t)(cp - line); } else if (len > 0 && line[len - 1] == '\\' && (len == 1 || line[len - 2] != '\\')) { line[--len] = '\0'; continued = true; @@ -114,8 +99,13 @@ size |= size >> 16; size++; } - if ((tmp = realloc(*bufp, size)) == NULL) + if ((tmp = realloc(*bufp, size)) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + len = -1; + total = 0; break; + } *bufp = tmp; *bufsizep = size; } @@ -124,6 +114,6 @@ } while (continued); free(line); if (len == -1 && total == 0) - debug_return_size_t((size_t)-1); - debug_return_size_t(total); + debug_return_ssize_t(-1); + debug_return_ssize_t(total); } diff -Nru sudo-1.8.12/lib/util/progname.c sudo-1.8.16/lib/util/progname.c --- sudo-1.8.12/lib/util/progname.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/util/progname.c 2015-10-31 23:35:00.000000000 +0000 @@ -18,14 +18,7 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ diff -Nru sudo-1.8.12/lib/util/pw_dup.c sudo-1.8.16/lib/util/pw_dup.c --- sudo-1.8.12/lib/util/pw_dup.c 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/lib/util/pw_dup.c 2015-10-31 23:35:00.000000000 +0000 @@ -26,23 +26,13 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#if defined(HAVE_MALLOC_H) && !defined(STDC_HEADERS) -# include -#endif /* HAVE_MALLOC_H && !STDC_HEADERS */ #include #include "sudo_compat.h" diff -Nru sudo-1.8.12/lib/util/reallocarray.c sudo-1.8.16/lib/util/reallocarray.c --- sudo-1.8.12/lib/util/reallocarray.c 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.16/lib/util/reallocarray.c 2015-10-31 23:35:00.000000000 +0000 @@ -0,0 +1,51 @@ +/* $OpenBSD: reallocarray.c,v 1.2 2014/12/08 03:45:00 bcook Exp $ */ +/* + * Copyright (c) 2008 Otto Moerbeek + * + * 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 + +#ifndef HAVE_REALLOCARRAY + +#include +#include +#if defined(HAVE_STDINT_H) +# include +#elif defined(HAVE_INTTYPES_H) +# include +#endif +#include +#include + +#include "sudo_compat.h" + +/* + * This is sqrt(SIZE_MAX+1), as s1*s2 <= SIZE_MAX + * if both s1 < MUL_NO_OVERFLOW and s2 < MUL_NO_OVERFLOW + */ +#define MUL_NO_OVERFLOW ((size_t)1 << (sizeof(size_t) * 4)) + +void * +sudo_reallocarray(void *optr, size_t nmemb, size_t size) +{ + if ((nmemb >= MUL_NO_OVERFLOW || size >= MUL_NO_OVERFLOW) && + nmemb > 0 && SIZE_MAX / nmemb < size) { + errno = ENOMEM; + return NULL; + } + return realloc(optr, size * nmemb); +} + +#endif /* HAVE_REALLOCARRAY */ diff -Nru sudo-1.8.12/lib/util/regress/atofoo/atofoo_test.c sudo-1.8.16/lib/util/regress/atofoo/atofoo_test.c --- sudo-1.8.12/lib/util/regress/atofoo/atofoo_test.c 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/lib/util/regress/atofoo/atofoo_test.c 2015-10-31 23:35:00.000000000 +0000 @@ -18,14 +18,7 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STDBOOL_H # include #else diff -Nru sudo-1.8.12/lib/util/regress/fnmatch/fnm_test.c sudo-1.8.16/lib/util/regress/fnmatch/fnm_test.c --- sudo-1.8.12/lib/util/regress/fnmatch/fnm_test.c 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/lib/util/regress/fnmatch/fnm_test.c 2015-10-31 23:35:00.000000000 +0000 @@ -6,6 +6,7 @@ #include +#include #include #include #ifdef HAVE_STRING_H diff -Nru sudo-1.8.12/lib/util/regress/fnmatch/fnm_test.in sudo-1.8.16/lib/util/regress/fnmatch/fnm_test.in --- sudo-1.8.12/lib/util/regress/fnmatch/fnm_test.in 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/lib/util/regress/fnmatch/fnm_test.in 2016-03-17 16:13:10.000000000 +0000 @@ -3,3 +3,4 @@ /bin/[[:opper:][:alnum:]]* /bin/ls NONE 1 [[:alpha:][:alnum:]]*.c foo1.c FNM_PERIOD 0 [[:upper:]]* FOO NONE 0 +[![:space:]]* bar NONE 0 diff -Nru sudo-1.8.12/lib/util/regress/glob/globtest.c sudo-1.8.16/lib/util/regress/glob/globtest.c --- sudo-1.8.12/lib/util/regress/glob/globtest.c 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/lib/util/regress/glob/globtest.c 2015-10-31 23:35:00.000000000 +0000 @@ -6,6 +6,7 @@ #include +#include #include #include #ifdef HAVE_STRING_H @@ -117,7 +118,7 @@ } *ep = '\0'; entry.flags = 0; - for ((cp = strtok(cp, "|")); cp != NULL; (cp = strtok(NULL, "|"))) { + for ((cp = strtok_r(cp, "|", &ep)); cp != NULL; (cp = strtok_r(NULL, "|", &ep))) { if (strcmp(cp, "GLOB_APPEND") == 0) entry.flags |= GLOB_APPEND; else if (strcmp(cp, "GLOB_DOOFFS") == 0) diff -Nru sudo-1.8.12/lib/util/regress/mktemp/mktemp_test.c sudo-1.8.16/lib/util/regress/mktemp/mktemp_test.c --- sudo-1.8.12/lib/util/regress/mktemp/mktemp_test.c 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.16/lib/util/regress/mktemp/mktemp_test.c 2015-10-31 23:35:00.000000000 +0000 @@ -0,0 +1,196 @@ +/* + * Copyright (c) 2010 Philip Guenther + * + * Public domain. + * + * Verify that mkdtemp() and mkstemps() doesn't overrun or underrun + * the template buffer and that it can generate names that don't + * contain any X's + */ + +#include + +#include +#include +#include + +#include +#include +#include +#include +#ifdef HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#include +#include + +#define SUDO_ERROR_WRAP 0 + +#include "sudo_compat.h" +#include "sudo_util.h" +#include "sudo_fatal.h" + +#ifndef MAP_ANON +# if defined(MAP_ANONYMOUS) +# define MAP_ANON MAP_ANONYMOUS +# endif +#endif + +#define MAX_TEMPLATE_LEN 10 +#define MAX_TRIES 100 +#define MIN_Xs 6 + +#define SUFFIX ".suff" +#define SLEN (sizeof SUFFIX - 1) + +__dso_public int main(int argc, char *argv[]); + +/* + * verify that a path generated by mkdtemp() or mkstemp() looks like a + * reasonable expansion of the template and matches the fd. Returns true + * if all the X's were replaced with non-X's + */ +int +check(int fd, char const *kind, char const *path, char const *prefix, + size_t plen, char const *suffix, size_t slen, int tlen) +{ + struct stat sb, fsb; + char const *p; + + if (tlen < MIN_Xs) { + if (fd != -1) + sudo_fatalx("%s(%s) succeed with too few Xs", kind, path); + if (errno != EINVAL) + sudo_fatal("%s(%s) failed with wrong errno: %d", kind, path, errno); + return 1; + } + if (fd == -1) + sudo_fatal("%s(%s)", kind, path); + if (stat(path, &sb)) + sudo_fatal("%s: stat(%s)", kind, path); + if (fd >= 0) { + if (fstat(fd, &fsb)) + sudo_fatal("%s: fstat(%d==%s)", kind, fd, path); + if (sb.st_dev != fsb.st_dev || sb.st_ino != fsb.st_ino) + sudo_fatalx("%s: stat mismatch", kind); + } + if (memcmp(path, prefix, plen) != 0) + sudo_fatalx("%s: prefix changed! %s vs %s", kind, prefix, path); + if (memcmp(path + plen + tlen, suffix, slen + 1) != 0) + sudo_fatalx("%s: suffix changed! %s vs %s", kind, suffix, path); + for (p = path + plen; p < path + plen + tlen; p++) + if (*p == '\0') + sudo_fatalx("%s: unexpected truncation", kind); + else if (*p == 'X') + return 0; + return 1; +} + +void +try_mkdtemp(char *p, char const *prefix, int len) +{ + size_t plen = strlen(prefix); + int fd, tries, ok; + + for (tries = 0; tries < MAX_TRIES; tries++) { + memcpy(p, prefix, plen); + memset(p + plen, 'X', len); + p[plen + len] = '\0'; + fd = mkdtemp(p) ? -2 : -1; + ok = check(fd, "mkdtemp", p, prefix, plen, "", 0, len); + rmdir(p); + if (ok) + return; + } + sudo_fatalx("mkdtemp: exceeded MAX_TRIES"); +} + +void +try_mkstemps(char *p, char const *prefix, int len, char const *suffix) +{ + size_t plen = strlen(prefix); + size_t slen = strlen(suffix); + int tries, fd, ok; + + for (tries = 0; tries < MAX_TRIES; tries++) { + memcpy(p, prefix, plen); + memset(p + plen, 'X', len); + memcpy(p + plen + len, suffix, slen + 1); + fd = mkstemps(p, slen); + ok = check(fd, "mkstemp", p, prefix, plen, suffix, slen, len); + close(fd); + unlink(p); + if (ok) + return; + } + sudo_fatalx("mkstemps: exceeded MAX_TRIES"); +} + +int +main(int argc, char *argv[]) +{ + char cwd[PATH_MAX + 1]; + char *p; + size_t clen; + long pg; + int i; + + initprogname(argc > 0 ? argv[0] : "mktemp_test"); + + pg = sysconf(_SC_PAGESIZE); + if (getcwd(cwd, sizeof cwd - 1) == NULL) + sudo_fatal("getcwd"); + clen = strlen(cwd); + cwd[clen++] = '/'; + cwd[clen] = '\0'; +#ifdef MAP_ANON + p = mmap(NULL, pg * 3, PROT_READ | PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0); +#else + i = open("/dev/zero", O_RDWR); + if (i == -1) + sudo_fatal("/dev/zero"); + p = mmap(NULL, pg * 3, PROT_READ | PROT_WRITE, MAP_PRIVATE, i, 0); +#endif + if (p == MAP_FAILED) + sudo_fatal("mmap"); + if (mprotect(p, pg, PROT_NONE) || mprotect(p + pg * 2, pg, PROT_NONE)) + sudo_fatal("mprotect"); + p += pg; + + i = MAX_TEMPLATE_LEN + 1; + while (i-- > 0) { + /* try first at the start of a page, no prefix */ + try_mkdtemp(p, "", i); + /* now at the end of the page, no prefix */ + try_mkdtemp(p + pg - i - 1, "", i); + /* start of the page, prefixed with the cwd */ + try_mkdtemp(p, cwd, i); + /* how about at the end of the page, prefixed with cwd? */ + try_mkdtemp(p + pg - clen - i - 1, cwd, i); + + /* again, with mkstemps() and an empty suffix */ + /* try first at the start of a page, no prefix */ + try_mkstemps(p, "", i, ""); + /* now at the end of the page, no prefix */ + try_mkstemps(p + pg - i - 1, "", i, ""); + /* start of the page, prefixed with the cwd */ + try_mkstemps(p, cwd, i, ""); + /* how about at the end of the page, prefixed with cwd? */ + try_mkstemps(p + pg - clen - i - 1, cwd, i, ""); + + /* mkstemps() and a non-empty suffix */ + /* try first at the start of a page, no prefix */ + try_mkstemps(p, "", i, SUFFIX); + /* now at the end of the page, no prefix */ + try_mkstemps(p + pg - i - SLEN - 1, "", i, SUFFIX); + /* start of the page, prefixed with the cwd */ + try_mkstemps(p, cwd, i, SUFFIX); + /* how about at the end of the page, prefixed with cwd? */ + try_mkstemps(p + pg - clen - i - SLEN - 1, cwd, i, SUFFIX); + } + + return 0; +} diff -Nru sudo-1.8.12/lib/util/regress/parse_gids/parse_gids_test.c sudo-1.8.16/lib/util/regress/parse_gids/parse_gids_test.c --- sudo-1.8.12/lib/util/regress/parse_gids/parse_gids_test.c 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.16/lib/util/regress/parse_gids/parse_gids_test.c 2015-10-31 23:35:00.000000000 +0000 @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2015 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 +#ifdef HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#ifdef HAVE_STDBOOL_H +# include +#else +# include "compat/stdbool.h" +#endif + +#include "sudo_compat.h" +#include "sudo_fatal.h" +#include "sudo_util.h" + +__dso_public int main(int argc, char *argv[]); + +/* + * Test that sudo_parse_gids() works as expected. + */ + +struct parse_gids_test { + const char *gids; + gid_t *baseptr; + gid_t basegid; + int ngids; + const GETGROUPS_T *gidlist; +}; + +static const GETGROUPS_T test1_out[] = { 0, 1, 2, 3, 4 }; +static const GETGROUPS_T test2_out[] = { 1, 2, 3, 4 }; +static const GETGROUPS_T test3_out[] = { 0, 1, -2, 3, 4 }; + +/* XXX - test syntax errors too */ +static struct parse_gids_test test_data[] = { + { "1,2,3,4", &test_data[0].basegid, 0, 5, test1_out }, + { "1,2,3,4", NULL, 0, 4, test2_out }, + { "1,-2,3,4", &test_data[2].basegid, 0, 5, test3_out }, + { NULL, false, 0, 0, NULL } +}; + +static void +dump_gids(const char *prefix, int ngids, const GETGROUPS_T *gidlist) +{ + int i; + + fprintf(stderr, "%s: %s: ", getprogname(), prefix); + for (i = 0; i < ngids; i++) { + fprintf(stderr, "%s%d", i ? ", " : "", (int)gidlist[i]); + } + fputc('\n', stderr); +} + +int +main(int argc, char *argv[]) +{ + GETGROUPS_T *gidlist = NULL; + int i, j, errors = 0, ntests = 0; + int ngids; + initprogname(argc > 0 ? argv[0] : "strsplit_test"); + + for (i = 0; test_data[i].gids != NULL; i++) { + free(gidlist); + ngids = sudo_parse_gids(test_data[i].gids, test_data[i].baseptr, &gidlist); + if (ngids == -1) + exit(1); /* out of memory? */ + ntests++; + if (ngids != test_data[i].ngids) { + sudo_warnx_nodebug("test #%d: expected %d gids, got %d", + ntests, test_data[i].ngids, ngids); + dump_gids("expected", test_data[i].ngids, test_data[i].gidlist); + dump_gids("received", ngids, gidlist); + errors++; + continue; + } + ntests++; + for (j = 0; j < ngids; j++) { + if (test_data[i].gidlist[j] != gidlist[j]) { + sudo_warnx_nodebug("test #%d: gid mismatch", ntests); + dump_gids("expected", test_data[i].ngids, test_data[i].gidlist); + dump_gids("received", ngids, gidlist); + errors++; + break; + } + } + } + if (ntests != 0) { + printf("%s: %d tests run, %d errors, %d%% success rate\n", + getprogname(), ntests, errors, (ntests - errors) * 100 / ntests); + } + exit(errors); +} diff -Nru sudo-1.8.12/lib/util/regress/progname/progname_test.c sudo-1.8.16/lib/util/regress/progname/progname_test.c --- sudo-1.8.12/lib/util/regress/progname/progname_test.c 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/lib/util/regress/progname/progname_test.c 2015-10-31 23:35:00.000000000 +0000 @@ -18,18 +18,8 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H diff -Nru sudo-1.8.12/lib/util/regress/strsplit/strsplit_test.c sudo-1.8.16/lib/util/regress/strsplit/strsplit_test.c --- sudo-1.8.12/lib/util/regress/strsplit/strsplit_test.c 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.16/lib/util/regress/strsplit/strsplit_test.c 2015-10-31 23:35:00.000000000 +0000 @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2015 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 +#ifdef HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#ifdef HAVE_STDBOOL_H +# include +#else +# include "compat/stdbool.h" +#endif + +#include "sudo_compat.h" +#include "sudo_fatal.h" +#include "sudo_util.h" + +__dso_public int main(int argc, char *argv[]); + +/* + * Test that sudo_strsplit() works as expected. + */ + +struct strsplit_test { + const char *input; + size_t input_len; + const char **output; +}; + +static const char test1_in[] = " vi "; +static const char *test1_out[] = { "vi", NULL }; +static const char test2_in[] = "vi -r "; +static const char *test2_out[] = { "vi", "-r", NULL }; +static const char test3_in[] = "vi -r -R abc\tdef "; +static const char *test3_out[] = { "vi", "-r", "-R", "abc", "def", NULL }; +static const char test4_in[] = "vi -r -R abc\tdef "; +static const char *test4_out[] = { "vi", "-r", "-R", "abc", NULL }; +static const char test5_in[] = ""; +static const char *test5_out[] = { NULL }; + +static struct strsplit_test test_data[] = { + { test1_in, sizeof(test1_in) - 1, test1_out }, + { test2_in, sizeof(test2_in) - 1, test2_out }, + { test3_in, sizeof(test3_in) - 1, test3_out }, + { test4_in, sizeof(test4_in) - 5, test4_out }, + { test5_in, sizeof(test5_in) - 1, test5_out }, + { NULL, 0, NULL } +}; + +int +main(int argc, char *argv[]) +{ + const char *cp, *ep, *input_end; + int i, j, errors = 0, ntests = 0; + size_t len; + initprogname(argc > 0 ? argv[0] : "strsplit_test"); + + for (i = 0; test_data[i].input != NULL; i++) { + input_end = test_data[i].input + test_data[i].input_len; + cp = sudo_strsplit(test_data[i].input, input_end, " \t", &ep); + for (j = 0; test_data[i].output[j] != NULL; j++) { + ntests++; + len = strlen(test_data[i].output[j]); + if ((size_t)(ep - cp) != len) { + sudo_warnx_nodebug("failed test #%d: bad length, expected " + "%zu, got %zu", ntests, len, (size_t)(ep - cp)); + errors++; + continue; + } + ntests++; + if (strncmp(cp, test_data[i].output[j], len) != 0) { + sudo_warnx_nodebug("failed test #%d: expected %s, got %.*s", + ntests, test_data[i].output[j], (int)(ep - cp), cp); + errors++; + continue; + } + cp = sudo_strsplit(NULL, input_end, " \t", &ep); + } + ntests++; + if (cp != NULL) { + sudo_warnx_nodebug("failed test #%d: extra tokens \"%.*s\"", + ntests, (int)(input_end - cp), cp); + errors++; + } + } + if (ntests != 0) { + printf("%s: %d tests run, %d errors, %d%% success rate\n", + getprogname(), ntests, errors, (ntests - errors) * 100 / ntests); + } + exit(errors); +} diff -Nru sudo-1.8.12/lib/util/regress/sudo_conf/conf_test.c sudo-1.8.16/lib/util/regress/sudo_conf/conf_test.c --- sudo-1.8.12/lib/util/regress/sudo_conf/conf_test.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/util/regress/sudo_conf/conf_test.c 2015-10-31 23:35:00.000000000 +0000 @@ -18,18 +18,8 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H @@ -61,12 +51,13 @@ initprogname(argc > 0 ? argv[0] : "conf_test"); if (argc != 2) { fprintf(stderr, "usage: %s conf_file\n", getprogname()); - exit(1); + exit(EXIT_FAILURE); } - sudo_conf_read(argv[1], SUDO_CONF_ALL); + if (sudo_conf_read(argv[1], SUDO_CONF_ALL) == -1) + exit(EXIT_FAILURE); sudo_conf_dump(); - exit(0); + exit(EXIT_SUCCESS); } static void diff -Nru sudo-1.8.12/lib/util/regress/sudo_parseln/parseln_test.c sudo-1.8.16/lib/util/regress/sudo_parseln/parseln_test.c --- sudo-1.8.12/lib/util/regress/sudo_parseln/parseln_test.c 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/lib/util/regress/sudo_parseln/parseln_test.c 2015-10-31 23:35:00.000000000 +0000 @@ -18,18 +18,8 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H diff -Nru sudo-1.8.12/lib/util/regress/tailq/hltq_test.c sudo-1.8.16/lib/util/regress/tailq/hltq_test.c --- sudo-1.8.12/lib/util/regress/tailq/hltq_test.c 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/lib/util/regress/tailq/hltq_test.c 2015-10-31 23:34:59.000000000 +0000 @@ -18,18 +18,9 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H diff -Nru sudo-1.8.12/lib/util/secure_path.c sudo-1.8.16/lib/util/secure_path.c --- sudo-1.8.12/lib/util/secure_path.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/util/secure_path.c 2015-10-31 23:34:59.000000000 +0000 @@ -25,9 +25,7 @@ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include "sudo_compat.h" diff -Nru sudo-1.8.12/lib/util/setgroups.c sudo-1.8.16/lib/util/setgroups.c --- sudo-1.8.12/lib/util/setgroups.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/util/setgroups.c 2015-10-31 23:34:59.000000000 +0000 @@ -20,17 +20,8 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include +#include #include #include #include @@ -48,10 +39,8 @@ rval = setgroups(ngids, (GETGROUPS_T *)gids); if (rval == -1 && errno == EINVAL) { /* Too many groups, try again with fewer. */ -#if defined(HAVE_SYSCONF) && defined(_SC_NGROUPS_MAX) maxgids = (int)sysconf(_SC_NGROUPS_MAX); if (maxgids == -1) -#endif maxgids = NGROUPS_MAX; if (ngids > maxgids) rval = setgroups(maxgids, (GETGROUPS_T *)gids); diff -Nru sudo-1.8.12/lib/util/sha2.c sudo-1.8.16/lib/util/sha2.c --- sudo-1.8.12/lib/util/sha2.c 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/lib/util/sha2.c 2015-10-31 23:34:59.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013 Todd C. Miller + * Copyright (c) 2013-2015 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 @@ -25,19 +25,10 @@ #include +#include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H diff -Nru sudo-1.8.12/lib/util/sig2str.c sudo-1.8.16/lib/util/sig2str.c --- sudo-1.8.12/lib/util/sig2str.c 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/lib/util/sig2str.c 2015-10-31 23:35:24.000000000 +0000 @@ -22,14 +22,7 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ @@ -45,8 +38,6 @@ # 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_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 diff -Nru sudo-1.8.12/lib/util/snprintf.c sudo-1.8.16/lib/util/snprintf.c --- sudo-1.8.12/lib/util/snprintf.c 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/lib/util/snprintf.c 2015-10-31 23:34:59.000000000 +0000 @@ -1,6 +1,7 @@ -/* - * Copyright (c) 1999-2005, 2008, 2010-2014 - * Todd C. Miller +/* $OpenBSD: vfprintf.c,v 1.67 2014/12/21 00:23:30 daniel Exp $ */ +/*- + * Copyright (c) 1999-2005, 2008, 2010-2015 + * Todd C. Miller * Copyright (c) 1990, 1993 * The Regents of the University of California. All rights reserved. * @@ -31,12 +32,11 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * From: @(#)vfprintf.c 8.1 (Berkeley) 6/4/93 + * From: @(#)vfprintf.c 8.1 (Berkeley) 6/4/93 */ /* - * v?snprintf/v?asprintf based on 4.4BSD stdio. - * NOTE: does not support floating point. + * v?snprintf/v?asprintf based on OpenBSD vfprintf.c. */ #include @@ -46,203 +46,296 @@ defined(PREFER_PORTABLE_SNPRINTF) #include +#include -#include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include +#ifdef HAVE_NL_LANGINFO +# include +#endif +#include +#include +#include +#include #if defined(HAVE_STDINT_H) # include #elif defined(HAVE_INTTYPES_H) # include #endif +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#if defined(HAVE_MALLOC_H) && !defined(STDC_HEADERS) -# include -#endif /* HAVE_MALLOC_H && !STDC_HEADERS */ -#include -#include +#include +#ifdef PRINTF_WIDE_CHAR +# include +#endif +#include #include "sudo_compat.h" +/* Avoid printf format attacks by ignoring the %n escape. */ +#define NO_PRINTF_PERCENT_N + +union arg { + int intarg; + unsigned int uintarg; + long longarg; + unsigned long ulongarg; + long long longlongarg; + unsigned long long ulonglongarg; + ptrdiff_t ptrdiffarg; + size_t sizearg; + ssize_t ssizearg; + intmax_t intmaxarg; + uintmax_t uintmaxarg; + void *pvoidarg; + char *pchararg; + signed char *pschararg; + short *pshortarg; + int *pintarg; + long *plongarg; + long long *plonglongarg; + ptrdiff_t *pptrdiffarg; + ssize_t *pssizearg; + intmax_t *pintmaxarg; +#ifdef FLOATING_POINT + double doublearg; + long double longdoublearg; +#endif +#ifdef PRINTF_WIDE_CHAR + wint_t wintarg; + wchar_t *pwchararg; +#endif +}; + +static int __find_arguments(const char *fmt0, va_list ap, union arg **argtable, + size_t *argtablesiz); +static int __grow_type_table(unsigned char **typetable, int *tablesize); static int xxxprintf(char **, size_t, int, const char *, va_list); +#if !defined(MAP_ANON) && defined(MAP_ANONYMOUS) +# define MAP_ANON MAP_ANONYMOUS +#endif + /* - * Macros for converting digits to letters and vice versa + * Allocate "size" bytes via mmap. */ -#define to_digit(c) ((c) - '0') -#define is_digit(c) ((unsigned int)to_digit(c) <= 9) -#define to_char(n) ((n) + '0') +static void * +mmap_alloc(size_t size) +{ + void *p; +#ifndef MAP_ANON + int fd; + + if ((fd = open("/dev/zero", O_RDWR)) == -1) + return NULL; + p = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0); + close(fd); +#else + p = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0); +#endif + if (p == MAP_FAILED) + return NULL; + return p; +} /* - * Flags used during conversion. + * Unmap "size" bytes of the ptr. */ -#define ALT 0x001 /* alternate form */ -#define HEXPREFIX 0x002 /* add 0x or 0X prefix */ -#define LADJUST 0x004 /* left adjustment */ -#define LONGDBL 0x008 /* long double; unimplemented */ -#define LONGINT 0x010 /* long integer */ -#define LLONGINT 0x020 /* quad integer */ -#define SHORTINT 0x040 /* short integer */ -#define ZEROPAD 0x080 /* zero (as opposed to blank) pad */ - -#define BUF 68 - -/* - * Convert an unsigned long to ASCII for printf purposes, returning - * a pointer to the first character of the string representation. - * Octal numbers can be forced to have a leading zero; hex numbers - * use the given digits. +static void +mmap_free(void *ptr, size_t size) +{ + if (ptr != NULL) + munmap(ptr, size); +} + +#ifdef PRINTF_WIDE_CHAR +/* + * Convert a wide character string argument for the %ls format to a multibyte + * string representation. If not -1, prec specifies the maximum number of + * bytes to output, and also means that we can't assume that the wide char + * string is null-terminated. */ static char * -__ultoa(unsigned long val, char *endp, int base, int octzero, char *xdigs) +__wcsconv(wchar_t *wcsarg, int prec) { - char *cp = endp; - long sval; - - /* - * Handle the three cases separately, in the hope of getting - * better/faster code. - */ - switch (base) { - case 10: - if (val < 10) { /* many numbers are 1 digit */ - *--cp = to_char(val); - return cp; + mbstate_t mbs; + char buf[MB_LEN_MAX]; + wchar_t *p; + char *convbuf; + size_t clen, nbytes; + + /* Allocate space for the maximum number of bytes we could output. */ + if (prec < 0) { + memset(&mbs, 0, sizeof(mbs)); + p = wcsarg; + nbytes = wcsrtombs(NULL, (const wchar_t **)&p, 0, &mbs); + if (nbytes == (size_t)-1) { + errno = EILSEQ; + return NULL; } + } else { /* - * On many machines, unsigned arithmetic is harder than - * signed arithmetic, so we do at most one unsigned mod and - * divide; this is sufficient to reduce the range of - * the incoming value to where signed arithmetic works. + * Optimisation: if the output precision is small enough, + * just allocate enough memory for the maximum instead of + * scanning the string. */ - if (val > LONG_MAX) { - *--cp = to_char(val % 10); - sval = val / 10; - } else - sval = val; - do { - *--cp = to_char(sval % 10); - sval /= 10; - } while (sval != 0); - break; - - case 8: - do { - *--cp = to_char(val & 7); - val >>= 3; - } while (val); - if (octzero && *cp != '0') - *--cp = '0'; - break; - - case 16: - do { - *--cp = xdigs[val & 15]; - val >>= 4; - } while (val); - break; + if (prec < 128) + nbytes = prec; + else { + nbytes = 0; + p = wcsarg; + memset(&mbs, 0, sizeof(mbs)); + for (;;) { + clen = wcrtomb(buf, *p++, &mbs); + if (clen == 0 || clen == (size_t)-1 || + nbytes + clen > (size_t)prec) + break; + nbytes += clen; + } + if (clen == (size_t)-1) { + errno = EILSEQ; + return NULL; + } + } + } + if ((convbuf = malloc(nbytes + 1)) == NULL) + return NULL; - default: /* oops */ - abort(); + /* Fill the output buffer. */ + p = wcsarg; + memset(&mbs, 0, sizeof(mbs)); + if ((nbytes = wcsrtombs(convbuf, (const wchar_t **)&p, + nbytes, &mbs)) == (size_t)-1) { + free(convbuf); + errno = EILSEQ; + return NULL; } - return cp; + convbuf[nbytes] = '\0'; + return convbuf; } +#endif -/* Identical to __ultoa, but for quads. */ -#if SIZEOF_LONG_INT == 8 -# define __ulltoa(v, e, b, o, x) __ultoa((unsigned long)(v), (e), (b), (o), (x)) -#else -static char * -__ulltoa(unsigned long long val, char *endp, int base, int octzero, char *xdigs) -{ - char *cp = endp; - long long sval; +#ifdef FLOATING_POINT +#include +#include +#include +#include "floatio.h" +#include "gdtoa.h" - /* quick test for small values; __ultoa is typically much faster */ - /* (perhaps instead we should run until small, then call __ultoa?) */ - if (val <= (unsigned long long)ULONG_MAX) - return __ultoa((unsigned long)val, endp, base, octzero, xdigs); - switch (base) { - case 10: - if (val < 10) { - *--cp = to_char(val % 10); - return cp; - } - if (val > LLONG_MAX) { - *--cp = to_char(val % 10); - sval = val / 10; - } else - sval = val; - do { - *--cp = to_char(sval % 10); - sval /= 10; - } while (sval != 0); - break; +#define DEFPREC 6 - case 8: - do { - *--cp = to_char(val & 7); - val >>= 3; - } while (val); - if (octzero && *cp != '0') - *--cp = '0'; - break; +static int exponent(char *, int, int); +#endif /* FLOATING_POINT */ - case 16: - do { - *--cp = xdigs[val & 15]; - val >>= 4; - } while (val); - break; +/* + * The size of the buffer we use as scratch space for integer + * conversions, among other things. Technically, we would need the + * most space for base 10 conversions with thousands' grouping + * characters between each pair of digits. 100 bytes is a + * conservative overestimate even for a 128-bit uintmax_t. + */ +#define BUF 100 + +#define STATIC_ARG_TBL_SIZE 8 /* Size of static argument table. */ - default: /* oops */ - abort(); - } - return cp; -} -#endif /* !SIZEOF_LONG_INT */ /* - * Actual printf innards. + * Macros for converting digits to letters and vice versa + */ +#define to_digit(c) ((c) - '0') +#define is_digit(c) ((unsigned int)to_digit(c) <= 9) +#define to_char(n) ((n) + '0') + +/* + * Flags used during conversion. */ +#define ALT 0x0001 /* alternate form */ +#define LADJUST 0x0004 /* left adjustment */ +#define LONGDBL 0x0008 /* long double */ +#define LONGINT 0x0010 /* long integer */ +#define LLONGINT 0x0020 /* long long integer */ +#define SHORTINT 0x0040 /* short integer */ +#define ZEROPAD 0x0080 /* zero (as opposed to blank) pad */ +#define FPT 0x0100 /* Floating point number */ +#define PTRINT 0x0200 /* (unsigned) ptrdiff_t */ +#define SIZEINT 0x0400 /* (signed) size_t */ +#define CHARINT 0x0800 /* 8 bit integer */ +#undef MAXINT /* Also defined by HP-UX param.h... */ +#define MAXINT 0x1000 /* largest integer size (intmax_t) */ + +/* + * Actual printf innards. + */ static int xxxprintf(char **strp, size_t strsize, int alloc, const char *fmt0, va_list ap) { char *fmt; /* format string */ int ch; /* character from fmt */ - int n; /* handy integer (short term usage) */ + int n, n2; /* handy integers (short term usage) */ char *cp; /* handy char pointer (short term usage) */ int flags; /* flags as above */ int ret; /* return value accumulator */ int width; /* width from format (%8d), or 0 */ - int prec; /* precision from format (%.3d), or -1 */ + int prec; /* precision from format; <0 for N/A */ char sign; /* sign prefix (' ', '+', '-', or \0) */ - unsigned long ulval = 0; /* integer arguments %[diouxX] */ - unsigned long long ullval = 0; /* long long arguments %ll[diouxX] */ - int base; /* base for [diouxX] conversion */ - int dprec; /* a copy of prec if [diouxX], 0 otherwise */ - int fieldsz; /* field size expanded by sign, etc */ +#ifdef FLOATING_POINT + /* + * We can decompose the printed representation of floating + * point numbers into several parts, some of which may be empty: + * + * [+|-| ] [0x|0X] MMM . NNN [e|E|p|P] [+|-] ZZ + * A B ---C--- D E F + * + * A: 'sign' holds this value if present; '\0' otherwise + * B: ox[1] holds the 'x' or 'X'; '\0' if not hexadecimal + * C: cp points to the string MMMNNN. Leading and trailing + * zeros are not in the string and must be added. + * D: expchar holds this character; '\0' if no exponent, e.g. %f + * F: at least two digits for decimal, at least one digit for hex + */ +#ifdef HAVE_NL_LANGINFO + const char *decimal_point = NULL; +#else + const char *decimal_point = "."; +#endif + int signflag; /* true if float is negative */ + union { /* floating point arguments %[aAeEfFgG] */ + double dbl; + long double ldbl; + } fparg; + int expt; /* integer value of exponent */ + char expchar; /* exponent character: [eEpP\0] */ + char *dtoaend; /* pointer to end of converted digits */ + int expsize; /* character count for expstr */ + int lead; /* sig figs before decimal or group sep */ + int ndig; /* actual number of digits returned by dtoa */ + char expstr[MAXEXPDIG+2]; /* buffer for exponent string: e+ZZZ */ + char *dtoaresult = NULL; +#endif + + uintmax_t _umax; /* integer arguments %[diouxX] */ + enum { OCT, DEC, HEX } base; /* base for %[diouxX] conversion */ + int dprec; /* a copy of prec if %[diouxX], 0 otherwise */ int realsz; /* field size expanded by dprec */ int size; /* size of converted field or string */ - char *xdigs = ""; /* digits for [xX] conversion */ - char buf[BUF]; /* space for %c, %[diouxX], %[eEfgG] */ - char ox[2]; /* space for 0x hex-prefix */ + const char *xdigs = ""; /* digits for %[xX] conversion */ +#define NIOV 8 + char buf[BUF]; /* buffer with space for digits of uintmax_t */ + char ox[2]; /* space for 0x; ox[1] is either x, X, or \0 */ char *str; /* pointer to string to fill */ char *estr; /* pointer to last char in str */ + union arg *argtable; /* args, built due to positional arg */ + union arg statargtable[STATIC_ARG_TBL_SIZE]; + size_t argtablesiz; + int nextarg; /* 1-based argument index */ + va_list orgap; /* original argument pointer */ +#ifdef PRINTF_WIDE_CHAR + char *convbuf; /* buffer for wide to multi-byte conversion */ +#endif /* * Choose PADSIZE to trade efficiency vs. size. If larger printf @@ -255,6 +348,9 @@ static char zeroes[PADSIZE] = {'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'}; + static const char xdigs_lower[16] = "0123456789abcdef"; + static const char xdigs_upper[16] = "0123456789ABCDEF"; + /* Print chars to "str", (allocate as needed if alloc is set). */ #define PRINT(ptr, len) do { \ const char *p = ptr; \ @@ -263,7 +359,7 @@ if (alloc && str >= estr) { \ char *t; \ strsize = (strsize << 1) + 1; \ - if (!(t = (char *)realloc(*strp, strsize))) { \ + if (!(t = realloc(*strp, strsize))) { \ free(str); \ *strp = NULL; \ ret = -1; \ @@ -277,7 +373,7 @@ } \ } while (0) - /* BEWARE, PAD uses `n'. */ + /* BEWARE, PAD uses `n' and PRINTANDPAD uses `n2'. */ #define PAD(plen, pstr) do { \ if ((n = (plen)) > 0) { \ while (n > PADSIZE) { \ @@ -287,26 +383,96 @@ PRINT(pstr, n); \ } \ } while (0) +#define PRINTANDPAD(p, ep, len, with) do { \ + n2 = (ep) - (p); \ + if (n2 > (len)) \ + n2 = (len); \ + if (n2 > 0) \ + PRINT((p), n2); \ + PAD((len) - (n2 > 0 ? n2 : 0), (with)); \ +} while(0) /* * To extend shorts properly, we need both signed and unsigned * argument extraction methods. */ #define SARG() \ - (flags&LONGINT ? va_arg(ap, long) : \ - flags&SHORTINT ? (long)(short)va_arg(ap, int) : \ - (long)va_arg(ap, int)) + ((intmax_t)(flags&MAXINT ? GETARG(intmax_t) : \ + flags&LLONGINT ? GETARG(long long) : \ + flags&LONGINT ? GETARG(long) : \ + flags&PTRINT ? GETARG(ptrdiff_t) : \ + flags&SIZEINT ? GETARG(ssize_t) : \ + flags&SHORTINT ? (short)GETARG(int) : \ + flags&CHARINT ? (signed char)GETARG(int) : \ + GETARG(int))) #define UARG() \ - (flags&LONGINT ? va_arg(ap, unsigned long) : \ - flags&SHORTINT ? (unsigned long)(unsigned short)va_arg(ap, int) : \ - (unsigned long)va_arg(ap, unsigned int)) + ((uintmax_t)(flags&MAXINT ? GETARG(uintmax_t) : \ + flags&LLONGINT ? GETARG(unsigned long long) : \ + flags&LONGINT ? GETARG(unsigned long) : \ + flags&PTRINT ? (uintptr_t)GETARG(ptrdiff_t) : /* XXX */ \ + flags&SIZEINT ? GETARG(size_t) : \ + flags&SHORTINT ? (unsigned short)GETARG(int) : \ + flags&CHARINT ? (unsigned char)GETARG(int) : \ + GETARG(unsigned int))) + + /* + * Append a digit to a value and check for overflow. + */ +#define APPEND_DIGIT(val, dig) do { \ + if ((val) > INT_MAX / 10) \ + goto overflow; \ + (val) *= 10; \ + if ((val) > INT_MAX - to_digit((dig))) \ + goto overflow; \ + (val) += to_digit((dig)); \ +} while (0) + + /* + * Get * arguments, including the form *nn$. Preserve the nextarg + * that the argument can be gotten once the type is determined. + */ +#define GETASTER(val) \ + n2 = 0; \ + cp = fmt; \ + while (is_digit(*cp)) { \ + APPEND_DIGIT(n2, *cp); \ + cp++; \ + } \ + if (*cp == '$') { \ + int hold = nextarg; \ + if (argtable == NULL) { \ + argtable = statargtable; \ + __find_arguments(fmt0, orgap, &argtable, &argtablesiz); \ + } \ + nextarg = n2; \ + val = GETARG(int); \ + nextarg = hold; \ + fmt = ++cp; \ + } else { \ + val = GETARG(int); \ + } + +/* +* Get the argument indexed by nextarg. If the argument table is +* built, use it to get the argument. If its not, get the next +* argument (and arguments must be gotten sequentially). +*/ +#define GETARG(type) \ + ((argtable != NULL) ? *((type*)(&argtable[nextarg++])) : \ + (nextarg++, va_arg(ap, type))) fmt = (char *)fmt0; + argtable = NULL; + nextarg = 1; + va_copy(orgap, ap); ret = 0; +#ifdef PRINTF_WIDE_CHAR + convbuf = NULL; +#endif if (alloc) { strsize = 128; - *strp = str = (char *)malloc(strsize); + *strp = str = malloc(strsize); if (str == NULL) { ret = -1; goto done; @@ -327,6 +493,8 @@ for (cp = fmt; (ch = *fmt) != '\0' && ch != '%'; fmt++) /* void */; if ((n = fmt - cp) != 0) { + if (n > INT_MAX - ret) + goto overflow; PRINT(cp, n); ret += n; } @@ -339,6 +507,7 @@ width = 0; prec = -1; sign = '\0'; + ox[1] = '\0'; rflag: ch = *fmt++; reswitch: switch (ch) { @@ -354,6 +523,9 @@ case '#': flags |= ALT; goto rflag; + case '\'': + /* grouping not implemented */ + goto rflag; case '*': /* * ``A negative field width argument is taken as a @@ -361,8 +533,11 @@ * -- ANSI X3J11 * They don't exclude field widths read from args. */ - if ((width = va_arg(ap, int)) >= 0) + GETASTER(width); + if (width >= 0) goto rflag; + if (width == INT_MIN) + goto overflow; width = -width; /* FALLTHROUGH */ case '-': @@ -373,16 +548,25 @@ goto rflag; case '.': if ((ch = *fmt++) == '*') { - n = va_arg(ap, int); + GETASTER(n); prec = n < 0 ? -1 : n; goto rflag; } n = 0; while (is_digit(ch)) { - n = 10 * n + to_digit(ch); + APPEND_DIGIT(n, ch); ch = *fmt++; } - prec = n < 0 ? -1 : n; + if (ch == '$') { + nextarg = n; + if (argtable == NULL) { + argtable = statargtable; + __find_arguments(fmt0, orgap, + &argtable, &argtablesiz); + } + goto rflag; + } + prec = n; goto reswitch; case '0': /* @@ -396,13 +580,35 @@ case '5': case '6': case '7': case '8': case '9': n = 0; do { - n = 10 * n + to_digit(ch); + APPEND_DIGIT(n, ch); ch = *fmt++; } while (is_digit(ch)); + if (ch == '$') { + nextarg = n; + if (argtable == NULL) { + argtable = statargtable; + __find_arguments(fmt0, orgap, + &argtable, &argtablesiz); + } + goto rflag; + } width = n; goto reswitch; +#ifdef FLOATING_POINT + case 'L': + flags |= LONGDBL; + goto rflag; +#endif case 'h': - flags |= SHORTINT; + if (*fmt == 'h') { + fmt++; + flags |= CHARINT; + } else { + flags |= SHORTINT; + } + goto rflag; + case 'j': + flags |= MAXINT; goto rflag; case 'l': if (*fmt == 'l') { @@ -412,9 +618,37 @@ flags |= LONGINT; } goto rflag; + case 'q': + flags |= LLONGINT; + goto rflag; + case 't': + flags |= PTRINT; + goto rflag; + case 'z': + flags |= SIZEINT; + goto rflag; case 'c': - *(cp = buf) = va_arg(ap, int); - size = 1; +#ifdef PRINTF_WIDE_CHAR + if (flags & LONGINT) { + mbstate_t mbs; + size_t mbseqlen; + + memset(&mbs, 0, sizeof(mbs)); + mbseqlen = wcrtomb(buf, + (wchar_t)GETARG(wint_t), &mbs); + if (mbseqlen == (size_t)-1) { + errno = EILSEQ; + goto done; + } + cp = buf; + size = (int)mbseqlen; + } else { +#endif + *(cp = buf) = GETARG(int); + size = 1; +#ifdef PRINTF_WIDE_CHAR + } +#endif sign = '\0'; break; case 'D': @@ -422,40 +656,173 @@ /*FALLTHROUGH*/ case 'd': case 'i': - if (flags & LLONGINT) { - ullval = va_arg(ap, long long); - if ((long long)ullval < 0) { - ullval = -ullval; - sign = '-'; + _umax = SARG(); + if ((intmax_t)_umax < 0) { + _umax = -_umax; + sign = '-'; + } + base = DEC; + goto number; +#ifdef FLOATING_POINT + case 'a': + case 'A': + if (ch == 'a') { + ox[1] = 'x'; + xdigs = xdigs_lower; + expchar = 'p'; + } else { + ox[1] = 'X'; + xdigs = xdigs_upper; + expchar = 'P'; + } + if (prec >= 0) + prec++; + if (dtoaresult) + __freedtoa(dtoaresult); + if (flags & LONGDBL) { + fparg.ldbl = GETARG(long double); + dtoaresult = cp = + __hldtoa(fparg.ldbl, xdigs, prec, + &expt, &signflag, &dtoaend); + if (dtoaresult == NULL) { + errno = ENOMEM; + goto done; } } else { - ulval = SARG(); - if ((long)ulval < 0) { - ulval = -ulval; - sign = '-'; + fparg.dbl = GETARG(double); + dtoaresult = cp = + __hdtoa(fparg.dbl, xdigs, prec, + &expt, &signflag, &dtoaend); + if (dtoaresult == NULL) { + errno = ENOMEM; + goto done; } } - base = 10; - goto number; + if (prec < 0) + prec = dtoaend - cp; + if (expt == INT_MAX) + ox[1] = '\0'; + goto fp_common; + case 'e': + case 'E': + expchar = ch; + if (prec < 0) /* account for digit before decpt */ + prec = DEFPREC + 1; + else + prec++; + goto fp_begin; + case 'f': + case 'F': + expchar = '\0'; + goto fp_begin; + case 'g': + case 'G': + expchar = ch - ('g' - 'e'); + if (prec == 0) + prec = 1; +fp_begin: + if (prec < 0) + prec = DEFPREC; + if (dtoaresult) + __freedtoa(dtoaresult); + if (flags & LONGDBL) { + fparg.ldbl = GETARG(long double); + dtoaresult = cp = + __ldtoa(&fparg.ldbl, expchar ? 2 : 3, prec, + &expt, &signflag, &dtoaend); + if (dtoaresult == NULL) { + errno = ENOMEM; + goto done; + } + } else { + fparg.dbl = GETARG(double); + dtoaresult = cp = + __dtoa(fparg.dbl, expchar ? 2 : 3, prec, + &expt, &signflag, &dtoaend); + if (dtoaresult == NULL) { + errno = ENOMEM; + goto done; + } + if (expt == 9999) + expt = INT_MAX; + } +fp_common: + if (signflag) + sign = '-'; + if (expt == INT_MAX) { /* inf or nan */ + if (*cp == 'N') + cp = (ch >= 'a') ? "nan" : "NAN"; + else + cp = (ch >= 'a') ? "inf" : "INF"; + size = 3; + flags &= ~ZEROPAD; + break; + } + flags |= FPT; + ndig = dtoaend - cp; + if (ch == 'g' || ch == 'G') { + if (expt > -4 && expt <= prec) { + /* Make %[gG] smell like %[fF] */ + expchar = '\0'; + if (flags & ALT) + prec -= expt; + else + prec = ndig - expt; + if (prec < 0) + prec = 0; + } else { + /* + * Make %[gG] smell like %[eE], but + * trim trailing zeroes if no # flag. + */ + if (!(flags & ALT)) + prec = ndig; + } + } + if (expchar) { + expsize = exponent(expstr, expt - 1, expchar); + size = expsize + prec; + if (prec > 1 || flags & ALT) + ++size; + } else { + /* space for digits before decimal point */ + if (expt > 0) + size = expt; + else /* "0" */ + size = 1; + /* space for decimal pt and following digits */ + if (prec || flags & ALT) + size += prec + 1; + lead = expt; + } + break; +#endif /* FLOATING_POINT */ +#ifndef NO_PRINTF_PERCENT_N case 'n': if (flags & LLONGINT) - *va_arg(ap, long long *) = ret; + *GETARG(long long *) = ret; else if (flags & LONGINT) - *va_arg(ap, long *) = ret; + *GETARG(long *) = ret; else if (flags & SHORTINT) - *va_arg(ap, short *) = ret; + *GETARG(short *) = ret; + else if (flags & CHARINT) + *GETARG(signed char *) = ret; + else if (flags & PTRINT) + *GETARG(ptrdiff_t *) = ret; + else if (flags & SIZEINT) + *GETARG(ssize_t *) = ret; + else if (flags & MAXINT) + *GETARG(intmax_t *) = ret; else - *va_arg(ap, int *) = ret; + *GETARG(int *) = ret; continue; /* no output */ +#endif /* NO_PRINTF_PERCENT_N */ case 'O': flags |= LONGINT; /*FALLTHROUGH*/ case 'o': - if (flags & LLONGINT) - ullval = va_arg(ap, unsigned long long); - else - ulval = UARG(); - base = 8; + _umax = UARG(); + base = OCT; goto nosign; case 'p': /* @@ -465,14 +832,32 @@ * defined manner.'' * -- ANSI X3J11 */ - ulval = (unsigned long)va_arg(ap, void *); - base = 16; - xdigs = "0123456789abcdef"; - flags = (flags & ~LLONGINT) | HEXPREFIX; - ch = 'x'; + /* NOSTRICT */ + _umax = (u_long)GETARG(void *); + base = HEX; + xdigs = xdigs_lower; + ox[1] = 'x'; goto nosign; case 's': - if ((cp = va_arg(ap, char *)) == NULL) +#ifdef PRINTF_WIDE_CHAR + if (flags & LONGINT) { + wchar_t *wcp; + + if (convbuf != NULL) { + free(convbuf); + convbuf = NULL; + } + if ((wcp = GETARG(wchar_t *)) == NULL) { + cp = "(null)"; + } else { + convbuf = __wcsconv(wcp, prec); + if (convbuf == NULL) + goto done; + cp = convbuf; + } + } else +#endif /* PRINTF_WIDE_CHAR */ + if ((cp = GETARG(char *)) == NULL) cp = "(null)"; if (prec >= 0) { /* @@ -482,41 +867,33 @@ */ char *p = memchr(cp, 0, prec); - if (p != NULL) { - size = p - cp; - if (size > prec) - size = prec; - } else - size = prec; - } else - size = strlen(cp); + size = p ? (p - cp) : prec; + } else { + size_t len; + + if ((len = strlen(cp)) > INT_MAX) + goto overflow; + size = (int)len; + } sign = '\0'; break; case 'U': flags |= LONGINT; /*FALLTHROUGH*/ case 'u': - if (flags & LLONGINT) - ullval = va_arg(ap, unsigned long long); - else - ulval = UARG(); - base = 10; + _umax = UARG(); + base = DEC; goto nosign; case 'X': - xdigs = "0123456789ABCDEF"; + xdigs = xdigs_upper; goto hex; case 'x': - xdigs = "0123456789abcdef"; -hex: - if (flags & LLONGINT) - ullval = va_arg(ap, unsigned long long); - else - ulval = UARG(); - base = 16; + xdigs = xdigs_lower; +hex: _umax = UARG(); + base = HEX; /* leading 0x/X only if non-zero */ - if (flags & ALT && - (flags & LLONGINT ? ullval != 0 : ulval != 0)) - flags |= HEXPREFIX; + if (flags & ALT && _umax != 0) + ox[1] = ch; /* unsigned conversions */ nosign: sign = '\0'; @@ -534,16 +911,49 @@ * -- ANSI X3J11 */ cp = buf + BUF; - if (flags & LLONGINT) { - if (ullval != 0 || prec != 0) - cp = __ulltoa(ullval, cp, base, - flags & ALT, xdigs); - } else { - if (ulval != 0 || prec != 0) - cp = __ultoa(ulval, cp, base, - flags & ALT, xdigs); + if (_umax != 0 || prec != 0) { + /* + * Unsigned mod is hard, and unsigned mod + * by a constant is easier than that by + * a variable; hence this switch. + */ + switch (base) { + case OCT: + do { + *--cp = to_char(_umax & 7); + _umax >>= 3; + } while (_umax); + /* handle octal leading 0 */ + if (flags & ALT && *cp != '0') + *--cp = '0'; + break; + + case DEC: + /* many numbers are 1 digit */ + while (_umax >= 10) { + *--cp = to_char(_umax % 10); + _umax /= 10; + } + *--cp = to_char(_umax); + break; + + case HEX: + do { + *--cp = xdigs[_umax & 15]; + _umax >>= 4; + } while (_umax); + break; + + default: + cp = "bug in vfprintf: bad base"; + size = strlen(cp); + goto skipsize; + } } size = buf + BUF - cp; + if (size > BUF) /* should never happen */ + abort(); + skipsize: break; default: /* "%?" prints ?, unless ? is NUL */ if (ch == '\0') @@ -563,30 +973,28 @@ * first be prefixed by any sign or other prefix; otherwise, * it should be blank padded before the prefix is emitted. * After any left-hand padding and prefixing, emit zeroes - * required by a decimal [diouxX] precision, then print the + * required by a decimal %[diouxX] precision, then print the * string proper, then emit zeroes required by any leftover * floating precision; finally, if LADJUST, pad with blanks. * * Compute actual size, so we know how much to pad. - * fieldsz excludes decimal prec; realsz includes it. + * size excludes decimal prec; realsz includes it. */ - fieldsz = size; + realsz = dprec > size ? dprec : size; if (sign) - fieldsz++; - else if (flags & HEXPREFIX) - fieldsz += 2; - realsz = dprec > fieldsz ? dprec : fieldsz; + realsz++; + if (ox[1]) + realsz+= 2; /* right-adjusting blank padding */ if ((flags & (LADJUST|ZEROPAD)) == 0) PAD(width - realsz, blanks); /* prefix */ - if (sign) { + if (sign) PRINT(&sign, 1); - } else if (flags & HEXPREFIX) { + if (ox[1]) { /* ox[1] is either x, X, or \0 */ ox[0] = '0'; - ox[1] = ch; PRINT(ox, 2); } @@ -595,25 +1003,531 @@ PAD(width - realsz, zeroes); /* leading zeroes from decimal precision */ - PAD(dprec - fieldsz, zeroes); + PAD(dprec - size, zeroes); /* the string or number proper */ +#ifdef FLOATING_POINT + if ((flags & FPT) == 0) { + PRINT(cp, size); + } else { /* glue together f_p fragments */ +#ifdef HAVE_NL_LANGINFO + if (decimal_point == NULL) + decimal_point = nl_langinfo(RADIXCHAR); +#endif + if (!expchar) { /* %[fF] or sufficiently short %[gG] */ + if (expt <= 0) { + PRINT(zeroes, 1); + if (prec || flags & ALT) + PRINT(decimal_point, 1); + PAD(-expt, zeroes); + /* already handled initial 0's */ + prec += expt; + } else { + PRINTANDPAD(cp, dtoaend, lead, zeroes); + cp += lead; + if (prec || flags & ALT) + PRINT(decimal_point, 1); + } + PRINTANDPAD(cp, dtoaend, prec, zeroes); + } else { /* %[eE] or sufficiently long %[gG] */ + if (prec > 1 || flags & ALT) { + buf[0] = *cp++; + buf[1] = *decimal_point; + PRINT(buf, 2); + PRINT(cp, ndig-1); + PAD(prec - ndig, zeroes); + } else { /* XeYYY */ + PRINT(cp, 1); + } + PRINT(expstr, expsize); + } + } +#else PRINT(cp, size); - +#endif /* left-adjusting padding (always blank) */ if (flags & LADJUST) PAD(width - realsz, blanks); /* finally, adjust ret */ - ret += width > realsz ? width : realsz; + if (width < realsz) + width = realsz; + if (width > INT_MAX - ret) + goto overflow; + ret += width; } done: + va_end(orgap); if (strsize) *str = '\0'; + goto finish; + +overflow: + errno = ENOMEM; + ret = -1; + +finish: +#ifdef PRINTF_WIDE_CHAR + if (convbuf) + free(convbuf); +#endif +#ifdef FLOATING_POINT + if (dtoaresult) + __freedtoa(dtoaresult); +#endif + if (argtable != NULL && argtable != statargtable) { + mmap_free(argtable, argtablesiz); + argtable = NULL; + } return ret; - /* NOTREACHED */ } +/* + * Type ids for argument type table. + */ +#define T_UNUSED 0 +#define T_SHORT 1 +#define T_U_SHORT 2 +#define TP_SHORT 3 +#define T_INT 4 +#define T_U_INT 5 +#define TP_INT 6 +#define T_LONG 7 +#define T_U_LONG 8 +#define TP_LONG 9 +#define T_LLONG 10 +#define T_U_LLONG 11 +#define TP_LLONG 12 +#define T_DOUBLE 13 +#define T_LONG_DOUBLE 14 +#define TP_CHAR 15 +#define TP_VOID 16 +#define T_PTRINT 17 +#define TP_PTRINT 18 +#define T_SIZEINT 19 +#define T_SSIZEINT 20 +#define TP_SSIZEINT 21 +#define T_MAXINT 22 +#define T_MAXUINT 23 +#define TP_MAXINT 24 +#define T_CHAR 25 +#define T_U_CHAR 26 +#define T_WINT 27 +#define TP_WCHAR 28 + +/* + * Find all arguments when a positional parameter is encountered. Returns a + * table, indexed by argument number, of pointers to each arguments. The + * initial argument table should be an array of STATIC_ARG_TBL_SIZE entries. + * It will be replaced with a mmap-ed one if it overflows (malloc cannot be + * used since we are attempting to make snprintf thread safe, and alloca is + * problematic since we have nested functions..) + */ +static int +__find_arguments(const char *fmt0, va_list ap, union arg **argtable, + size_t *argtablesiz) +{ + char *fmt; /* format string */ + int ch; /* character from fmt */ + int n, n2; /* handy integer (short term usage) */ + char *cp; /* handy char pointer (short term usage) */ + int flags; /* flags as above */ + unsigned char *typetable; /* table of types */ + unsigned char stattypetable[STATIC_ARG_TBL_SIZE]; + int tablesize; /* current size of type table */ + int tablemax; /* largest used index in table */ + int nextarg; /* 1-based argument index */ + int ret = 0; /* return value */ + + /* + * Add an argument type to the table, expanding if necessary. + */ +#define ADDTYPE(type) \ + ((nextarg >= tablesize) ? \ + __grow_type_table(&typetable, &tablesize) : 0, \ + (nextarg > tablemax) ? tablemax = nextarg : 0, \ + typetable[nextarg++] = type) + +#define ADDSARG() \ + ((flags&MAXINT) ? ADDTYPE(T_MAXINT) : \ + ((flags&PTRINT) ? ADDTYPE(T_PTRINT) : \ + ((flags&SIZEINT) ? ADDTYPE(T_SSIZEINT) : \ + ((flags&LLONGINT) ? ADDTYPE(T_LLONG) : \ + ((flags&LONGINT) ? ADDTYPE(T_LONG) : \ + ((flags&SHORTINT) ? ADDTYPE(T_SHORT) : \ + ((flags&CHARINT) ? ADDTYPE(T_CHAR) : ADDTYPE(T_INT)))))))) + +#define ADDUARG() \ + ((flags&MAXINT) ? ADDTYPE(T_MAXUINT) : \ + ((flags&PTRINT) ? ADDTYPE(T_PTRINT) : \ + ((flags&SIZEINT) ? ADDTYPE(T_SIZEINT) : \ + ((flags&LLONGINT) ? ADDTYPE(T_U_LLONG) : \ + ((flags&LONGINT) ? ADDTYPE(T_U_LONG) : \ + ((flags&SHORTINT) ? ADDTYPE(T_U_SHORT) : \ + ((flags&CHARINT) ? ADDTYPE(T_U_CHAR) : ADDTYPE(T_U_INT)))))))) + + /* + * Add * arguments to the type array. + */ +#define ADDASTER() \ + n2 = 0; \ + cp = fmt; \ + while (is_digit(*cp)) { \ + APPEND_DIGIT(n2, *cp); \ + cp++; \ + } \ + if (*cp == '$') { \ + int hold = nextarg; \ + nextarg = n2; \ + ADDTYPE(T_INT); \ + nextarg = hold; \ + fmt = ++cp; \ + } else { \ + ADDTYPE(T_INT); \ + } + fmt = (char *)fmt0; + typetable = stattypetable; + tablesize = STATIC_ARG_TBL_SIZE; + tablemax = 0; + nextarg = 1; + memset(typetable, T_UNUSED, STATIC_ARG_TBL_SIZE); + + /* + * Scan the format for conversions (`%' character). + */ + for (;;) { + for (cp = fmt; (ch = *fmt) != '\0' && ch != '%'; fmt++) + /* void */; + fmt++; /* skip over '%' */ + + flags = 0; + +rflag: ch = *fmt++; +reswitch: switch (ch) { + case ' ': + case '#': + case '\'': + goto rflag; + case '*': + ADDASTER(); + goto rflag; + case '-': + case '+': + goto rflag; + case '.': + if ((ch = *fmt++) == '*') { + ADDASTER(); + goto rflag; + } + while (is_digit(ch)) { + ch = *fmt++; + } + goto reswitch; + case '0': + goto rflag; + case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': + n = 0; + do { + APPEND_DIGIT(n ,ch); + ch = *fmt++; + } while (is_digit(ch)); + if (ch == '$') { + nextarg = n; + goto rflag; + } + goto reswitch; +#ifdef FLOATING_POINT + case 'L': + flags |= LONGDBL; + goto rflag; +#endif + case 'h': + if (*fmt == 'h') { + fmt++; + flags |= CHARINT; + } else { + flags |= SHORTINT; + } + goto rflag; + case 'j': + flags |= MAXINT; + goto rflag; + case 'l': + if (*fmt == 'l') { + fmt++; + flags |= LLONGINT; + } else { + flags |= LONGINT; + } + goto rflag; + case 'q': + flags |= LLONGINT; + goto rflag; + case 't': + flags |= PTRINT; + goto rflag; + case 'z': + flags |= SIZEINT; + goto rflag; + case 'c': +#ifdef PRINTF_WIDE_CHAR + if (flags & LONGINT) + ADDTYPE(T_WINT); + else +#endif + ADDTYPE(T_INT); + break; + case 'D': + flags |= LONGINT; + /*FALLTHROUGH*/ + case 'd': + case 'i': + ADDSARG(); + break; +#ifdef FLOATING_POINT + case 'a': + case 'A': + case 'e': + case 'E': + case 'f': + case 'F': + case 'g': + case 'G': + if (flags & LONGDBL) + ADDTYPE(T_LONG_DOUBLE); + else + ADDTYPE(T_DOUBLE); + break; +#endif /* FLOATING_POINT */ +#ifndef NO_PRINTF_PERCENT_N + case 'n': + if (flags & LLONGINT) + ADDTYPE(TP_LLONG); + else if (flags & LONGINT) + ADDTYPE(TP_LONG); + else if (flags & SHORTINT) + ADDTYPE(TP_SHORT); + else if (flags & PTRINT) + ADDTYPE(TP_PTRINT); + else if (flags & SIZEINT) + ADDTYPE(TP_SSIZEINT); + else if (flags & MAXINT) + ADDTYPE(TP_MAXINT); + else + ADDTYPE(TP_INT); + continue; /* no output */ +#endif /* NO_PRINTF_PERCENT_N */ + case 'O': + flags |= LONGINT; + /*FALLTHROUGH*/ + case 'o': + ADDUARG(); + break; + case 'p': + ADDTYPE(TP_VOID); + break; + case 's': +#ifdef PRINTF_WIDE_CHAR + if (flags & LONGINT) + ADDTYPE(TP_WCHAR); + else +#endif + ADDTYPE(TP_CHAR); + break; + case 'U': + flags |= LONGINT; + /*FALLTHROUGH*/ + case 'u': + case 'X': + case 'x': + ADDUARG(); + break; + default: /* "%?" prints ?, unless ? is NUL */ + if (ch == '\0') + goto done; + break; + } + } +done: + /* + * Build the argument table. + */ + if (tablemax >= STATIC_ARG_TBL_SIZE) { + *argtablesiz = sizeof(union arg) * (tablemax + 1); + *argtable = mmap_alloc(*argtablesiz); + if (*argtable == NULL) + return -1; + } + + for (n = 1; n <= tablemax; n++) { + switch (typetable[n]) { + case T_UNUSED: + case T_CHAR: + case T_U_CHAR: + case T_SHORT: + case T_U_SHORT: + case T_INT: + (*argtable)[n].intarg = va_arg(ap, int); + break; + case TP_SHORT: + (*argtable)[n].pshortarg = va_arg(ap, short *); + break; + case T_U_INT: + (*argtable)[n].uintarg = va_arg(ap, unsigned int); + break; + case TP_INT: + (*argtable)[n].pintarg = va_arg(ap, int *); + break; + case T_LONG: + (*argtable)[n].longarg = va_arg(ap, long); + break; + case T_U_LONG: + (*argtable)[n].ulongarg = va_arg(ap, unsigned long); + break; + case TP_LONG: + (*argtable)[n].plongarg = va_arg(ap, long *); + break; + case T_LLONG: + (*argtable)[n].longlongarg = va_arg(ap, long long); + break; + case T_U_LLONG: + (*argtable)[n].ulonglongarg = va_arg(ap, unsigned long long); + break; + case TP_LLONG: + (*argtable)[n].plonglongarg = va_arg(ap, long long *); + break; +#ifdef FLOATING_POINT + case T_DOUBLE: + (*argtable)[n].doublearg = va_arg(ap, double); + break; + case T_LONG_DOUBLE: + (*argtable)[n].longdoublearg = va_arg(ap, long double); + break; +#endif + case TP_CHAR: + (*argtable)[n].pchararg = va_arg(ap, char *); + break; + case TP_VOID: + (*argtable)[n].pvoidarg = va_arg(ap, void *); + break; + case T_PTRINT: + (*argtable)[n].ptrdiffarg = va_arg(ap, ptrdiff_t); + break; + case TP_PTRINT: + (*argtable)[n].pptrdiffarg = va_arg(ap, ptrdiff_t *); + break; + case T_SIZEINT: + (*argtable)[n].sizearg = va_arg(ap, size_t); + break; + case T_SSIZEINT: + (*argtable)[n].ssizearg = va_arg(ap, ssize_t); + break; + case TP_SSIZEINT: + (*argtable)[n].pssizearg = va_arg(ap, ssize_t *); + break; + case T_MAXINT: + (*argtable)[n].intmaxarg = va_arg(ap, intmax_t); + break; + case T_MAXUINT: + (*argtable)[n].uintmaxarg = va_arg(ap, uintmax_t); + break; + case TP_MAXINT: + (*argtable)[n].pintmaxarg = va_arg(ap, intmax_t *); + break; +#ifdef PRINTF_WIDE_CHAR + case T_WINT: + (*argtable)[n].wintarg = va_arg(ap, wint_t); + break; + case TP_WCHAR: + (*argtable)[n].pwchararg = va_arg(ap, wchar_t *); + break; +#endif + } + } + goto finish; + +overflow: + errno = ENOMEM; + ret = -1; + +finish: + if (typetable != NULL && typetable != stattypetable) { + mmap_free(typetable, *argtablesiz); + typetable = NULL; + } + return ret; +} + +/* + * Increase the size of the type table. + */ +static int +__grow_type_table(unsigned char **typetable, int *tablesize) +{ + unsigned char *oldtable = *typetable; + int newsize = *tablesize * 2; + + if (newsize < sysconf(_SC_PAGESIZE)) + newsize = sysconf(_SC_PAGESIZE); + + if (*tablesize == STATIC_ARG_TBL_SIZE) { + *typetable = mmap_alloc(newsize); + if (*typetable == NULL) + return -1; + memcpy(*typetable, oldtable, *tablesize); + } else { + unsigned char *new = mmap_alloc(newsize); + if (new == NULL) + return -1; + memmove(new, *typetable, *tablesize); + mmap_free(*typetable, *tablesize); + *typetable = new; + } + memset(*typetable + *tablesize, T_UNUSED, (newsize - *tablesize)); + + *tablesize = newsize; + return 0; +} + + +#ifdef FLOATING_POINT +static int +exponent(char *p0, int exp, int fmtch) +{ + char *p, *t; + char expbuf[MAXEXPDIG]; + + p = p0; + *p++ = fmtch; + if (exp < 0) { + exp = -exp; + *p++ = '-'; + } else + *p++ = '+'; + t = expbuf + MAXEXPDIG; + if (exp > 9) { + do { + *--t = to_char(exp % 10); + } while ((exp /= 10) > 9); + *--t = to_char(exp); + for (; t < expbuf + MAXEXPDIG; *p++ = *t++) + /* nothing */; + } else { + /* + * Exponents for decimal floating point conversions + * (%[eEgG]) must be at least two characters long, + * whereas exponents for hexadecimal conversions can + * be only one character long. + */ + if (fmtch == 'e' || fmtch == 'E') + *p++ = '0'; + *p++ = to_char(exp); + } + return p - p0; +} +#endif /* FLOATING_POINT */ + #if !defined(HAVE_VSNPRINTF) || defined(PREFER_PORTABLE_SNPRINTF) int sudo_vsnprintf(char *str, size_t n, const char *fmt, va_list ap) @@ -641,8 +1555,12 @@ int sudo_vasprintf(char **str, const char *fmt, va_list ap) { + int ret; - return xxxprintf(str, 0, 1, fmt, ap); + ret = xxxprintf(str, 0, 1, fmt, ap); + if (ret == -1) + *str = NULL; + return ret; } #endif /* !HAVE_VASPRINTF || PREFER_PORTABLE_SNPRINTF */ @@ -656,6 +1574,8 @@ va_start(ap, fmt); ret = xxxprintf(str, 0, 1, fmt, ap); va_end(ap); + if (ret == -1) + *str = NULL; return ret; } #endif /* !HAVE_ASPRINTF || PREFER_PORTABLE_SNPRINTF */ diff -Nru sudo-1.8.12/lib/util/strlcat.c sudo-1.8.16/lib/util/strlcat.c --- sudo-1.8.12/lib/util/strlcat.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/util/strlcat.c 2015-10-31 23:34:59.000000000 +0000 @@ -1,4 +1,4 @@ -/* $OpenBSD: strlcat.c,v 1.8 2001/05/13 15:40:15 deraadt Exp $ */ +/* $OpenBSD: strlcat.c,v 1.15 2015/03/02 21:41:08 millert Exp $ */ /* * Copyright (c) 1998, 2003-2005, 2010-2011, 2013-2015 @@ -31,7 +31,7 @@ * full size of dst, not space left). At most dsize-1 characters * will be copied. Always NUL terminates (unless dsize <= strlen(dst)). * Returns strlen(src) + MIN(dsize, strlen(initial dst)). - * If retval >= siz, truncation occurred. + * If retval >= dsize, truncation occurred. */ size_t sudo_strlcat(char *dst, const char *src, size_t dsize) diff -Nru sudo-1.8.12/lib/util/strlcpy.c sudo-1.8.16/lib/util/strlcpy.c --- sudo-1.8.12/lib/util/strlcpy.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/util/strlcpy.c 2015-10-31 23:34:59.000000000 +0000 @@ -1,4 +1,4 @@ -/* $OpenBSD: strlcpy.c,v 1.5 2001/05/13 15:40:16 deraadt Exp $ */ +/* $OpenBSD: strlcpy.c,v 1.12 2015/01/15 03:54:12 millert Exp $ */ /* * Copyright (c) 1998, 2003-2005, 2010-2011, 2013-2015 diff -Nru sudo-1.8.12/lib/util/strndup.c sudo-1.8.16/lib/util/strndup.c --- sudo-1.8.12/lib/util/strndup.c 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.16/lib/util/strndup.c 2015-10-31 23:34:59.000000000 +0000 @@ -0,0 +1,51 @@ +/* $OpenBSD: strndup.c,v 1.1 2010/05/18 22:24:55 tedu Exp $ */ + +/* + * Copyright (c) 2010 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 + +#ifndef HAVE_STRNDUP + +#include + +#include +#ifdef HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ + +#include "sudo_compat.h" + +char * +sudo_strndup(const char *str, size_t maxlen) +{ + char *copy; + size_t len; + + len = strnlen(str, maxlen); + copy = malloc(len + 1); + if (copy != NULL) { + (void)memcpy(copy, str, len); + copy[len] = '\0'; + } + + return copy; +} + +#endif /* HAVE_STRNDUP */ diff -Nru sudo-1.8.12/lib/util/strnlen.c sudo-1.8.16/lib/util/strnlen.c --- sudo-1.8.12/lib/util/strnlen.c 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.16/lib/util/strnlen.c 2015-10-31 23:34:59.000000000 +0000 @@ -0,0 +1,38 @@ +/* $OpenBSD: strnlen.c,v 1.5 2014/06/10 04:17:37 deraadt Exp $ */ + +/* + * Copyright (c) 2010 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 + +#ifndef HAVE_STRNLEN + +#include + +#include "sudo_compat.h" + +size_t +sudo_strnlen(const char *str, size_t maxlen) +{ + const char *cp; + + for (cp = str; maxlen != 0 && *cp != '\0'; cp++, maxlen--) + ; + + return (size_t)(cp - str); +} + +#endif /* HAVE_STRNLEN */ diff -Nru sudo-1.8.12/lib/util/strsignal.c sudo-1.8.16/lib/util/strsignal.c --- sudo-1.8.12/lib/util/strsignal.c 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/lib/util/strsignal.c 2015-10-31 23:35:24.000000000 +0000 @@ -32,8 +32,6 @@ # define sudo_sys_siglist sys_siglist #elif defined(HAVE_DECL__SYS_SIGLIST) && HAVE_DECL__SYS_SIGLIST == 1 # define sudo_sys_siglist _sys_siglist -#elif defined(HAVE_DECL___SYS_SIGLIST) && HAVE_DECL___SYS_SIGLIST == 1 -# define sudo_sys_siglist __sys_siglist #else extern const char *const sudo_sys_siglist[NSIG]; #endif diff -Nru sudo-1.8.12/lib/util/strsplit.c sudo-1.8.16/lib/util/strsplit.c --- sudo-1.8.12/lib/util/strsplit.c 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.16/lib/util/strsplit.c 2015-10-31 23:34:59.000000000 +0000 @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2015 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 "sudo_compat.h" +#include "sudo_debug.h" +#include "sudo_util.h" + +/* + * Like strtok_r but non-destructive and works w/o a NUL terminator. + * TODO: Optimize by storing current char in a variable ch + */ +const char * +sudo_strsplit_v1(const char *str, const char *endstr, const char *sep, const char **last) +{ + const char *cp, *s; + debug_decl(sudo_strsplit, SUDO_DEBUG_UTIL) + + /* If no str specified, use last ptr (if any). */ + if (str == NULL) + str = *last; + + /* Skip leading separator characters. */ + while (str < endstr) { + for (s = sep; *s != '\0'; s++) { + if (*str == *s) { + str++; + break; + } + } + if (*s == '\0') + break; + } + + /* Empty string? */ + if (str >= endstr) { + *last = endstr; + debug_return_ptr(NULL); + } + + /* Scan str until we hit a char from sep. */ + for (cp = str; cp < endstr; cp++) { + for (s = sep; *s != '\0'; s++) { + if (*cp == *s) + break; + } + if (*s != '\0') + break; + } + *last = cp; + debug_return_const_ptr(str); +} diff -Nru sudo-1.8.12/lib/util/strtobool.c sudo-1.8.16/lib/util/strtobool.c --- sudo-1.8.12/lib/util/strtobool.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/util/strtobool.c 2016-03-17 16:13:10.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2015 Todd C. Miller + * Copyright (c) 2010-2016 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,18 +19,8 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H @@ -80,5 +70,8 @@ debug_return_int(0); break; } + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "invalid boolean value \"%s\"", str); + debug_return_int(-1); } diff -Nru sudo-1.8.12/lib/util/strtoid.c sudo-1.8.16/lib/util/strtoid.c --- sudo-1.8.12/lib/util/strtoid.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/util/strtoid.c 2015-10-31 23:34:59.000000000 +0000 @@ -19,14 +19,7 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #if defined(HAVE_STDINT_H) # include #elif defined(HAVE_INTTYPES_H) diff -Nru sudo-1.8.12/lib/util/strtomode.c sudo-1.8.16/lib/util/strtomode.c --- sudo-1.8.12/lib/util/strtomode.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/util/strtomode.c 2015-10-31 23:34:59.000000000 +0000 @@ -19,14 +19,7 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #include #define DEFAULT_TEXT_DOMAIN "sudo" diff -Nru sudo-1.8.12/lib/util/strtonum.c sudo-1.8.16/lib/util/strtonum.c --- sudo-1.8.12/lib/util/strtonum.c 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/lib/util/strtonum.c 2015-10-31 23:34:59.000000000 +0000 @@ -22,14 +22,7 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ diff -Nru sudo-1.8.12/lib/util/sudo_conf.c sudo-1.8.16/lib/util/sudo_conf.c --- sudo-1.8.12/lib/util/sudo_conf.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/util/sudo_conf.c 2016-03-17 16:13:10.000000000 +0000 @@ -19,14 +19,7 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STDBOOL_H # include #else @@ -38,9 +31,7 @@ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include #include @@ -51,7 +42,6 @@ #define SUDO_ERROR_WRAP 0 #include "sudo_compat.h" -#include "sudo_alloc.h" #include "sudo_fatal.h" #include "pathnames.h" #include "sudo_plugin.h" @@ -68,19 +58,19 @@ struct sudo_conf_table { const char *name; unsigned int namelen; - bool (*parser)(const char *entry, const char *conf_file, unsigned int lineno); + int (*parser)(const char *entry, const char *conf_file, unsigned int lineno); }; struct sudo_conf_path_table { const char *pname; unsigned int pnamelen; - const char *pval; + char **pval; }; -static bool parse_debug(const char *entry, const char *conf_file, unsigned int lineno); -static bool parse_path(const char *entry, const char *conf_file, unsigned int lineno); -static bool parse_plugin(const char *entry, const char *conf_file, unsigned int lineno); -static bool parse_variable(const char *entry, const char *conf_file, unsigned int lineno); +static int parse_debug(const char *entry, const char *conf_file, unsigned int lineno); +static int parse_path(const char *entry, const char *conf_file, unsigned int lineno); +static int parse_plugin(const char *entry, const char *conf_file, unsigned int lineno); +static int parse_variable(const char *entry, const char *conf_file, unsigned int lineno); static struct sudo_conf_table sudo_conf_table[] = { { "Debug", sizeof("Debug") - 1, parse_debug }, @@ -90,10 +80,10 @@ { NULL } }; -static bool set_var_disable_coredump(const char *entry, const char *conf_file, unsigned int); -static bool set_var_group_source(const char *entry, const char *conf_file, unsigned int); -static bool set_var_max_groups(const char *entry, const char *conf_file, unsigned int); -static bool set_var_probe_interfaces(const char *entry, const char *conf_file, unsigned int); +static int set_var_disable_coredump(const char *entry, const char *conf_file, unsigned int); +static int set_var_group_source(const char *entry, const char *conf_file, unsigned int); +static int set_var_max_groups(const char *entry, const char *conf_file, unsigned int); +static int set_var_probe_interfaces(const char *entry, const char *conf_file, unsigned int); static struct sudo_conf_table sudo_conf_var_table[] = { { "disable_coredump", sizeof("disable_coredump") - 1, set_var_disable_coredump }, @@ -103,7 +93,36 @@ { NULL } }; -/* XXX - it would be nice to make this local to sudo_conf_read */ +/* + * Using designated struct initializers would be clearer here but + * we want to avoid relying on C99 features for now. + */ +static struct sudo_conf_paths { + char *askpass; + char *sesh; + char *nodump; + char *noexec; + char *plugin_dir; +} sudo_conf_paths = { + _PATH_SUDO_ASKPASS, + _PATH_SUDO_SESH, +#ifdef _PATH_SUDO_NODUMP + _PATH_SUDO_NODUMP, +#else + NULL, +#endif +#ifdef _PATH_SUDO_NOEXEC + _PATH_SUDO_NOEXEC, +#else + NULL, +#endif +#ifdef _PATH_SUDO_PLUGIN_DIR + _PATH_SUDO_PLUGIN_DIR, +#else + NULL, +#endif +}; + static struct sudo_conf_data { bool disable_coredump; bool probe_interfaces; @@ -120,18 +139,10 @@ TAILQ_HEAD_INITIALIZER(sudo_conf_data.debugging), TAILQ_HEAD_INITIALIZER(sudo_conf_data.plugins), { -#define SUDO_CONF_ASKPASS_IDX 0 - { "askpass", sizeof("askpass") - 1, _PATH_SUDO_ASKPASS }, -#define SUDO_CONF_SESH_IDX 1 - { "sesh", sizeof("sesh") - 1, _PATH_SUDO_SESH }, -#ifdef _PATH_SUDO_NOEXEC -#define SUDO_CONF_NOEXEC_IDX 2 - { "noexec", sizeof("noexec") - 1, _PATH_SUDO_NOEXEC }, -#endif -#ifdef _PATH_SUDO_PLUGIN_DIR -#define SUDO_CONF_PLUGIN_IDX 3 - { "plugin", sizeof("plugin") - 1, _PATH_SUDO_PLUGIN_DIR }, -#endif + { "askpass", sizeof("askpass") - 1, &sudo_conf_paths.askpass }, + { "sesh", sizeof("sesh") - 1, &sudo_conf_paths.sesh }, + { "noexec", sizeof("noexec") - 1, &sudo_conf_paths.noexec }, + { "plugin_dir", sizeof("plugin_dir") - 1, &sudo_conf_paths.plugin_dir }, { NULL } } }; @@ -139,11 +150,11 @@ /* * "Set variable_name value" */ -static bool +static int parse_variable(const char *entry, const char *conf_file, unsigned int lineno) { struct sudo_conf_table *var; - bool rval; + int rval; debug_decl(parse_variable, SUDO_DEBUG_UTIL) for (var = sudo_conf_var_table; var->name != NULL; var++) { @@ -156,178 +167,218 @@ sudo_debug_printf(rval ? SUDO_DEBUG_INFO : SUDO_DEBUG_ERROR, "%s: %s:%u: Set %s %s", __func__, conf_file, lineno, var->name, entry); - debug_return_bool(rval); + debug_return_int(rval); } } sudo_debug_printf(SUDO_DEBUG_WARN, "%s: %s:%u: unknown setting %s", __func__, conf_file, lineno, entry); - debug_return_bool(false); + debug_return_int(false); } /* * "Path name /path/to/file" + * If path is missing it will be set to the NULL pointer. */ -static bool +static int parse_path(const char *entry, const char *conf_file, unsigned int lineno) { - const char *name, *path; + const char *entry_end = entry + strlen(entry); + const char *ep, *name, *path; struct sudo_conf_path_table *cur; + size_t namelen; debug_decl(parse_path, SUDO_DEBUG_UTIL) - /* Parse Path line */ - name = entry; - path = strpbrk(entry, " \t"); - if (path == NULL) - goto bad; - while (isblank((unsigned char)*path)) - path++; - if (*path != '/') + /* Parse name. */ + name = sudo_strsplit(entry, entry_end, " \t", &ep); + if (name == NULL) goto bad; + namelen = (size_t)(ep - name); + + /* Parse path (if present). */ + path = sudo_strsplit(NULL, entry_end, " \t", &ep); - /* Match supported paths, ignore the rest. */ + /* Match supported paths, ignoring unknown paths. */ for (cur = sudo_conf_data.path_table; cur->pname != NULL; cur++) { - if (strncasecmp(name, cur->pname, cur->pnamelen) == 0 && - isblank((unsigned char)name[cur->pnamelen])) { - cur->pval = sudo_estrdup(path); + if (namelen == cur->pnamelen && + strncasecmp(name, cur->pname, cur->pnamelen) == 0) { + char *pval = NULL; + if (path != NULL) { + if ((pval = strdup(path)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, + U_("unable to allocate memory")); + debug_return_int(-1); + } + } + *cur->pval = pval; sudo_debug_printf(SUDO_DEBUG_INFO, "%s: %s:%u: Path %s %s", - __func__, conf_file, lineno, cur->pname, cur->pval); - debug_return_bool(true); + __func__, conf_file, lineno, cur->pname, + pval ? pval : "(none)"); + debug_return_int(true); } } sudo_debug_printf(SUDO_DEBUG_WARN, "%s: %s:%u: unknown path %s", __func__, conf_file, lineno, entry); - debug_return_bool(false); + debug_return_int(false); bad: sudo_warnx(U_("invalid Path value `%s' in %s, line %u"), entry, conf_file, lineno); - debug_return_bool(false); + debug_return_int(false); } /* * "Debug program /path/to/log flags,..." */ -static bool -parse_debug(const char *progname, const char *conf_file, unsigned int lineno) +static int +parse_debug(const char *entry, const char *conf_file, unsigned int lineno) { struct sudo_conf_debug *debug_spec; - struct sudo_debug_file *debug_file; - const char *path, *flags, *cp = progname; + struct sudo_debug_file *debug_file = NULL; + const char *ep, *path, *progname, *flags; + const char *entry_end = entry + strlen(entry); size_t pathlen, prognamelen; debug_decl(parse_debug, SUDO_DEBUG_UTIL) /* Parse progname. */ - while (*cp != '\0' && !isblank((unsigned char)*cp)) - cp++; - if (*cp == '\0') - debug_return_bool(false); /* not enough fields */ - prognamelen = (size_t)(cp - progname); - do { - cp++; - } while (isblank((unsigned char)*cp)); - if (*cp == '\0') - debug_return_bool(false); /* not enough fields */ + progname = sudo_strsplit(entry, entry_end, " \t", &ep); + if (progname == NULL) + debug_return_int(false); /* not enough fields */ + prognamelen = (size_t)(ep - progname); /* Parse path. */ - path = cp; - while (*cp != '\0' && !isblank((unsigned char)*cp)) - cp++; - if (*cp == '\0') - debug_return_bool(false); /* not enough fields */ - pathlen = (size_t)(cp - path); - do { - cp++; - } while (isblank((unsigned char)*cp)); - if (*cp == '\0') - debug_return_bool(false); /* not enough fields */ + path = sudo_strsplit(NULL, entry_end, " \t", &ep); + if (path == NULL) + debug_return_int(false); /* not enough fields */ + pathlen = (size_t)(ep - path); /* Remainder is flags (freeform). */ - flags = cp; + flags = sudo_strsplit(NULL, entry_end, " \t", &ep); + if (flags == NULL) + debug_return_int(false); /* not enough fields */ /* If progname already exists, use it, else alloc a new one. */ TAILQ_FOREACH(debug_spec, &sudo_conf_data.debugging, entries) { if (strncmp(debug_spec->progname, progname, prognamelen) == 0 && - debug_spec->progname[prognamelen] == '\0' && - isblank((unsigned char)debug_spec->progname[prognamelen])) + debug_spec->progname[prognamelen] == '\0') break; } if (debug_spec == NULL) { - debug_spec = sudo_emalloc(sizeof(*debug_spec)); - debug_spec->progname = sudo_estrndup(progname, prognamelen); + debug_spec = malloc(sizeof(*debug_spec)); + if (debug_spec == NULL) + goto oom; + debug_spec->progname = strndup(progname, prognamelen); + if (debug_spec->progname == NULL) { + free(debug_spec); + debug_spec = NULL; + goto oom; + } TAILQ_INIT(&debug_spec->debug_files); TAILQ_INSERT_TAIL(&sudo_conf_data.debugging, debug_spec, entries); } - debug_file = sudo_emalloc(sizeof(*debug_file)); - debug_file->debug_file = sudo_estrndup(path, pathlen); - debug_file->debug_flags = sudo_estrdup(flags); + debug_file = calloc(1, sizeof(*debug_file)); + if (debug_file == NULL) + goto oom; + debug_file->debug_file = strndup(path, pathlen); + if (debug_file->debug_file == NULL) + goto oom; + debug_file->debug_flags = strdup(flags); + if (debug_file->debug_flags == NULL) + goto oom; TAILQ_INSERT_TAIL(&debug_spec->debug_files, debug_file, entries); - debug_return_bool(true); + debug_return_int(true); +oom: + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + if (debug_file != NULL) { + free(debug_file->debug_file); + free(debug_file->debug_flags); + free(debug_file); + } + debug_return_int(-1); } /* * "Plugin symbol /path/to/log args..." */ -static bool -parse_plugin(const char *cp, const char *conf_file, unsigned int lineno) +static int +parse_plugin(const char *entry, const char *conf_file, unsigned int lineno) { - struct plugin_info *info; + struct plugin_info *info = NULL; const char *ep, *path, *symbol; + const char *entry_end = entry + strlen(entry); char **options = NULL; size_t pathlen, symlen; - unsigned int nopts; + unsigned int nopts = 0; debug_decl(parse_plugin, SUDO_DEBUG_UTIL) /* Parse symbol. */ - if (*cp == '\0') - debug_return_bool(false); /* not enough fields */ - symbol = cp; - while (*cp != '\0' && !isblank((unsigned char)*cp)) - cp++; - symlen = (size_t)(cp - symbol); - while (isblank((unsigned char)*cp)) - cp++; + symbol = sudo_strsplit(entry, entry_end, " \t", &ep); + if (symbol == NULL) + debug_return_int(false); /* not enough fields */ + symlen = (size_t)(ep - symbol); /* Parse path. */ - if (*cp == '\0') - debug_return_bool(false); /* not enough fields */ - path = cp; - while (*cp != '\0' && !isblank((unsigned char)*cp)) - cp++; - pathlen = (size_t)(cp - path); - while (isblank((unsigned char)*cp)) - cp++; + path = sudo_strsplit(NULL, entry_end, " \t", &ep); + if (path == NULL) + debug_return_int(false); /* not enough fields */ + pathlen = (size_t)(ep - path); /* Split options into an array if present. */ - /* XXX - consider as separate function */ - if (*cp != '\0') { + while (isblank((unsigned char)*ep)) + ep++; + if (*ep != '\0') { /* Count number of options and allocate array. */ - for (ep = cp, nopts = 1; (ep = strpbrk(ep, " \t")) != NULL; nopts++) { - while (isblank((unsigned char)*ep)) - ep++; + const char *cp, *opt = ep; + + /* Count and allocate options array. */ + for (nopts = 0, cp = sudo_strsplit(opt, entry_end, " \t", &ep); + cp != NULL; cp = sudo_strsplit(NULL, entry_end, " \t", &ep)) { + nopts++; } - options = sudo_emallocarray(nopts + 1, sizeof(*options)); - /* Fill in options array, there is at least one element. */ - for (nopts = 0; (ep = strpbrk(cp, " \t")) != NULL; ) { - options[nopts++] = sudo_estrndup(cp, (size_t)(ep - cp)); - while (isblank((unsigned char)*ep)) - ep++; - cp = ep; + options = reallocarray(NULL, nopts + 1, sizeof(*options)); + if (options == NULL) + goto oom; + + /* Fill in options array. */ + for (nopts = 0, cp = sudo_strsplit(opt, entry_end, " \t", &ep); + cp != NULL; cp = sudo_strsplit(NULL, entry_end, " \t", &ep)) { + options[nopts] = strndup(cp, (size_t)(ep - cp)); + if (options[nopts] == NULL) + goto oom; + nopts++; } - options[nopts++] = sudo_estrdup(cp); options[nopts] = NULL; } - info = sudo_emalloc(sizeof(*info)); - info->symbol_name = sudo_estrndup(symbol, symlen); - info->path = sudo_estrndup(path, pathlen); + info = calloc(sizeof(*info), 1); + if (info == NULL) + goto oom; + info->symbol_name = strndup(symbol, symlen); + if (info->symbol_name == NULL) + goto oom; + info->path = strndup(path, pathlen); + if (info->path == NULL) + goto oom; info->options = options; info->lineno = lineno; TAILQ_INSERT_TAIL(&sudo_conf_data.plugins, info, entries); - debug_return_bool(true); + debug_return_int(true); +oom: + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + if (options != NULL) { + while (nopts--) + free(options[nopts]); + free(options); + } + if (info != NULL) { + free(info->symbol_name); + free(info->path); + free(info); + } + debug_return_int(-1); } -static bool +static int set_var_disable_coredump(const char *strval, const char *conf_file, unsigned int lineno) { @@ -343,7 +394,7 @@ debug_return_bool(true); } -static bool +static int set_var_group_source(const char *strval, const char *conf_file, unsigned int lineno) { @@ -363,7 +414,7 @@ debug_return_bool(true); } -static bool +static int set_var_max_groups(const char *strval, const char *conf_file, unsigned int lineno) { @@ -380,7 +431,7 @@ debug_return_bool(true); } -static bool +static int set_var_probe_interfaces(const char *strval, const char *conf_file, unsigned int lineno) { @@ -399,20 +450,20 @@ const char * sudo_conf_askpass_path_v1(void) { - return sudo_conf_data.path_table[SUDO_CONF_ASKPASS_IDX].pval; + return sudo_conf_paths.askpass; } const char * sudo_conf_sesh_path_v1(void) { - return sudo_conf_data.path_table[SUDO_CONF_SESH_IDX].pval; + return sudo_conf_paths.sesh; } #ifdef _PATH_SUDO_NOEXEC const char * sudo_conf_noexec_path_v1(void) { - return sudo_conf_data.path_table[SUDO_CONF_NOEXEC_IDX].pval; + return sudo_conf_paths.noexec; } #endif @@ -420,7 +471,7 @@ const char * sudo_conf_plugin_dir_path_v1(void) { - return sudo_conf_data.path_table[SUDO_CONF_PLUGIN_IDX].pval; + return sudo_conf_paths.plugin_dir; } #endif @@ -499,17 +550,26 @@ /* * Reads in /etc/sudo.conf and populates sudo_conf_data. */ -void +int sudo_conf_read_v1(const char *conf_file, int conf_types) { struct stat sb; - FILE *fp; - char *line = NULL; - char *prev_locale = sudo_estrdup(setlocale(LC_ALL, NULL)); + FILE *fp = NULL; + int ret = false; + char *prev_locale, *line = NULL; unsigned int conf_lineno = 0; size_t linesize = 0; debug_decl(sudo_conf_read, SUDO_DEBUG_UTIL) + if ((prev_locale = setlocale(LC_ALL, NULL)) == NULL) { + sudo_warn("setlocale(LC_ALL, NULL)"); + debug_return_int(-1); + } + if ((prev_locale = strdup(prev_locale)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_int(-1); + } + /* Parse sudo.conf in the "C" locale. */ if (prev_locale[0] != 'C' || prev_locale[1] != '\0') setlocale(LC_ALL, "C"); @@ -564,7 +624,9 @@ cp += cur->namelen; while (isblank((unsigned char)*cp)) cp++; - cur->parser(cp, conf_file, conf_lineno); + ret = cur->parser(cp, conf_file, conf_lineno); + if (ret == -1) + goto done; } break; } @@ -575,13 +637,16 @@ conf_lineno, line); } } - fclose(fp); - free(line); + ret = true; done: + if (fp != NULL) + fclose(fp); + free(line); + /* Restore locale if needed. */ if (prev_locale[0] != 'C' || prev_locale[1] != '\0') setlocale(LC_ALL, prev_locale); - sudo_efree(prev_locale); - debug_return; + free(prev_locale); + debug_return_int(ret); } diff -Nru sudo-1.8.12/lib/util/sudo_debug.c sudo-1.8.16/lib/util/sudo_debug.c --- sudo-1.8.12/lib/util/sudo_debug.c 2015-02-01 02:02:45.000000000 +0000 +++ sudo-1.8.16/lib/util/sudo_debug.c 2016-03-17 16:13:10.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2015 Todd C. Miller + * Copyright (c) 2011-2016 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 @@ -20,28 +20,14 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ -#ifdef HAVE_STDBOOL_H -# include -#else -# include "compat/stdbool.h" -#endif +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include #include @@ -51,11 +37,10 @@ #include "sudo_gettext.h" /* must be included before sudo_compat.h */ #include "sudo_compat.h" -#include "sudo_alloc.h" #include "sudo_fatal.h" #include "sudo_plugin.h" -#include "sudo_conf.h" #include "sudo_debug.h" +#include "sudo_conf.h" #include "sudo_util.h" /* @@ -134,26 +119,49 @@ static int sudo_debug_active_instance = -1; /* + * Free the specified output structure. + */ +static void +sudo_debug_free_output(struct sudo_debug_output *output) +{ + free(output->filename); + free(output->settings); + if (output->fd != -1) + close(output->fd); + free(output); +} + +/* * Create a new output file for the specified debug instance. + * Returns NULL if the file cannot be opened or memory cannot be allocated. */ static struct sudo_debug_output * sudo_debug_new_output(struct sudo_debug_instance *instance, struct sudo_debug_file *debug_file) { - char *buf, *cp, *subsys, *pri; + char *buf, *cp, *last, *subsys, *pri; struct sudo_debug_output *output; - unsigned int i, j; + unsigned int j; + int i; /* Create new output for the instance. */ /* XXX - reuse fd for existing filename? */ - output = sudo_emalloc(sizeof(*output)); - output->settings = sudo_emallocarray(instance->max_subsystem + 1, sizeof(int)); - output->filename = sudo_estrdup(debug_file->debug_file); + output = calloc(1, sizeof(*output)); + if (output == NULL) + goto bad; + output->fd = -1; + output->settings = reallocarray(NULL, instance->max_subsystem + 1, + sizeof(int)); + if (output->settings == NULL) + goto bad; + output->filename = strdup(debug_file->debug_file); + if (output->filename == NULL) + goto bad; output->fd = -1; /* Init per-subsystems settings to -1 since 0 is a valid priority. */ - for (i = 0; i <= instance->max_subsystem; i++) - output->settings[i] = -1; + for (j = 0; j <= instance->max_subsystem; j++) + output->settings[j] = -1; /* Open debug file. */ output->fd = open(output->filename, O_WRONLY|O_APPEND, S_IRUSR|S_IWUSR); @@ -164,27 +172,32 @@ S_IRUSR|S_IWUSR); } if (output->fd == -1) - return NULL; + goto bad; ignore_result(fchown(output->fd, (uid_t)-1, 0)); } (void)fcntl(output->fd, F_SETFD, FD_CLOEXEC); if (sudo_debug_fds_size < output->fd) { /* Bump fds size to the next multiple of 4 * NBBY. */ - const int new_size = round_nfds(output->fd); - sudo_debug_fds = sudo_erecalloc(sudo_debug_fds, - sudo_debug_fds_size / NBBY, new_size / NBBY, sizeof(char)); - sudo_debug_fds_size = new_size; + const int old_size = sudo_debug_fds_size / NBBY; + const int new_size = round_nfds(output->fd + 1) / NBBY; + unsigned char *new_fds; + + new_fds = realloc(sudo_debug_fds, new_size); + if (new_fds == NULL) + goto bad; + memset(new_fds + old_size, 0, new_size - old_size); + sudo_debug_fds = new_fds; + sudo_debug_fds_size = new_size * NBBY; } sudo_setbit(sudo_debug_fds, output->fd); if (output->fd > sudo_debug_max_fd) sudo_debug_max_fd = output->fd; /* Parse Debug conf string. */ - if ((buf = strdup(debug_file->debug_flags)) == NULL) { - /* XXX - free output on error or make non-destructive */ - return NULL; - } - for ((cp = strtok(buf, ",")); cp != NULL; (cp = strtok(NULL, ","))) { + buf = strdup(debug_file->debug_flags); + if (buf == NULL) + goto bad; + for ((cp = strtok_r(buf, ",", &last)); cp != NULL; (cp = strtok_r(NULL, ",", &last))) { /* Should be in the form subsys@pri. */ subsys = cp; if ((pri = strchr(cp, '@')) == NULL) @@ -198,13 +211,15 @@ if (strcasecmp(subsys, "all") == 0) { const unsigned int idx = instance->subsystem_ids ? SUDO_DEBUG_SUBSYS(instance->subsystem_ids[j]) : j; - output->settings[idx] = i; + if (i > output->settings[idx]) + output->settings[idx] = i; continue; } if (strcasecmp(subsys, instance->subsystems[j]) == 0) { const unsigned int idx = instance->subsystem_ids ? SUDO_DEBUG_SUBSYS(instance->subsystem_ids[j]) : j; - output->settings[idx] = i; + if (i > output->settings[idx]) + output->settings[idx] = i; break; } } @@ -215,6 +230,11 @@ free(buf); return output; +bad: + sudo_warn_nodebug(NULL); + if (output != NULL) + sudo_debug_free_output(output); + return NULL; } /* @@ -234,6 +254,7 @@ struct sudo_debug_output *output; struct sudo_debug_file *debug_file; int idx, free_idx = -1; + debug_decl_func(sudo_debug_register); if (debug_files == NULL) return SUDO_DEBUG_INSTANCE_INITIALIZER; @@ -287,8 +308,12 @@ sudo_warnx_nodebug("%s: instance number mismatch: expected %d or %d, got %d", __func__, sudo_debug_last_instance + 1, free_idx, idx); return SUDO_DEBUG_INSTANCE_INITIALIZER; } - instance = sudo_emalloc(sizeof(*instance)); - instance->program = sudo_estrdup(program); + if ((instance = malloc(sizeof(*instance))) == NULL) + return SUDO_DEBUG_INSTANCE_INITIALIZER; + if ((instance->program = strdup(program)) == NULL) { + free(instance); + return SUDO_DEBUG_INSTANCE_INITIALIZER; + } instance->subsystems = subsystems; instance->subsystem_ids = ids; instance->max_subsystem = max_id; @@ -334,6 +359,7 @@ { struct sudo_debug_instance *instance; struct sudo_debug_output *output, *next; + debug_decl_func(sudo_debug_deregister); if (idx < 0 || idx > sudo_debug_last_instance) { sudo_warnx_nodebug("%s: invalid instance ID %d, max %d", @@ -352,12 +378,12 @@ sudo_debug_instances[idx] = NULL; SLIST_FOREACH_SAFE(output, &instance->outputs, entries, next) { close(output->fd); - sudo_efree(output->filename); - sudo_efree(output->settings); - sudo_efree(output); + free(output->filename); + free(output->settings); + free(output); } - sudo_efree(instance->program); - sudo_efree(instance); + free(instance->program); + free(instance); if (idx == sudo_debug_last_instance) sudo_debug_last_instance--; @@ -429,23 +455,24 @@ sudo_debug_exit_size_t_v1(const char *func, const char *file, int line, int subsys, size_t rval) { - /* XXX - should use %zu but our snprintf.c doesn't support it */ sudo_debug_printf2(NULL, NULL, 0, subsys | SUDO_DEBUG_TRACE, - "<- %s @ %s:%d := %lu", func, file, line, (unsigned long)rval); + "<- %s @ %s:%d := %zu", func, file, line, rval); +} + +void +sudo_debug_exit_ssize_t_v1(const char *func, const char *file, int line, + int subsys, ssize_t rval) +{ + sudo_debug_printf2(NULL, NULL, 0, subsys | SUDO_DEBUG_TRACE, + "<- %s @ %s:%d := %zd", func, file, line, rval); } -/* We use int, not bool, here for functions that return -1 on error. */ void sudo_debug_exit_bool_v1(const char *func, const char *file, int line, - int subsys, int rval) + int subsys, bool rval) { - if (rval == true || rval == false) { - sudo_debug_printf2(NULL, NULL, 0, subsys | SUDO_DEBUG_TRACE, - "<- %s @ %s:%d := %s", func, file, line, rval ? "true" : "false"); - } else { - sudo_debug_printf2(NULL, NULL, 0, subsys | SUDO_DEBUG_TRACE, - "<- %s @ %s:%d := %d", func, file, line, rval); - } + sudo_debug_printf2(NULL, NULL, 0, subsys | SUDO_DEBUG_TRACE, + "<- %s @ %s:%d := %s", func, file, line, rval ? "true" : "false"); } void @@ -561,6 +588,7 @@ char static_buf[1024], *buf = static_buf; struct sudo_debug_instance *instance; struct sudo_debug_output *output; + debug_decl_func(sudo_debug_vprintf2); if (sudo_debug_active_instance == -1) goto out; @@ -606,7 +634,7 @@ else sudo_debug_write2(output->fd, NULL, NULL, 0, buf, buflen, errcode); if (buf != static_buf) { - sudo_efree(buf); + free(buf); buf = static_buf; } } @@ -651,6 +679,7 @@ char * const *av; char *cp, static_buf[4096], *buf = static_buf; size_t plen; + debug_decl_func(sudo_debug_execve2); if (sudo_debug_active_instance == -1) goto out; @@ -741,7 +770,7 @@ sudo_debug_write(output->fd, buf, buflen, 0); if (buf != static_buf) { - sudo_efree(buf); + free(buf); buf = static_buf; } } diff -Nru sudo-1.8.12/lib/util/sudo_dso.c sudo-1.8.16/lib/util/sudo_dso.c --- sudo-1.8.12/lib/util/sudo_dso.c 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/lib/util/sudo_dso.c 2015-10-31 23:34:59.000000000 +0000 @@ -19,14 +19,7 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ diff -Nru sudo-1.8.12/lib/util/term.c sudo-1.8.16/lib/util/term.c --- sudo-1.8.12/lib/util/term.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/util/term.c 2015-10-31 23:35:24.000000000 +0000 @@ -18,18 +18,8 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H @@ -119,7 +109,7 @@ bool sudo_term_restore_v1(int fd, bool flush) { - debug_decl(term_restore, SUDO_DEBUG_UTIL) + debug_decl(sudo_term_restore, SUDO_DEBUG_UTIL) if (changed) { const int flags = flush ? (TCSASOFT|TCSAFLUSH) : (TCSASOFT|TCSADRAIN); @@ -137,9 +127,8 @@ bool sudo_term_noecho_v1(int fd) { - debug_decl(term_noecho, SUDO_DEBUG_UTIL) + debug_decl(sudo_term_noecho, SUDO_DEBUG_UTIL) -again: if (!changed && tcgetattr(fd, &oterm) != 0) debug_return_bool(false); (void) memcpy(&term, &oterm, sizeof(term)); @@ -147,15 +136,10 @@ #ifdef VSTATUS term.c_cc[VSTATUS] = _POSIX_VDISABLE; #endif - if (tcsetattr_nobg(fd, TCSADRAIN|TCSASOFT, &term) == 0) { + if (tcsetattr_nobg(fd, TCSASOFT|TCSADRAIN, &term) == 0) { changed = 1; debug_return_bool(true); } - if (got_sigttou) { - /* We were in the background, so oterm is probably bogus. */ - kill(getpid(), SIGTTOU); - goto again; - } debug_return_bool(false); } @@ -167,11 +151,10 @@ sudo_term_raw_v1(int fd, int isig) { struct termios term; - debug_decl(term_raw, SUDO_DEBUG_UTIL) + debug_decl(sudo_term_raw, SUDO_DEBUG_UTIL) -again: if (!changed && tcgetattr(fd, &oterm) != 0) - return 0; + debug_return_bool(false); (void) memcpy(&term, &oterm, sizeof(term)); /* Set terminal to raw mode */ term.c_cc[VMIN] = 1; @@ -181,15 +164,10 @@ CLR(term.c_lflag, ECHO | ICANON | ISIG | IEXTEN); if (isig) SET(term.c_lflag, ISIG); - if (tcsetattr_nobg(fd, TCSADRAIN|TCSASOFT, &term) == 0) { + if (tcsetattr_nobg(fd, TCSASOFT|TCSADRAIN, &term) == 0) { changed = 1; debug_return_bool(true); } - if (got_sigttou) { - /* We were in the background, so oterm is probably bogus. */ - kill(getpid(), SIGTTOU); - goto again; - } debug_return_bool(false); } @@ -200,11 +178,10 @@ bool sudo_term_cbreak_v1(int fd) { - debug_decl(term_cbreak, SUDO_DEBUG_UTIL) + debug_decl(sudo_term_cbreak, SUDO_DEBUG_UTIL) -again: if (!changed && tcgetattr(fd, &oterm) != 0) - return 0; + debug_return_bool(false); (void) memcpy(&term, &oterm, sizeof(term)); /* Set terminal to half-cooked mode */ term.c_cc[VMIN] = 1; @@ -216,17 +193,12 @@ #ifdef VSTATUS term.c_cc[VSTATUS] = _POSIX_VDISABLE; #endif - if (tcsetattr_nobg(fd, TCSADRAIN|TCSASOFT, &term) == 0) { + if (tcsetattr_nobg(fd, TCSASOFT|TCSADRAIN, &term) == 0) { sudo_term_erase = term.c_cc[VERASE]; sudo_term_kill = term.c_cc[VKILL]; changed = 1; debug_return_bool(true); } - if (got_sigttou) { - /* We were in the background, so oterm is probably bogus. */ - kill(getpid(), SIGTTOU); - goto again; - } debug_return_bool(false); } @@ -238,17 +210,11 @@ sudo_term_copy_v1(int src, int dst) { struct termios tt; - debug_decl(term_copy, SUDO_DEBUG_UTIL) + debug_decl(sudo_term_copy, SUDO_DEBUG_UTIL) -again: if (tcgetattr(src, &tt) != 0) debug_return_bool(false); - if (tcsetattr_nobg(dst, TCSANOW|TCSASOFT, &tt) == 0) + if (tcsetattr_nobg(dst, TCSASOFT|TCSAFLUSH, &tt) == 0) debug_return_bool(true); - if (got_sigttou) { - /* We were in the background, so oterm is probably bogus. */ - kill(getpid(), SIGTTOU); - goto again; - } debug_return_bool(false); } diff -Nru sudo-1.8.12/lib/util/ttysize.c sudo-1.8.16/lib/util/ttysize.c --- sudo-1.8.12/lib/util/ttysize.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/util/ttysize.c 2015-10-31 23:34:59.000000000 +0000 @@ -21,17 +21,8 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include +#include #include #include diff -Nru sudo-1.8.12/lib/util/util.exp.in sudo-1.8.16/lib/util/util.exp.in --- sudo-1.8.12/lib/util/util.exp.in 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/util/util.exp.in 2016-03-17 16:13:10.000000000 +0000 @@ -20,6 +20,7 @@ sudo_debug_exit_long_v1 sudo_debug_exit_ptr_v1 sudo_debug_exit_size_t_v1 +sudo_debug_exit_ssize_t_v1 sudo_debug_exit_str_v1 sudo_debug_exit_str_masked_v1 sudo_debug_fork_v1 @@ -37,15 +38,6 @@ sudo_dso_preload_table_v1 sudo_dso_strerror_v1 sudo_dso_unload_v1 -sudo_easprintf_v1 -sudo_ecalloc_v1 -sudo_emalloc_v1 -sudo_emallocarray_v1 -sudo_erealloc_v1 -sudo_ereallocarray_v1 -sudo_erecalloc_v1 -sudo_estrdup_v1 -sudo_estrndup_v1 sudo_ev_add_v1 sudo_ev_alloc_v1 sudo_ev_base_alloc_v1 @@ -59,24 +51,30 @@ sudo_ev_loopbreak_v1 sudo_ev_loopcontinue_v1 sudo_ev_loopexit_v1 -sudo_evasprintf_v1 sudo_fatal_callback_deregister_v1 sudo_fatal_callback_register_v1 sudo_fatal_nodebug_v1 sudo_fatalx_nodebug_v1 sudo_get_ttysize_v1 +sudo_gethostname_v1 +sudo_gettime_mono_v1 +sudo_gettime_real_v1 sudo_lbuf_append_quoted_v1 sudo_lbuf_append_v1 +sudo_lbuf_clearerr_v1 sudo_lbuf_destroy_v1 +sudo_lbuf_error_v1 sudo_lbuf_init_v1 sudo_lbuf_print_v1 sudo_lock_file_v1 +sudo_lock_region_v1 sudo_new_key_val_v1 sudo_parse_gids_v1 sudo_parseln_v1 sudo_secure_dir_v1 sudo_secure_file_v1 sudo_setgroups_v1 +sudo_strsplit_v1 sudo_strtobool_v1 sudo_strtoid_v1 sudo_strtomode_v1 @@ -93,4 +91,5 @@ sudo_vwarnx_nodebug_v1 sudo_warn_nodebug_v1 sudo_warn_set_conversation_v1 +sudo_warn_set_locale_func_v1 sudo_warnx_nodebug_v1 diff -Nru sudo-1.8.12/lib/util/utimens.c sudo-1.8.16/lib/util/utimens.c --- sudo-1.8.12/lib/util/utimens.c 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.16/lib/util/utimens.c 2015-10-31 23:35:24.000000000 +0000 @@ -0,0 +1,194 @@ +/* + * Copyright (c) 2015 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 + +#if !defined(HAVE_FUTIMENS) || !defined(HAVE_UTIMENSAT) + +#include +#include +#include +#include +#include +#ifdef TIME_WITH_SYS_TIME +# include +#endif +#if !defined(HAVE_UTIMES) || defined(HAVE_FUTIME) +# include +#endif + +#include "sudo_compat.h" +#include "sudo_util.h" + +#if !defined(HAVE_FUTIMES) && defined(HAVE_FUTIMESAT) +# define futimes(_f, _tv) futimesat(_f, NULL, _tv) +# define HAVE_FUTIMES +#endif + +#if defined(HAVE_ST_MTIM) +# ifdef HAVE_ST__TIM +# define ATIME_TO_TIMEVAL(_x, _y) TIMESPEC_TO_TIMEVAL((_x), &(_y)->st_atim.st__tim) +# define MTIME_TO_TIMEVAL(_x, _y) TIMESPEC_TO_TIMEVAL((_x), &(_y)->st_mtim.st__tim) +# else +# define ATIME_TO_TIMEVAL(_x, _y) TIMESPEC_TO_TIMEVAL((_x), &(_y)->st_atim) +# define MTIME_TO_TIMEVAL(_x, _y) TIMESPEC_TO_TIMEVAL((_x), &(_y)->st_mtim) +# endif +#elif defined(HAVE_ST_MTIMESPEC) +# define ATIME_TO_TIMEVAL(_x, _y) TIMESPEC_TO_TIMEVAL((_x), &(_y)->st_atimespec) +# define MTIME_TO_TIMEVAL(_x, _y) TIMESPEC_TO_TIMEVAL((_x), &(_y)->st_mtimespec) +#else +# define ATIME_TO_TIMEVAL(_x, _y) do { (_x)->tv_sec = (_y)->st_atime; (_x)->tv_usec = 0; } while (0) +# define MTIME_TO_TIMEVAL(_x, _y) do { (_x)->tv_sec = (_y)->st_mtime; (_x)->tv_usec = 0; } while (0) +#endif /* HAVE_ST_MTIM */ + +/* + * Convert the pair of timespec structs passed to futimens() / utimensat() + * to a pair of timeval structs, handling UTIME_OMIT and UTIME_NOW. + * Returns 0 on success and -1 on failure (setting errno). + */ +static int +utimens_ts_to_tv(int fd, const char *file, const struct timespec *ts, + struct timeval *tv) +{ + TIMESPEC_TO_TIMEVAL(&tv[0], &ts[0]); + TIMESPEC_TO_TIMEVAL(&tv[1], &ts[1]); + if (ts[0].tv_nsec == UTIME_OMIT || ts[1].tv_nsec == UTIME_OMIT) { + struct stat sb; + + if (fd != -1) { + /* For futimens() */ + if (fstat(fd, &sb) == -1) + return -1; + } else { + /* For utimensat() */ + if (stat(file, &sb) == -1) + return -1; + } + if (ts[0].tv_nsec == UTIME_OMIT) + ATIME_TO_TIMEVAL(&tv[0], &sb); + if (ts[1].tv_nsec == UTIME_OMIT) + MTIME_TO_TIMEVAL(&tv[1], &sb); + } + if (ts[0].tv_nsec == UTIME_NOW || ts[1].tv_nsec == UTIME_NOW) { + struct timeval now; + + if (gettimeofday(&now, NULL) == -1) + return -1; + if (ts[0].tv_nsec == UTIME_NOW) + tv[0] = now; + if (ts[1].tv_nsec == UTIME_NOW) + tv[1] = now; + } + return 0; +} + +#if defined(HAVE_FUTIMES) +/* + * Emulate futimens() via futimes() + */ +int +sudo_futimens(int fd, const struct timespec *ts) +{ + struct timeval tv[2], *times = NULL; + + if (ts != NULL) { + if (utimens_ts_to_tv(fd, NULL, ts, tv) == -1) + return -1; + times = tv; + } + return futimes(fd, times); +} +#elif defined(HAVE_FUTIME) +/* + * Emulate futimens() via futime() + */ +int +sudo_futimens(int fd, const struct timespec *ts) +{ + struct utimbuf utb, *times = NULL; + + if (ts != NULL) { + struct timeval tv[2]; + + if (utimens_ts_to_tv(fd, NULL, ts, tv) == -1) + return -1; + utb.actime = (time_t)(tv[0].tv_sec + tv[0].tv_usec / 1000000); + utb.modtime = (time_t)(tv[1].tv_sec + tv[1].tv_usec / 1000000); + times = &utb; + } + return futime(fd, times); +} +#else +/* + * Nothing to do but fail. + */ +int +sudo_futimens(int fd, const struct timespec *ts) +{ + errno = ENOSYS; + return -1; +} +#endif /* HAVE_FUTIMES */ + +#if defined(HAVE_UTIMES) +/* + * Emulate utimensat() via utimes() + */ +int +sudo_utimensat(int fd, const char *file, const struct timespec *ts, int flag) +{ + struct timeval tv[2], *times = NULL; + + if (fd != AT_FDCWD || flag != 0) { + errno = ENOTSUP; + return -1; + } + + if (ts != NULL) { + if (utimens_ts_to_tv(-1, file, ts, tv) == -1) + return -1; + times = tv; + } + return utimes(file, times); +} +#else +/* + * Emulate utimensat() via utime() + */ +int +sudo_utimensat(int fd, const char *file, const struct timespec *ts, int flag) +{ + struct utimbuf utb, *times = NULL; + + if (fd != AT_FDCWD || flag != 0) { + errno = ENOTSUP; + return -1; + } + + if (ts != NULL) { + struct timeval tv[2]; + + if (utimens_ts_to_tv(-1, file, ts, tv) == -1) + return -1; + utb.actime = (time_t)(tv[0].tv_sec + tv[0].tv_usec / 1000000); + utb.modtime = (time_t)(tv[1].tv_sec + tv[1].tv_usec / 1000000); + times = &utb; + } + return utime(file, times); +} +#endif /* !HAVE_UTIMES */ + +#endif /* !HAVE_FUTIMENS && !HAVE_UTIMENSAT */ diff -Nru sudo-1.8.12/lib/util/utimes.c sudo-1.8.16/lib/util/utimes.c --- sudo-1.8.12/lib/util/utimes.c 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/lib/util/utimes.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2004-2005, 2007, 2010-2011, 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. - */ - -#include - -#if !defined(HAVE_UTIMES) || (!defined(HAVE_FUTIMES) && !defined(HAVE_FUTIMESAT)) - -#include -#include -#include -#ifdef TIME_WITH_SYS_TIME -# include -#endif - -#ifdef HAVE_UTIME_H -# include -#else -# include "compat/utime.h" -#endif - -#include "sudo_compat.h" - -#ifndef HAVE_UTIMES -/* - * Emulate utimes() via utime() - */ -int -sudo_utimes(const char *file, const struct timeval *times) -{ - if (times != NULL) { - struct utimbuf utb; - - utb.actime = (time_t)(times[0].tv_sec + times[0].tv_usec / 1000000); - utb.modtime = (time_t)(times[1].tv_sec + times[1].tv_usec / 1000000); - return utime(file, &utb); - } else - return utime(file, NULL); -} -#endif /* !HAVE_UTIMES */ - -#ifdef HAVE_FUTIME -/* - * Emulate futimes() via futime() - */ -int -sudo_futimes(int fd, const struct timeval *times) -{ - if (times != NULL) { - struct utimbuf utb; - - utb.actime = (time_t)(times[0].tv_sec + times[0].tv_usec / 1000000); - utb.modtime = (time_t)(times[1].tv_sec + times[1].tv_usec / 1000000); - return futime(fd, &utb); - } else - return futime(fd, NULL); -} -#endif /* HAVE_FUTIME */ - -#endif /* !HAVE_UTIMES || (!HAVE_FUTIMES && !HAVE_FUTIMESAT) */ diff -Nru sudo-1.8.12/lib/zlib/Makefile.in sudo-1.8.16/lib/zlib/Makefile.in --- sudo-1.8.12/lib/zlib/Makefile.in 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/zlib/Makefile.in 2015-10-31 23:34:59.000000000 +0000 @@ -61,6 +61,9 @@ LDFLAGS = LT_LDFLAGS = @ZLIB_LDFLAGS@ @LT_LDFLAGS@ @LT_LDEXPORTS@ +# Flags to pass to libtool +LTFLAGS = + # PIE flags PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ @@ -76,9 +79,6 @@ install_uid = 0 install_gid = 0 -# OS dependent defines -DEFS = @OSDEFS@ - #### End of system configuration section. #### SHELL = @SHELL@ @@ -95,7 +95,7 @@ .SUFFIXES: .c .h .lo .c.lo: - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $< + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $< $(shlib_map): $(shlib_exp) @$(AWK) 'BEGIN { print "{\n\tglobal:" } { print "\t\t"$$0";" } END { print "\tlocal:\n\t\t*;\n};" }' $(shlib_exp) > $@ @@ -106,9 +106,9 @@ libsudo_z.la: $(LTOBJS) @LT_LDDEP@ case "$(LT_LDFLAGS)" in \ *-no-install*) \ - $(LIBTOOL) --mode=link $(CC) -o $@ $(LDFLAGS) $(LT_LDFLAGS) $(LTOBJS);; \ + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(LDFLAGS) $(LT_LDFLAGS) $(LTOBJS);; \ *) \ - $(LIBTOOL) --mode=link $(CC) -o $@ $(LDFLAGS) $(SSP_LDFLAGS) $(LT_LDFLAGS) $(LTOBJS) -version-info $(SHLIB_VERSION) -rpath $(libexecdir)/sudo;; \ + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(LDFLAGS) $(SSP_LDFLAGS) $(LT_LDFLAGS) $(LTOBJS) -version-info $(SHLIB_VERSION) -rpath $(libexecdir)/sudo;; \ esac pre-install: @@ -117,7 +117,7 @@ case "$(LT_LDFLAGS)" in \ *-no-install*) ;; \ *) if [ X"$(shlib_enable)" = X"yes" ]; then \ - INSTALL_BACKUP='~' $(LIBTOOL) --quiet --mode=install $(INSTALL) $(INSTALL_OWNER) libsudo_z.la $(DESTDIR)$(libexecdir)/sudo; \ + INSTALL_BACKUP='~' $(LIBTOOL) $(LTFLAGS) --quiet --mode=install $(INSTALL) $(INSTALL_OWNER) libsudo_z.la $(DESTDIR)$(libexecdir)/sudo; \ fi;; \ esac @@ -132,14 +132,16 @@ install-plugin: uninstall: - $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(libexecdir)/sudo/libsudo_z.la + $(LIBTOOL) $(LTFLAGS) --mode=uninstall rm -f $(DESTDIR)$(libexecdir)/sudo/libsudo_z.la + +splint: cppcheck: check: clean: - -$(LIBTOOL) --mode=clean rm -f *.lo *.o *.la *.a stamp-* core *.core core.* + -$(LIBTOOL) $(LTFLAGS) --mode=clean rm -f *.lo *.o *.la *.a stamp-* core *.core core.* mostlyclean: clean @@ -155,42 +157,42 @@ # Autogenerated dependencies, do not modify adler32.lo: $(srcdir)/adler32.c $(srcdir)/zlib.h $(srcdir)/zutil.h ./zconf.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/adler32.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/adler32.c compress.lo: $(srcdir)/compress.c $(srcdir)/zlib.h ./zconf.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/compress.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/compress.c crc32.lo: $(srcdir)/crc32.c $(srcdir)/crc32.h $(srcdir)/zlib.h \ $(srcdir)/zutil.h ./zconf.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/crc32.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/crc32.c deflate.lo: $(srcdir)/deflate.c $(srcdir)/deflate.h $(srcdir)/zlib.h \ $(srcdir)/zutil.h ./zconf.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/deflate.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/deflate.c gzclose.lo: $(srcdir)/gzclose.c $(srcdir)/gzguts.h $(srcdir)/zlib.h ./zconf.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/gzclose.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/gzclose.c gzlib.lo: $(srcdir)/gzlib.c $(srcdir)/gzguts.h $(srcdir)/zlib.h ./zconf.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/gzlib.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/gzlib.c gzread.lo: $(srcdir)/gzread.c $(srcdir)/gzguts.h $(srcdir)/zlib.h ./zconf.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/gzread.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/gzread.c gzwrite.lo: $(srcdir)/gzwrite.c $(srcdir)/gzguts.h $(srcdir)/zlib.h ./zconf.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/gzwrite.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/gzwrite.c infback.lo: $(srcdir)/infback.c $(srcdir)/inffast.h $(srcdir)/inffixed.h \ $(srcdir)/inflate.h $(srcdir)/inftrees.h $(srcdir)/zlib.h \ $(srcdir)/zutil.h ./zconf.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/infback.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/infback.c inffast.lo: $(srcdir)/inffast.c $(srcdir)/inffast.h $(srcdir)/inflate.h \ $(srcdir)/inftrees.h $(srcdir)/zlib.h $(srcdir)/zutil.h ./zconf.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/inffast.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/inffast.c inflate.lo: $(srcdir)/inflate.c $(srcdir)/inffast.h $(srcdir)/inffixed.h \ $(srcdir)/inflate.h $(srcdir)/inftrees.h $(srcdir)/zlib.h \ $(srcdir)/zutil.h ./zconf.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/inflate.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/inflate.c inftrees.lo: $(srcdir)/inftrees.c $(srcdir)/inftrees.h $(srcdir)/zlib.h \ $(srcdir)/zutil.h ./zconf.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/inftrees.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/inftrees.c trees.lo: $(srcdir)/trees.c $(srcdir)/deflate.h $(srcdir)/trees.h \ $(srcdir)/zlib.h $(srcdir)/zutil.h ./zconf.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/trees.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/trees.c uncompr.lo: $(srcdir)/uncompr.c $(srcdir)/zlib.h ./zconf.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/uncompr.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/uncompr.c zutil.lo: $(srcdir)/zutil.c $(srcdir)/gzguts.h $(srcdir)/zlib.h \ $(srcdir)/zutil.h ./zconf.h - $(LIBTOOL) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/zutil.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c -o $@ $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/zutil.c diff -Nru sudo-1.8.12/lib/zlib/zlib.exp sudo-1.8.16/lib/zlib/zlib.exp --- sudo-1.8.12/lib/zlib/zlib.exp 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/lib/zlib/zlib.exp 2016-03-17 16:13:10.000000000 +0000 @@ -39,7 +39,6 @@ gzoffset64 gzopen gzopen64 -gzopen_w gzprintf gzputc gzputs diff -Nru sudo-1.8.12/Makefile.in sudo-1.8.16/Makefile.in --- sudo-1.8.12/Makefile.in 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/Makefile.in 2016-03-17 16:13:10.000000000 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 2010-2014 Todd C. Miller +# Copyright (c) 2010-2015 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 @@ -31,8 +31,8 @@ datarootdir = @datarootdir@ localedir = @localedir@ localstatedir = @localstatedir@ +exampledir = @exampledir@ docdir = @docdir@ -exampledir = $(datarootdir)/examples/$(PACKAGE_TARNAME) mandir = @mandir@ rundir = @rundir@ vardir = @vardir@ @@ -76,7 +76,7 @@ MSGMERGE = msgmerge XGETTEXT = xgettext XGETTEXT_OPTS = -F -k_ -kN_ -kU_ --copyright-holder="Todd C. Miller" \ - "--msgid-bugs-address=http://www.sudo.ws/bugs" \ + "--msgid-bugs-address=https://bugzilla.sudo.ws" \ --package-name=@PACKAGE_NAME@ --package-version=$(VERSION) \ --flag warning:1:c-format --flag warningx:1:c-format \ --flag fatal:1:c-format --flag fatalx:1:c-format \ @@ -86,6 +86,9 @@ # Default cppcheck options when run from the top-level Makefile CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +# Default splint options when run from the top-level Makefile +SPLINT_OPTS = -D__restrict= -checks + all: config.status for d in $(SUBDIRS); do \ (cd $$d && exec $(MAKE) $@) && continue; \ @@ -106,6 +109,14 @@ done; \ exit $$rval +splint: config.status + rval=0; \ + for d in $(SUBDIRS); do \ + echo splinting $$d; \ + (cd $$d && exec $(MAKE) SPLINT_OPTS="$(SPLINT_OPTS)" $@) || rval=`expr $$rval + $$?`; \ + done; \ + exit $$rval + install-dirs install-binaries install-includes install-plugin: config.status pre-install for d in $(SUBDIRS); do \ (cd $$d && exec $(MAKE) "INSTALL_OWNER=$(INSTALL_OWNER)" $@) && continue; \ @@ -326,8 +337,8 @@ for d in $(SUBDIRS) $(SAMPLES); do \ (cd $$d && exec $(MAKE) $@); \ done - -rm -rf Makefile pathnames.h config.h config.status config.cache \ - config.log libtool stamp-* autom4te.cache init.d/*.sh + -rm -rf autom4te.cache config.cache config.h config.log config.status \ + init.d/*.sh init.d/sudo.conf libtool Makefile pathnames.h stamp-* cleandir: distclean diff -Nru sudo-1.8.12/MANIFEST sudo-1.8.16/MANIFEST --- sudo-1.8.12/MANIFEST 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/MANIFEST 2016-03-17 16:13:10.000000000 +0000 @@ -1,3 +1,4 @@ +ABOUT-NLS ChangeLog INSTALL INSTALL.configure @@ -60,9 +61,6 @@ include/compat/nss_dbdefs.h include/compat/sha2.h include/compat/stdbool.h -include/compat/timespec.h -include/compat/utime.h -include/sudo_alloc.h include/sudo_compat.h include/sudo_conf.h include/sudo_debug.h @@ -77,11 +75,10 @@ indent.pro init.d/aix.sh.in init.d/hpux.sh.in +init.d/sudo.conf.in install-sh lib/util/Makefile.in lib/util/aix.c -lib/util/alloc.c -lib/util/clock_gettime.c lib/util/closefrom.c lib/util/event.c lib/util/event_poll.c @@ -91,8 +88,10 @@ lib/util/getaddrinfo.c lib/util/getcwd.c lib/util/getgrouplist.c +lib/util/gethostname.c lib/util/getline.c lib/util/getopt_long.c +lib/util/gettime.c lib/util/gidlist.c lib/util/glob.c lib/util/inet_ntop.c @@ -111,13 +110,17 @@ lib/util/parseln.c lib/util/progname.c lib/util/pw_dup.c +lib/util/reallocarray.c lib/util/regress/atofoo/atofoo_test.c lib/util/regress/fnmatch/fnm_test.c lib/util/regress/fnmatch/fnm_test.in lib/util/regress/glob/files lib/util/regress/glob/globtest.c lib/util/regress/glob/globtest.in +lib/util/regress/mktemp/mktemp_test.c +lib/util/regress/parse_gids/parse_gids_test.c lib/util/regress/progname/progname_test.c +lib/util/regress/strsplit/strsplit_test.c lib/util/regress/sudo_conf/conf_test.c lib/util/regress/sudo_conf/test1.in lib/util/regress/sudo_conf/test1.out.ok @@ -157,7 +160,10 @@ lib/util/snprintf.c lib/util/strlcat.c lib/util/strlcpy.c +lib/util/strndup.c +lib/util/strnlen.c lib/util/strsignal.c +lib/util/strsplit.c lib/util/strtobool.c lib/util/strtoid.c lib/util/strtomode.c @@ -168,7 +174,7 @@ lib/util/term.c lib/util/ttysize.c lib/util/util.exp.in -lib/util/utimes.c +lib/util/utimens.c lib/zlib/Makefile.in lib/zlib/adler32.c lib/zlib/compress.c @@ -250,8 +256,10 @@ plugins/sudoers/def_data.in plugins/sudoers/defaults.c plugins/sudoers/defaults.h +plugins/sudoers/editor.c plugins/sudoers/env.c plugins/sudoers/find_path.c +plugins/sudoers/gc.c plugins/sudoers/getdate.c plugins/sudoers/getdate.y plugins/sudoers/getspwuid.c @@ -304,6 +312,8 @@ plugins/sudoers/po/fr.po plugins/sudoers/po/hr.mo plugins/sudoers/po/hr.po +plugins/sudoers/po/hu.mo +plugins/sudoers/po/hu.po plugins/sudoers/po/it.mo plugins/sudoers/po/it.po plugins/sudoers/po/ja.mo @@ -320,6 +330,8 @@ plugins/sudoers/po/pt_BR.po plugins/sudoers/po/ru.mo plugins/sudoers/po/ru.po +plugins/sudoers/po/sk.mo +plugins/sudoers/po/sk.po plugins/sudoers/po/sl.mo plugins/sudoers/po/sl.po plugins/sudoers/po/sr.mo @@ -356,51 +368,67 @@ plugins/sudoers/regress/parser/check_fill.c plugins/sudoers/regress/parser/check_hexchar.c plugins/sudoers/regress/sudoers/test1.in +plugins/sudoers/regress/sudoers/test1.json.ok plugins/sudoers/regress/sudoers/test1.out.ok plugins/sudoers/regress/sudoers/test1.toke.ok plugins/sudoers/regress/sudoers/test10.in +plugins/sudoers/regress/sudoers/test10.json.ok plugins/sudoers/regress/sudoers/test10.out.ok plugins/sudoers/regress/sudoers/test10.toke.ok plugins/sudoers/regress/sudoers/test11.in +plugins/sudoers/regress/sudoers/test11.json.ok plugins/sudoers/regress/sudoers/test11.out.ok plugins/sudoers/regress/sudoers/test11.toke.ok plugins/sudoers/regress/sudoers/test12.in +plugins/sudoers/regress/sudoers/test12.json.ok plugins/sudoers/regress/sudoers/test12.out.ok plugins/sudoers/regress/sudoers/test12.toke.ok plugins/sudoers/regress/sudoers/test13.in +plugins/sudoers/regress/sudoers/test13.json.ok plugins/sudoers/regress/sudoers/test13.out.ok plugins/sudoers/regress/sudoers/test13.toke.ok -plugins/sudoers/regress/sudoers/test14.in -plugins/sudoers/regress/sudoers/test14.out.ok -plugins/sudoers/regress/sudoers/test14.toke.ok +plugins/sudoers/regress/sudoers/test14.in +plugins/sudoers/regress/sudoers/test14.json.ok +plugins/sudoers/regress/sudoers/test14.out.ok +plugins/sudoers/regress/sudoers/test14.toke.ok plugins/sudoers/regress/sudoers/test15.in +plugins/sudoers/regress/sudoers/test15.json.ok plugins/sudoers/regress/sudoers/test15.out.ok plugins/sudoers/regress/sudoers/test15.toke.ok plugins/sudoers/regress/sudoers/test16.in +plugins/sudoers/regress/sudoers/test16.json.ok plugins/sudoers/regress/sudoers/test16.out.ok plugins/sudoers/regress/sudoers/test16.toke.ok plugins/sudoers/regress/sudoers/test2.in +plugins/sudoers/regress/sudoers/test2.json.ok plugins/sudoers/regress/sudoers/test2.out.ok plugins/sudoers/regress/sudoers/test2.toke.ok plugins/sudoers/regress/sudoers/test3.in +plugins/sudoers/regress/sudoers/test3.json.ok plugins/sudoers/regress/sudoers/test3.out.ok plugins/sudoers/regress/sudoers/test3.toke.ok plugins/sudoers/regress/sudoers/test4.in +plugins/sudoers/regress/sudoers/test4.json.ok plugins/sudoers/regress/sudoers/test4.out.ok plugins/sudoers/regress/sudoers/test4.toke.ok plugins/sudoers/regress/sudoers/test5.in +plugins/sudoers/regress/sudoers/test5.json.ok plugins/sudoers/regress/sudoers/test5.out.ok plugins/sudoers/regress/sudoers/test5.toke.ok plugins/sudoers/regress/sudoers/test6.in +plugins/sudoers/regress/sudoers/test6.json.ok plugins/sudoers/regress/sudoers/test6.out.ok plugins/sudoers/regress/sudoers/test6.toke.ok plugins/sudoers/regress/sudoers/test7.in +plugins/sudoers/regress/sudoers/test7.json.ok plugins/sudoers/regress/sudoers/test7.out.ok plugins/sudoers/regress/sudoers/test7.toke.ok plugins/sudoers/regress/sudoers/test8.in +plugins/sudoers/regress/sudoers/test8.json.ok plugins/sudoers/regress/sudoers/test8.out.ok plugins/sudoers/regress/sudoers/test8.toke.ok plugins/sudoers/regress/sudoers/test9.in +plugins/sudoers/regress/sudoers/test9.json.ok plugins/sudoers/regress/sudoers/test9.out.ok plugins/sudoers/regress/sudoers/test9.toke.ok plugins/sudoers/regress/testsudoers/test1.out.ok @@ -484,6 +512,8 @@ po/gl.po po/hr.mo po/hr.po +po/hu.mo +po/hu.po po/it.mo po/it.po po/ja.mo @@ -498,6 +528,8 @@ po/pt_BR.po po/ru.mo po/ru.po +po/sk.mo +po/sk.po po/sl.mo po/sl.po po/sr.mo @@ -523,7 +555,6 @@ src/get_pty.c src/hooks.c src/load_plugins.c -src/locale_stub.c src/net_ifs.c src/openbsd.c src/parse_args.c diff -Nru sudo-1.8.12/mkdep.pl sudo-1.8.16/mkdep.pl --- sudo-1.8.12/mkdep.pl 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/mkdep.pl 2015-10-31 23:34:59.000000000 +0000 @@ -70,7 +70,7 @@ $makefile =~ s:\@SUDOERS_OBJS\@:bsm_audit.lo linux_audit.lo ldap.lo solaris_audit.lo sssd.lo:; # XXX - fill in AUTH_OBJS from contents of the auth dir instead $makefile =~ s:\@AUTH_OBJS\@:afs.lo aix_auth.lo bsdauth.lo dce.lo fwtk.lo getspwuid.lo kerb5.lo pam.lo passwd.lo rfc1938.lo secureware.lo securid5.lo sia.lo:; - $makefile =~ s:\@LTLIBOBJS\@:clock_gettime.lo closefrom.lo fnmatch.lo getaddrinfo.lo getcwd.lo getgrouplist.lo getline.lo getopt_long.lo glob.lo isblank.lo memrchr.lo memset_s.lo mksiglist.lo mksigname.lo mktemp.lo pw_dup.lo sha2.lo sig2str.lo siglist.lo signame.lo snprintf.lo strlcat.lo strlcpy.lo strsignal.lo strtonum.lo utimes.lo globtest.o fnm_test.o inet_pton:; + $makefile =~ s:\@LTLIBOBJS\@:closefrom.lo fnmatch.lo getaddrinfo.lo getcwd.lo getgrouplist.lo getline.lo getopt_long.lo glob.lo inet_ntop_lo inet_pton.lo isblank.lo memrchr.lo memset_s.lo mksiglist.lo mksigname.lo mktemp.lo pw_dup.lo reallocarray.lo sha2.lo sig2str.lo siglist.lo signame.lo snprintf.lo strlcat.lo strlcpy.lo strndup.lo strnlen.lo strsignal.lo strtonum.lo utimens.lo:; # Parse OBJS lines my %objs; diff -Nru sudo-1.8.12/mkpkg sudo-1.8.16/mkpkg --- sudo-1.8.12/mkpkg 2015-02-09 18:40:11.000000000 +0000 +++ sudo-1.8.16/mkpkg 2016-03-17 16:13:11.000000000 +0000 @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright (c) 2010-2013 Todd C. Miller +# Copyright (c) 2010-2015 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 @@ -110,27 +110,56 @@ # Choose configure options by osversion. # We use the same configure options as vendor packages when possible. case "$osversion" in - centos*|rhel*) - if [ $osrelease -ge 40 ]; then - # RHEL 4 and up support SELinux + centos*|rhel*|f[0-9]*) + case "$osversion" in + centos*|rhel*) + if [ $osrelease -ge 40 ]; then + # RHEL 4 and up support SELinux + with_selinux=true + if [ $osrelease -ge 50 ]; then + # RHEL 5 and up has audit support and uses a + # separate PAM config file for "sudo -i". + with_linux_audit=true + with_pam_login=true + if [ $osrelease -ge 60 ]; then + # RHEL 6 and above builds sudo with SSSD support + with_sssd=true + # RHEL 6 and above use /etc/sudo-ldap.conf + with_sudo_ldap_conf=true + fi + fi + fi + ;; + f[0-9]*) + # XXX - investigate which features were in which fedora version + with_selinux=true + with_linux_audit=true + with_pam_login=true + with_sssd=true + with_sudo_ldap_conf=true + ;; + esac + + if [ X"$with_selinux" = X"true" ]; then configure_opts="${configure_opts}${configure_opts+$tab}--with-selinux" fi - if [ $osrelease -ge 50 ]; then - # RHEL 5 and up has audit support and uses a separate PAM - # config file for "sudo -i". + if [ X"$with_linux_audit" = X"true" ]; then configure_opts="${configure_opts}${configure_opts+$tab}--with-linux-audit" - configure_opts="${configure_opts}${configure_opts+$tab}--with-pam-login" PPVARS="${PPVARS}${PPVARS+$space}linux_audit=1.4.0" fi - if [ $osrelease -ge 60 ]; then - # RHEL 6 and above builds sudo with SSSD support + if [ X"$with_pam_login" = X"true" ]; then + configure_opts="${configure_opts}${configure_opts+$tab}--with-pam-login" + fi + if [ X"$with_sssd" = X"true" ]; then configure_opts="${configure_opts}${configure_opts+$tab}--with-sssd" - # RHEL 6 and above use /etc/sudo-ldap.conf - if test "$flavor" = "ldap"; then - configure_opts="${configure_opts}${configure_opts+$tab}--with-ldap - --with-ldap-conf-file=/etc/sudo-ldap.conf" + if test "`getconf LONG_BIT`" = "64"; then + # SSSD backend needs to know where to find the sssd lib + configure_opts="${configure_opts}${configure_opts+$tab}--with-sssd-lib=/usr/lib64" fi fi + if [ X"$with_sudo_ldap_conf" = X"true" ]; then + configure_opts="${configure_opts}${configure_opts+$tab}--with-ldap-conf-file=/etc/sudo-ldap.conf" + fi # Note, must indent with tabs, not spaces due to IFS trickery configure_opts="--prefix=/usr --with-logging=syslog @@ -190,12 +219,19 @@ configure_opts="${configure_opts}${configure_opts+$tab}--enable-admin-flag${tab}--without-lecture" ;; esac + # Newer Debian uses arch-specific lib dirs + MULTIARCH=`dpkg-architecture -qDEB_HOST_MULTIARCH 2>/dev/null` # Note, must indent with tabs, not spaces due to IFS trickery if test "$flavor" = "ldap"; then configure_opts="${configure_opts}${configure_opts+$tab}--with-ldap --with-ldap-conf-file=/etc/sudo-ldap.conf" + else + configure_opts="${configure_opts}${configure_opts+$tab}--with-sssd" + if test -n "$MULTIARCH"; then + # SSSD backend needs to know where to find the sssd lib + configure_opts="${configure_opts}${configure_opts+$tab}--with-sssd-lib=/usr/lib/$MULTIARCH" + fi fi - configure_opts="${configure_opts}${configure_opts+$tab}--with-selinux" configure_opts="--prefix=/usr --with-all-insults --with-pam @@ -212,13 +248,26 @@ --with-sendmail=/usr/sbin/sendmail --mandir=/usr/share/man --libexecdir=/usr/lib - --with-secure-path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin + --with-selinux + --with-linux-audit $configure_opts" + # Use correct libaudit dependency + for f in /lib/${MULTIARCH}${MULTIARCH:+/}libaudit.so.[0-9]* /lib/libaudit.so.[0-9]*; do + if test -f "$f"; then + linux_audit=`dpkg-query -S "$f" 2>/dev/null | sed -n 's/:.*//p'` + test -n "$linux_audit" && break; + fi + done + if [ -z "linux_audit" ]; then + echo "unable to determine package for libaudit" 1>&2 + exit 1 + fi + PPVARS="${PPVARS}${PPVARS+$space}linux_audit=$linux_audit" ;; macos*) case "$osversion" in - *i386|*x86_64) - # Build intel-only universal binaries + macos10[0-6]-i386|macos10[0-6]-x86_64) + # Build intel universal binaries for 10.6 and below ARCH_FLAGS="-arch i386 -arch x86_64" ;; esac @@ -299,6 +348,9 @@ ;; esac +# The postinstall script will create tmpfiles.d/sudo.conf for us +configure_opts="${configure_opts}${configure_opts+$tab}--disable-tmpfiles.d" + # Remove spaces from IFS when setting $@ so that passprompt may include them OIFS="$IFS" IFS=" $nl" diff -Nru sudo-1.8.12/NEWS sudo-1.8.16/NEWS --- sudo-1.8.12/NEWS 2015-02-06 22:25:52.000000000 +0000 +++ sudo-1.8.16/NEWS 2016-03-17 16:13:10.000000000 +0000 @@ -1,3 +1,294 @@ +What's new in Sudo 1.8.16 + + * Fixed a compilation error on Solaris 10 with Stun Studio 12. + Bug #727. + + * When preserving variables from the invoking user's environment, if + there are duplicates sudo now only keeps the first instance. + + * Fixed a bug that could cause warning mail to be sent in list + mode (sudo -l) for users without sudo privileges when the + LDAP and sssd backends are used. + + * Fixed a bug that prevented the "mail_no_user" option from working + properly with the LDAP backend. + + * In the LDAP and sssd backends, white space is now ignored between + an operator (!, +, +=, -=) when parsing a sudoOption. + + * It is now possible to disable Path settings in sudo.conf + by omitting the path name. + + * The sudoedit_checkdir Defaults option is now enabled by default + and has been extended. When editing files with sudoedit, each + directory in the path to be edited is now checked. If a directory + is writable by the invoking user, symbolic links will not be + followed. If the parent directory of the file to be edited is + writable, sudoedit will refuse to edit it. + Bug #707. + + * The netgroup_tuple Defaults option has been added to enable matching + of the entire netgroup tuple, not just the host or user portion. + Bug #717. + + * When matching commands based on the SHA2 digest, sudo will now + use fexecve(2) to execute the command if it is available. This + fixes a time of check versus time of use race condition when the + directory holding the command is writable by the invoking user. + + * On AIX systems, sudo now caches the auth registry string along + with password and group information. This fixes a potential + problem when a user or group of the same name exists in multiple + auth registries. For example, local and LDAP. + + * Fixed a crash in the SSSD backend when the invoking user is not + found. Bug #732. + + * Added the --enable-asan configure flag to enable address sanitizer + support. A few minor memory leaks have been plugged to quiet + the ASAN leak detector. + + * The value of _PATH_SUDO_CONF may once again be overridden via + the Makefile. Bug #735. + + * The sudoers2ldif script now handles multiple roles with same name. + + * Fixed a compilation error on systems that have the posix_spawn() + and posix_spawnp() functions but an unusable spawn.h header. + Bug #730. + + * Fixed support for negating character classes in sudo's version + of the fnmatch() function. + + * Fixed a bug in the LDAP and SSSD backends that could allow an + unauthorized user to list another user's privileges. Bug #738. + + * The PAM conversation function now works around an ambiguity in the + PAM spec with respect to multiple messages. Bug #726. + +What's new in Sudo 1.8.15 + + * Fixed a bug that prevented sudo from building outside the source tree + on some platforms. Bug #708. + + * Fixed the location of the sssd library in the RHEL/Centos packages. + Bug #710. + + * Fixed a build problem on systems that don't implicitly include + sys/types.h from other header files. Bug #711. + + * Fixed a problem on Linux using containers where sudo would ignore + signals sent by a process in a different container. + + * Sudo now refuses to run a command if the PAM session module + returns an error. + + * When editing files with sudoedit, symbolic links will no longer + be followed by default. The old behavior can be restored by + enabling the sudoedit_follow option in sudoers or on a per-command + basis with the FOLLOW and NOFOLLOW tags. Bug #707. + + * Fixed a bug introduced in version 1.8.14 that caused the last + valid editor in the sudoers "editor" list to be used by visudo + and sudoedit instead of the first. Bug #714. + + * Fixed a bug in visudo that prevented the addition of a final + newline to edited files without one. + + * Fixed a bug decoding certain base64 digests in sudoers when the + intermediate format included a '=' character. + + * Individual records are now locked in the time stamp file instead + of the entire file. This allows sudo to avoid prompting for a + password multiple times on the same terminal when used in a + pipeline. In other words, "sudo cat foo | sudo grep bar" now + only prompts for the password once. Previously, both sudo + processes would prompt for a password, often making it impossible + to enter. + + * Fixed a bug where sudo would fail to run commands as a non-root + user on systems that lack both setresuid() and setreuid(). + Bug #713. + + * Fixed a bug introduced in sudo 1.8.14 that prevented visudo from + re-editing the correct file when a syntax error was detected. + + * Fixed a bug where sudo would not relay a SIGHUP signal to the + command when the terminal is closed and the command is not run + in its own pseudo-tty. Bug #719 + + * If some, but not all, of the LOGNAME, USER or USERNAME environment + variables have been preserved from the invoking user's environment, + sudo will now use the preserved value to set the remaining variables + instead of using the runas user. This ensures that if, for example, + only LOGNAME is present in the env_keep list, that sudo will not + set USER and USERNAME to the runas user. + +* When the command sudo is running dies due to a signal, sudo will + now send itself that same signal with the default signal handler + installed instead of exiting. The bash shell appears to ignore + some signals, e.g. SIGINT, unless the command being run is killed + by that signal. This makes the behavior of commands run under + sudo the same as without sudo when bash is the shell. Bug #722 + + * Slovak translation for sudo from translationproject.org. + + * Hungarian and Slovak translations for sudoers from translationproject.org. + + * Previously, when env_reset was enabled (the default) and the -s + option was not used, the SHELL environment variable was set to the + shell of the invoking user. Now, when env_reset is enabled and + the -s option is not used, SHELL is set based on the target user. + + * Fixed challenge/response style BSD authentication. + + * Added the sudoedit_checkdir Defaults option to prevent sudoedit + from editing files located in a directory that is writable by + the invoking user. + + * Added the always_query_group_plugin Defaults option to control + whether groups not found in the system group database are passed + to the group plugin. Previously, unknown system groups were + always passed to the group plugin. + + * When creating a new file, sudoedit will now check that the file's + parent directory exists before running the editor. + + * Fixed the compiler stack protector test in configure for compilers + that support -fstack-protector but don't actually have the ssp + library available. + +What's new in Sudo 1.8.14p3 + + * Fixed a bug introduced in sudo 1.8.14p2 that prevented sudo + from working when no tty was present. + + * Fixed tty detection on newer AIX systems where dev_t is 64-bit. + +What's new in Sudo 1.8.14p2 + + * Fixed a bug introduced in sudo 1.8.14 that prevented the lecture + file from being created. Bug #704. + +What's new in Sudo 1.8.14p1 + + * Fixed a bug introduced in sudo 1.8.14 that prevented the sssd + backend from working. Bug #703. + +What's new in Sudo 1.8.14 + + * Log messages on Mac OS X now respect sudoers_locale when sudo + is build with NLS support. + + * The sudo manual pages now pass "mandoc -Tlint" with no warnings. + + * Fixed a compilation problem on systems with the sig2str() function + that do not define SIG2STR_MAX in signal.h. + + * Worked around a compiler bug that resulted in unexpected behavior + when returning an int from a function declared to return bool + without an explicit cast. + + * Worked around a bug in Mac OS X 10.10 BSD auditing where the + au_preselect() fails for AUE_sudo events but succeeds for + AUE_DARWIN_sudo. + + * Fixed a hang on Linux systems with glibc when sudo is linked with + jemalloc. + + * When the user runs a command as a user ID that is not present in + the password database via the -u flag, the command is now run + with the group ID of the invoking user instead of group ID 0. + + * Fixed a compilation problem on systems that don't pull in + definitions of uid_t and gid_t without sys/types.h or unistd.h. + + * Fixed a compilation problem on newer AIX systems which use a + struct st_timespec for time stamps in struct stat that differs + from struct timespec. Bug #702. + + * The example directory is now configurable via --with-exampledir + and defaults to DATAROOTDIR/examples/sudo on BSD systems. + + * The /usr/lib/tmpfiles.d/sudo.conf file is now installed as part + of "make install" when systemd is in use. + + * Fixed a linker problem on some systems with libintl. Bug #690. + + * Fixed compilation with compilers that don't support __func__ + or __FUNCTION__. + + * Sudo no longer needs to uses weak symbols to support localization + in the warning functions. A registration function is used instead. + + * Fixed a setresuid() failure in sudoers on Linux kernels where + uid changes take the nproc resource limit into account. + + * Fixed LDAP netgroup queries on AIX. + + * Sudo will now display the custom prompt on Linux systems with PAM + even if the "Password: " prompt is not localized by the PAM module. + Bug #701. + + * Double-quoted values in an LDAP sudoOption are now supported + for consistency with file-based sudoers. + + * Fixed a bug that prevented the btime entry in /proc/stat from + being parsed on Linux. + +What's new in Sudo 1.8.13 + + * The examples directory is now a subdirectory of the doc dir to + conform to Debian guidelines. Bug #682. + + * Fixed a compilation error for siglist.c and signame.c on some + systems. Bug #686 + + * Weak symbols are now used for sudo_warn_gettext() and + sudo_warn_strerror() in libsudo_util to avoid link errors when + -Wl,--no-undefined is used in LDFLAGS. The --disable-weak-symbols + configure option can be used to disable the user of weak symbols. + + * Fixed a bug in sudo's mkstemps() replacement function that + prevented the file extension from being preserved in sudoedit. + + * A new mail_all_cmnds sudoers flag will send mail when a user runs + a command (or tries to). The behavior of the mail_always flag has + been restored to always send mail when sudo is run. + + * New "MAIL" and "NOMAIL" command tags have been added to toggle + mail sending behavior on a per-command (or Cmnd_Alias) basis. + + * Fixed matching of empty passwords when sudo is configured to + use passwd (or shadow) file authentication on systems where the + crypt() function returns NULL for invalid salts. + + * On AIX, sudo now uses the value of the auth_type setting in + /etc/security/login.cfg to determine whether to use LAM or PAM + for user authentication. + + * The "all" setting for listpw and verifypw now works correctly + with LDAP and sssd sudoers. + + * The sudo timestamp directory is now created at boot time on + platforms that use systemd. + + * Sudo will now restore the value of the SIGPIPE handler before + executing the command. + + * Sudo now uses "struct timespec" instead of "struct timeval" for + time keeping when possible. If supported, sudoedit and visudo + now use nanosecond granularity time stamps. + + * Fixed a symbol name collision with systems that have their own + SHA2 implementation. This fixes a problem where PAM could use + the wrong SHA2 implementation on Solaris 10 systems configured + to use SHA512 for passwords. + + * The editor invoked by sudoedit once again uses an unmodified + copy of the user's environment as per the documentation. This + was inadvertantly changed in sudo 1.8.0. Bug #688. + What's new in Sudo 1.8.12 * The embedded copy of zlib has been upgraded to version 1.2.8 and diff -Nru sudo-1.8.12/plugins/group_file/getgrent.c sudo-1.8.16/plugins/group_file/getgrent.c --- sudo-1.8.12/plugins/group_file/getgrent.c 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/group_file/getgrent.c 2015-10-31 23:34:59.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005,2008,2010-2013 Todd C. Miller + * Copyright (c) 2005,2008,2010-2015 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 @@ -22,18 +22,8 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H @@ -47,10 +37,6 @@ #include "sudo_compat.h" #include "sudo_util.h" -#ifndef LINE_MAX -# define LINE_MAX 2048 -#endif - #undef GRMEM_MAX #define GRMEM_MAX 200 @@ -131,11 +117,13 @@ if (len > 0 && colon[len - 1] == '\n') colon[len - 1] = '\0'; if (*colon != '\0') { + char *last; + gr.gr_mem = gr_mem; - cp = strtok(colon, ","); + cp = strtok_r(colon, ",", &last); for (n = 0; cp != NULL && n < GRMEM_MAX; n++) { gr.gr_mem[n] = cp; - cp = strtok(NULL, ","); + cp = strtok_r(NULL, ",", &last); } gr.gr_mem[n++] = NULL; } else diff -Nru sudo-1.8.12/plugins/group_file/group_file.c sudo-1.8.16/plugins/group_file/group_file.c --- sudo-1.8.12/plugins/group_file/group_file.c 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/group_file/group_file.c 2015-10-31 23:35:24.000000000 +0000 @@ -20,31 +20,19 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STDBOOL_H # include #else # include "compat/stdbool.h" #endif /* HAVE_STDBOOL_H */ #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include #include @@ -74,10 +62,10 @@ sudo_log = sudo_printf; - if (GROUP_API_VERSION_GET_MAJOR(version) != GROUP_API_VERSION_MAJOR) { + if (SUDO_API_VERSION_GET_MAJOR(version) != GROUP_API_VERSION_MAJOR) { sudo_log(SUDO_CONV_ERROR_MSG, "group_file: incompatible major version %d, expected %d\n", - GROUP_API_VERSION_GET_MAJOR(version), + SUDO_API_VERSION_GET_MAJOR(version), GROUP_API_VERSION_MAJOR); return -1; } diff -Nru sudo-1.8.12/plugins/group_file/Makefile.in sudo-1.8.16/plugins/group_file/Makefile.in --- sudo-1.8.12/plugins/group_file/Makefile.in 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/group_file/Makefile.in 2015-10-31 23:35:07.000000000 +0000 @@ -28,7 +28,7 @@ # Compiler & tools to use CC = @CC@ -LIBTOOL = @LIBTOOL@ --tag=disable-static +LIBTOOL = @LIBTOOL@ SED = @SED@ AWK = @AWK@ @@ -50,6 +50,9 @@ LDFLAGS = @LDFLAGS@ LT_LDFLAGS = @LT_LDFLAGS@ @LT_LDEXPORTS@ +# Flags to pass to libtool +LTFLAGS = --tag=disable-static + # PIE flags PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ @@ -61,6 +64,9 @@ # cppcheck options, usually set in the top-level Makefile CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +# splint options, usually set in the top-level Makefile +SPLINT_OPTS = -D__restrict= -checks + # Where to install things... prefix = @prefix@ exec_prefix = @exec_prefix@ @@ -83,9 +89,6 @@ install_uid = 0 install_gid = 0 -# OS dependent defines -DEFS = @OSDEFS@ - #### End of system configuration section. #### SHELL = @SHELL@ @@ -104,7 +107,7 @@ .SUFFIXES: .o .c .h .lo .c.lo: - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $< + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $< $(shlib_map): $(shlib_exp) @$(AWK) 'BEGIN { print "{\n\tglobal:" } { print "\t\t"$$0";" } END { print "\tlocal:\n\t\t*;\n};" }' $(shlib_exp) > $@ @@ -113,7 +116,7 @@ @$(SED) 's/^/+e /' $(shlib_exp) > $@ group_file.la: $(OBJS) $(LT_LIBS) @LT_LDDEP@ - $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) $(SSP_LDFLAGS) $(LT_LDFLAGS) -o $@ $(OBJS) $(LIBS) -module -avoid-version -rpath $(plugindir) -shrext .so + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) $(LDFLAGS) $(SSP_LDFLAGS) $(LT_LDFLAGS) -o $@ $(OBJS) $(LIBS) -module -avoid-version -rpath $(plugindir) -shrext .so pre-install: @@ -130,20 +133,23 @@ install-plugin: install-dirs group_file.la if [ X"$(shlib_enable)" = X"yes" ]; then \ - INSTALL_BACKUP='~' $(LIBTOOL) --mode=install $(INSTALL) $(INSTALL_OWNER) -m $(shlib_mode) group_file.la $(DESTDIR)$(plugindir); \ + INSTALL_BACKUP='~' $(LIBTOOL) $(LTFLAGS) --mode=install $(INSTALL) $(INSTALL_OWNER) -m $(shlib_mode) group_file.la $(DESTDIR)$(plugindir); \ fi uninstall: - -$(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(plugindir)/group_file.la + -$(LIBTOOL) $(LTFLAGS) --mode=uninstall rm -f $(DESTDIR)$(plugindir)/group_file.la -rm -f $(DESTDIR)$(plugindir)/group_file.so~ +splint: + splint $(SPLINT_OPTS) -I$(incdir) -I$(top_builddir) -I$(top_srcdir) $(srcdir)/*.c + cppcheck: cppcheck $(CPPCHECK_OPTS) -I$(incdir) -I$(top_builddir) -I$(top_srcdir) $(srcdir)/*.c check: clean: - -$(LIBTOOL) --mode=clean rm -f *.lo *.o *.la *.a stamp-* core *.core core.* + -$(LIBTOOL) $(LTFLAGS) --mode=clean rm -f *.lo *.o *.la *.a stamp-* core *.core core.* mostlyclean: clean @@ -161,8 +167,8 @@ getgrent.lo: $(srcdir)/getgrent.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_util.h \ $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/getgrent.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/getgrent.c group_file.lo: $(srcdir)/group_file.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_plugin.h \ $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/group_file.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/group_file.c diff -Nru sudo-1.8.12/plugins/group_file/plugin_test.c sudo-1.8.16/plugins/group_file/plugin_test.c --- sudo-1.8.12/plugins/group_file/plugin_test.c 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/group_file/plugin_test.c 2015-10-31 23:35:24.000000000 +0000 @@ -18,7 +18,6 @@ #include #include -#include #include #include #include @@ -101,10 +100,10 @@ return -1; } - if (GROUP_API_VERSION_GET_MAJOR(group_plugin->version) != GROUP_API_VERSION_MAJOR) { + if (SUDO_API_VERSION_GET_MAJOR(group_plugin->version) != GROUP_API_VERSION_MAJOR) { fprintf(stderr, "%s: incompatible group plugin major version %d, expected %d\n", - path, GROUP_API_VERSION_GET_MAJOR(group_plugin->version), + path, SUDO_API_VERSION_GET_MAJOR(group_plugin->version), GROUP_API_VERSION_MAJOR); return -1; } @@ -125,13 +124,15 @@ } } if (ac != 0) { + char *last; + argv = malloc(ac * sizeof(char *)); if (argv == NULL) { perror(NULL); return -1; } ac = 0; - for ((cp = strtok(args, " \t")); cp; (cp = strtok(NULL, " \t"))) + for ((cp = strtok_r(args, " \t", &last)); cp != NULL; (cp = strtok_r(NULL, " \t", &last))) argv[ac++] = cp; } } diff -Nru sudo-1.8.12/plugins/sample/Makefile.in sudo-1.8.16/plugins/sample/Makefile.in --- sudo-1.8.12/plugins/sample/Makefile.in 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sample/Makefile.in 2015-10-31 23:34:59.000000000 +0000 @@ -28,7 +28,7 @@ # Compiler & tools to use CC = @CC@ -LIBTOOL = @LIBTOOL@ --tag=disable-static +LIBTOOL = @LIBTOOL@ SED = @SED@ AWK = @AWK@ @@ -49,6 +49,9 @@ LDFLAGS = @LDFLAGS@ LT_LDFLAGS = @LT_LDFLAGS@ @LT_LDEXPORTS@ +# Flags to pass to libtool +LTFLAGS = --tag=disable-static + # PIE flags PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ @@ -60,6 +63,9 @@ # cppcheck options, usually set in the top-level Makefile CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +# splint options, usually set in the top-level Makefile +SPLINT_OPTS = -D__restrict= -checks + # Where to install things... prefix = @prefix@ exec_prefix = @exec_prefix@ @@ -82,9 +88,6 @@ install_uid = 0 install_gid = 0 -# OS dependent defines -DEFS = @OSDEFS@ - #### End of system configuration section. #### SHELL = @SHELL@ @@ -103,7 +106,7 @@ .SUFFIXES: .o .c .h .lo .c.lo: - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $< + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $< $(shlib_map): $(shlib_exp) @$(AWK) 'BEGIN { print "{\n\tglobal:" } { print "\t\t"$$0";" } END { print "\tlocal:\n\t\t*;\n};" }' $(shlib_exp) > $@ @@ -112,7 +115,7 @@ @$(SED) 's/^/+e /' $(shlib_exp) > $@ sample_plugin.la: $(OBJS) @LT_LDDEP@ - $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) $(SSP_LDFLAGS) $(LT_LDFLAGS) -o $@ $(OBJS) $(LIBS) -module -avoid-version -rpath $(plugindir) -shrext .so + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) $(LDFLAGS) $(SSP_LDFLAGS) $(LT_LDFLAGS) -o $@ $(OBJS) $(LIBS) -module -avoid-version -rpath $(plugindir) -shrext .so pre-install: @@ -129,20 +132,23 @@ install-plugin: install-dirs sample_plugin.la if [ X"$(shlib_enable)" = X"yes" ]; then \ - INSTALL_BACKUP='~' $(LIBTOOL) --mode=install $(INSTALL) $(INSTALL_OWNER) -m $(shlib_mode) sample_plugin.la $(DESTDIR)$(plugindir); \ + INSTALL_BACKUP='~' $(LIBTOOL) $(LTFLAGS) --mode=install $(INSTALL) $(INSTALL_OWNER) -m $(shlib_mode) sample_plugin.la $(DESTDIR)$(plugindir); \ fi uninstall: - -$(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(plugindir)/sample_plugin.la + -$(LIBTOOL) $(LTFLAGS) --mode=uninstall rm -f $(DESTDIR)$(plugindir)/sample_plugin.la -rm -f $(DESTDIR)$(plugindir)/sample_plugin.so~ +splint: + splint $(SPLINT_OPTS) -I$(incdir) -I$(top_builddir) -I$(top_srcdir) $(srcdir)/*.c + cppcheck: cppcheck $(CPPCHECK_OPTS) -I$(incdir) -I$(top_builddir) -I$(top_srcdir) $(srcdir)/*.c check: clean: - -$(LIBTOOL) --mode=clean rm -f *.lo *.o *.la *.a stamp-* core *.core core.* + -$(LIBTOOL) $(LTFLAGS) --mode=clean rm -f *.lo *.o *.la *.a stamp-* core *.core core.* mostlyclean: clean @@ -161,4 +167,4 @@ $(incdir)/sudo_compat.h $(incdir)/sudo_plugin.h \ $(incdir)/sudo_util.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sample_plugin.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/sample_plugin.c diff -Nru sudo-1.8.12/plugins/sample/sample_plugin.c sudo-1.8.16/plugins/sample/sample_plugin.c --- sudo-1.8.12/plugins/sample/sample_plugin.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sample/sample_plugin.c 2015-10-31 23:34:59.000000000 +0000 @@ -21,31 +21,19 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STDBOOL_H # include #else # include "compat/stdbool.h" #endif /* HAVE_STDBOOL_H */ #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include #include @@ -246,7 +234,7 @@ static char * find_editor(int nfiles, char * const files[], char **argv_out[]) { - char *cp, **ep, **nargv, *editor, *editor_path; + char *cp, *last, **ep, **nargv, *editor, *editor_path; int ac, i, nargc, wasblank; /* Lookup EDITOR in user's environment. */ @@ -278,7 +266,7 @@ } } /* If we can't find the editor in the user's PATH, give up. */ - cp = strtok(editor, " \t"); + cp = strtok_r(editor, " \t", &last); if (cp == NULL || (editor_path = find_in_path(editor, plugin_state.envp)) == NULL) { free(editor); @@ -286,7 +274,7 @@ } if (editor_path != editor) free(editor); - nargv = (char **) malloc((nargc + 1 + nfiles + 1) * sizeof(char *)); + nargv = malloc((nargc + 1 + nfiles + 1) * sizeof(char *)); if (nargv == NULL) { sudo_log(SUDO_CONV_ERROR_MSG, "unable to allocate memory\n"); free(editor_path); @@ -294,7 +282,7 @@ } for (ac = 0; cp != NULL && ac < nargc; ac++) { nargv[ac] = cp; - cp = strtok(NULL, " \t"); + cp = strtok_r(NULL, " \t", &last); } nargv[ac++] = "--"; for (i = 0; i < nfiles; ) diff -Nru sudo-1.8.12/plugins/sudoers/alias.c sudo-1.8.16/plugins/sudoers/alias.c --- sudo-1.8.12/plugins/sudoers/alias.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/alias.c 2015-10-31 23:34:59.000000000 +0000 @@ -21,23 +21,14 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRING_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include "sudoers.h" @@ -120,22 +111,31 @@ * Add an alias to the aliases redblack tree. * Returns NULL on success and an error string on failure. */ -char * +const char * alias_add(char *name, int type, struct member *members) { static char errbuf[512]; struct alias *a; debug_decl(alias_add, SUDOERS_DEBUG_ALIAS) - a = sudo_ecalloc(1, sizeof(*a)); + a = calloc(1, sizeof(*a)); + if (a == NULL) { + strlcpy(errbuf, N_("unable to allocate memory"), sizeof(errbuf)); + debug_return_str(errbuf); + } a->name = name; a->type = type; /* a->used = false; */ HLTQ_TO_TAILQ(&a->members, members, entries); - if (rbinsert(aliases, a)) { + switch (rbinsert(aliases, a, NULL)) { + case 1: snprintf(errbuf, sizeof(errbuf), N_("Alias `%s' already defined"), name); alias_free(a); debug_return_str(errbuf); + case -1: + strlcpy(errbuf, N_("unable to allocate memory"), sizeof(errbuf)); + alias_free(a); + debug_return_str(errbuf); } debug_return_str(NULL); } @@ -175,17 +175,17 @@ void *next; debug_decl(alias_free, SUDOERS_DEBUG_ALIAS) - sudo_efree(a->name); + free(a->name); TAILQ_FOREACH_SAFE(m, &a->members, entries, next) { if (m->type == COMMAND) { c = (struct sudo_command *) m->name; - sudo_efree(c->cmnd); - sudo_efree(c->args); + free(c->cmnd); + free(c->args); } - sudo_efree(m->name); - sudo_efree(m); + free(m->name); + free(m); } - sudo_efree(a); + free(a); debug_return; } @@ -209,7 +209,7 @@ debug_return_ptr(rbdelete(aliases, node)); } -void +bool init_aliases(void) { debug_decl(init_aliases, SUDOERS_DEBUG_ALIAS) @@ -218,5 +218,5 @@ rbdestroy(aliases, alias_free); aliases = rbcreate(alias_compare); - debug_return; + debug_return_bool(aliases != NULL); } diff -Nru sudo-1.8.12/plugins/sudoers/audit.c sudo-1.8.16/plugins/sudoers/audit.c --- sudo-1.8.12/plugins/sudoers/audit.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/audit.c 2015-10-31 23:34:59.000000000 +0000 @@ -18,14 +18,7 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #include "sudoers.h" diff -Nru sudo-1.8.12/plugins/sudoers/auth/afs.c sudo-1.8.16/plugins/sudoers/auth/afs.c --- sudo-1.8.12/plugins/sudoers/auth/afs.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/auth/afs.c 2015-10-31 23:35:24.000000000 +0000 @@ -21,25 +21,18 @@ #include +#ifdef HAVE_AFS + #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRING_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include @@ -49,7 +42,7 @@ #include "sudo_auth.h" int -sudo_afs_verify(struct passwd *pw, char *pass, sudo_auth *auth) +sudo_afs_verify(struct passwd *pw, char *pass, sudo_auth *auth, struct sudo_conv_callback *callback) { struct ktc_encryptionKey afs_key; struct ktc_token afs_token; @@ -81,3 +74,5 @@ debug_return_int(AUTH_FAILURE); } + +#endif HAVE_AFS diff -Nru sudo-1.8.12/plugins/sudoers/auth/aix_auth.c sudo-1.8.16/plugins/sudoers/auth/aix_auth.c --- sudo-1.8.12/plugins/sudoers/auth/aix_auth.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/auth/aix_auth.c 2016-03-17 16:13:10.000000000 +0000 @@ -20,25 +20,19 @@ #include +#ifdef HAVE_AIXAUTH + #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRING_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include +#include #include #include @@ -49,8 +43,92 @@ * For a description of the AIX authentication API, see * http://publib16.boulder.ibm.com/doc_link/en_US/a_doc_lib/libs/basetrf1/authenticate.htm */ + +#define AIX_AUTH_UNKNOWN 0 +#define AIX_AUTH_STD 1 +#define AIX_AUTH_PAM 2 + +static int +sudo_aix_authtype(void) +{ + size_t linesize = 0; + ssize_t len; + char *cp, *line = NULL; + bool in_stanza = false; + int authtype = AIX_AUTH_UNKNOWN; + FILE *fp; + debug_decl(sudo_aix_authtype, SUDOERS_DEBUG_AUTH) + + if ((fp = fopen("/etc/security/login.cfg", "r")) != NULL) { + while (authtype == AIX_AUTH_UNKNOWN && (len = getline(&line, &linesize, fp)) != -1) { + /* First remove comments. */ + if ((cp = strchr(line, '#')) != NULL) { + *cp = '\0'; + len = (ssize_t)(cp - line); + } + + /* Next remove trailing newlines and whitespace. */ + while (len > 0 && isspace((unsigned char)line[len - 1])) + line[--len] = '\0'; + + /* Skip blank lines. */ + if (len == 0) + continue; + + /* Match start of the usw stanza. */ + if (!in_stanza) { + if (strncmp(line, "usw:", 4) == 0) + in_stanza = true; + continue; + } + + /* Check for end of the usw stanza. */ + if (!isblank((unsigned char)line[0])) { + in_stanza = false; + break; + } + + /* Skip leading blanks. */ + cp = line; + do { + cp++; + } while (isblank((unsigned char)*cp)); + + /* Match "auth_type = (PAM_AUTH|STD_AUTH)". */ + if (strncmp(cp, "auth_type", 9) != 0) + continue; + cp += 9; + while (isblank((unsigned char)*cp)) + cp++; + if (*cp++ != '=') + continue; + while (isblank((unsigned char)*cp)) + cp++; + if (strcmp(cp, "PAM_AUTH") == 0) + authtype = AIX_AUTH_PAM; + else if (strcmp(cp, "STD_AUTH") == 0) + authtype = AIX_AUTH_STD; + } + free(line); + fclose(fp); + } + + debug_return_int(authtype); +} + int -sudo_aix_verify(struct passwd *pw, char *prompt, sudo_auth *auth) +sudo_aix_init(struct passwd *pw, sudo_auth *auth) +{ + debug_decl(sudo_aix_init, SUDOERS_DEBUG_AUTH) + + /* Check auth_type in /etc/security/login.cfg. */ + if (sudo_aix_authtype() == AIX_AUTH_PAM) + debug_return_int(AUTH_FAILURE); + debug_return_int(AUTH_SUCCESS); +} + +int +sudo_aix_verify(struct passwd *pw, char *prompt, sudo_auth *auth, struct sudo_conv_callback *callback) { char *pass, *message = NULL; int result = 1, reenter = 0; @@ -59,13 +137,14 @@ do { pass = auth_getpass(prompt, def_passwd_timeout * 60, - SUDO_CONV_PROMPT_ECHO_OFF); + SUDO_CONV_PROMPT_ECHO_OFF, callback); if (pass == NULL) break; - sudo_efree(message); + free(message); message = NULL; result = authenticate(pw->pw_name, pass, &reenter, &message); memset_s(pass, SUDO_CONV_REPL_MAX, 0, strlen(pass)); + free(pass); prompt = message; } while (reenter); @@ -79,11 +158,11 @@ msg.msg_type = SUDO_CONV_ERROR_MSG; msg.msg = message; memset(&repl, 0, sizeof(repl)); - sudo_conv(1, &msg, &repl); + sudo_conv(1, &msg, &repl, NULL); } rval = pass ? AUTH_FAILURE : AUTH_INTR; } - sudo_efree(message); + free(message); debug_return_int(rval); } @@ -98,3 +177,5 @@ debug_return_int(AUTH_SUCCESS); } + +#endif /* HAVE_AIXAUTH */ diff -Nru sudo-1.8.12/plugins/sudoers/auth/bsdauth.c sudo-1.8.16/plugins/sudoers/auth/bsdauth.c --- sudo-1.8.12/plugins/sudoers/auth/bsdauth.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/auth/bsdauth.c 2016-03-17 16:13:10.000000000 +0000 @@ -21,25 +21,18 @@ #include +#ifdef HAVE_BSD_AUTH_H + #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRING_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include #include @@ -105,7 +98,7 @@ } int -bsdauth_verify(struct passwd *pw, char *prompt, sudo_auth *auth) +bsdauth_verify(struct passwd *pw, char *prompt, sudo_auth *auth, struct sudo_conv_callback *callback) { char *pass; char *s; @@ -128,9 +121,9 @@ * S/Key. */ if ((s = auth_challenge(as)) == NULL) { - pass = auth_getpass(prompt, def_passwd_timeout * 60, SUDO_CONV_PROMPT_ECHO_OFF); + pass = auth_getpass(prompt, def_passwd_timeout * 60, SUDO_CONV_PROMPT_ECHO_OFF, callback); } else { - pass = auth_getpass(prompt, def_passwd_timeout * 60, SUDO_CONV_PROMPT_ECHO_OFF); + pass = auth_getpass(s, def_passwd_timeout * 60, SUDO_CONV_PROMPT_ECHO_OFF, callback); if (pass && *pass == '\0') { if ((prompt = strrchr(s, '\n'))) prompt++; @@ -144,9 +137,13 @@ len = strlen(prompt) - 1; while (isspace(prompt[len]) || prompt[len] == ':') prompt[len--] = '\0'; - sudo_easprintf(&s, "%s [echo on]: ", prompt); - pass = auth_getpass(prompt, def_passwd_timeout * 60, - SUDO_CONV_PROMPT_ECHO_ON); + if (asprintf(&s, "%s [echo on]: ", prompt) == -1) { + log_warningx(0, N_("unable to allocate memory")); + debug_return_int(AUTH_FATAL); + } + free(pass); + pass = auth_getpass(s, def_passwd_timeout * 60, + SUDO_CONV_PROMPT_ECHO_ON, callback); free(s); } } @@ -154,6 +151,7 @@ if (pass) { authok = auth_userresponse(as, pass, 1); memset_s(pass, SUDO_CONV_REPL_MAX, 0, strlen(pass)); + free(pass); } /* restore old signal handler */ @@ -183,3 +181,5 @@ debug_return_int(AUTH_SUCCESS); } + +#endif /* HAVE_BSD_AUTH_H */ diff -Nru sudo-1.8.12/plugins/sudoers/auth/dce.c sudo-1.8.16/plugins/sudoers/auth/dce.c --- sudo-1.8.12/plugins/sudoers/auth/dce.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/auth/dce.c 2015-10-31 23:35:24.000000000 +0000 @@ -35,25 +35,18 @@ #include +#ifdef HAVE_DCE + #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRING_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include @@ -66,7 +59,7 @@ static int check_dce_status(error_status_t, char *); int -sudo_dce_verify(struct passwd *pw, char *plain_pw, sudo_auth *auth) +sudo_dce_verify(struct passwd *pw, char *plain_pw, sudo_auth *auth, struct sudo_conv_callback *callback) { struct passwd temp_pw; sec_passwd_rec_t password_rec; @@ -191,8 +184,10 @@ debug_decl(check_dce_status, SUDOERS_DEBUG_AUTH) if (input_status == rpc_s_ok) - debug_return_bool(0); + debug_return_int(0); dce_error_inq_text(input_status, error_string, &error_stat); (void) fprintf(stderr, "%s %s\n", comment, error_string); - debug_return_bool(1); + debug_return_int(1); } + +#endif /* HAVE_DCE */ diff -Nru sudo-1.8.12/plugins/sudoers/auth/fwtk.c sudo-1.8.16/plugins/sudoers/auth/fwtk.c --- sudo-1.8.12/plugins/sudoers/auth/fwtk.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/auth/fwtk.c 2016-03-17 16:13:10.000000000 +0000 @@ -21,25 +21,18 @@ #include +#ifdef HAVE_FWTK + #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRING_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include @@ -79,7 +72,7 @@ } int -sudo_fwtk_verify(struct passwd *pw, char *prompt, sudo_auth *auth) +sudo_fwtk_verify(struct passwd *pw, char *prompt, sudo_auth *auth, struct sudo_conv_callback *callback) { char *pass; /* Password from the user */ char buf[SUDO_CONV_REPL_MAX + 12]; /* General prupose buffer */ @@ -98,17 +91,18 @@ /* Get the password/response from the user. */ if (strncmp(resp, "challenge ", 10) == 0) { (void) snprintf(buf, sizeof(buf), "%s\nResponse: ", &resp[10]); - pass = auth_getpass(buf, def_passwd_timeout * 60, SUDO_CONV_PROMPT_ECHO_OFF); + pass = auth_getpass(buf, def_passwd_timeout * 60, SUDO_CONV_PROMPT_ECHO_OFF, callback); if (pass && *pass == '\0') { + free(pass); pass = auth_getpass("Response [echo on]: ", - def_passwd_timeout * 60, SUDO_CONV_PROMPT_ECHO_ON); + def_passwd_timeout * 60, SUDO_CONV_PROMPT_ECHO_ON, callback); } } else if (strncmp(resp, "chalnecho ", 10) == 0) { pass = auth_getpass(&resp[10], def_passwd_timeout * 60, - SUDO_CONV_PROMPT_ECHO_OFF); + SUDO_CONV_PROMPT_ECHO_OFF, callback); } else if (strncmp(resp, "password", 8) == 0) { pass = auth_getpass(prompt, def_passwd_timeout * 60, - SUDO_CONV_PROMPT_ECHO_OFF); + SUDO_CONV_PROMPT_ECHO_OFF, callback); } else if (strncmp(resp, "display ", 8) == 0) { fprintf(stderr, "%s\n", &resp[8]); strlcpy(buf, "response dummy", sizeof(buf)); @@ -139,8 +133,9 @@ sudo_warnx("%s", resp); error = AUTH_FAILURE; done: - memset_s(pass, SUDO_PASS_MAX, 0, strlen(pass)); memset_s(buf, sizeof(buf), 0, sizeof(buf)); + memset_s(pass, SUDO_PASS_MAX, 0, strlen(pass)); + free(pass); debug_return_int(error); } @@ -152,3 +147,5 @@ auth_close(); debug_return_int(AUTH_SUCCESS); } + +#endif /* HAVE_FWTK */ diff -Nru sudo-1.8.12/plugins/sudoers/auth/kerb5.c sudo-1.8.16/plugins/sudoers/auth/kerb5.c --- sudo-1.8.12/plugins/sudoers/auth/kerb5.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/auth/kerb5.c 2015-10-31 23:35:24.000000000 +0000 @@ -24,25 +24,18 @@ #include +#ifdef HAVE_KERB5 + #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRING_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include #ifdef HAVE_HEIMDAL @@ -80,7 +73,9 @@ krb5_get_init_creds_opt_alloc(krb5_context context, krb5_get_init_creds_opt **opts) { - *opts = sudo_emalloc(sizeof(krb5_get_init_creds_opt)); + *opts = malloc(sizeof(krb5_get_init_creds_opt)); + if (*opts == NULL) + return KRB5_CC_NOMEM; krb5_get_init_creds_opt_init(*opts); return 0; } @@ -120,7 +115,11 @@ /* Only rewrite prompt if user didn't specify their own. */ /*if (!strcmp(prompt, PASSPROMPT)) { */ - sudo_easprintf(&krb5_prompt, "Password for %s: ", pname); + if (asprintf(&krb5_prompt, "Password for %s: ", pname) == -1) { + log_warningx(0, N_("unable to allocate memory")); + free(pname); + debug_return_int(AUTH_FATAL); + } /*}*/ free(pname); } @@ -140,8 +139,12 @@ auth->data = (void *) &sudo_krb5_data; /* Stash all our data here */ if (sudo_krb5_instance != NULL) { - sudo_easprintf(&pname, "%s%s%s", pw->pw_name, + int len = asprintf(&pname, "%s%s%s", pw->pw_name, sudo_krb5_instance[0] != '/' ? "/" : "", sudo_krb5_instance); + if (len == -1) { + log_warningx(0, N_("unable to allocate memory")); + debug_return_int(AUTH_FATAL); + } } #ifdef HAVE_KRB5_INIT_SECURE_CONTEXT @@ -171,13 +174,13 @@ done: if (sudo_krb5_instance != NULL) - sudo_efree(pname); + free(pname); debug_return_int(error ? AUTH_FAILURE : AUTH_SUCCESS); } #ifdef HAVE_KRB5_VERIFY_USER int -sudo_krb5_verify(struct passwd *pw, char *pass, sudo_auth *auth) +sudo_krb5_verify(struct passwd *pw, char *pass, sudo_auth *auth, struct sudo_conv_callback *callback) { krb5_context sudo_context; krb5_principal princ; @@ -326,3 +329,5 @@ debug_return_int(error); } #endif + +#endif /* HAVE_KERB5 */ diff -Nru sudo-1.8.12/plugins/sudoers/auth/pam.c sudo-1.8.16/plugins/sudoers/auth/pam.c --- sudo-1.8.12/plugins/sudoers/auth/pam.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/auth/pam.c 2016-03-17 16:13:10.000000000 +0000 @@ -20,25 +20,18 @@ #include +#ifdef HAVE_PAM + #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include @@ -65,11 +58,17 @@ #include "sudo_auth.h" /* Only OpenPAM and Linux PAM use const qualifiers. */ -#if defined(_OPENPAM) || defined(OPENPAM_VERSION) || \ - defined(__LIBPAM_VERSION) || defined(__LINUX_PAM__) +#ifdef PAM_SUN_CODEBASE +# define PAM_CONST +#else # define PAM_CONST const +#endif + +/* Ambiguity in spec: is it an array of pointers or a pointer to an array? */ +#ifdef PAM_SUN_CODEBASE +# define PAM_MSG_GET(msg, n) (*(msg) + (n)) #else -# define PAM_CONST +# define PAM_MSG_GET(msg, n) ((msg)[(n)]) #endif #ifndef PAM_DATA_SILENT @@ -78,20 +77,21 @@ static int converse(int, PAM_CONST struct pam_message **, struct pam_response **, void *); +static struct sudo_conv_callback *conv_callback; +static struct pam_conv pam_conv = { converse, &conv_callback }; static char *def_prompt = PASSPROMPT; -static int getpass_error; +static bool getpass_error; static pam_handle_t *pamh; int sudo_pam_init(struct passwd *pw, sudo_auth *auth) { - static struct pam_conv pam_conv; static int pam_status; + int rc; debug_decl(sudo_pam_init, SUDOERS_DEBUG_AUTH) /* Initial PAM setup */ auth->data = (void *) &pam_status; - pam_conv.conv = converse; pam_status = pam_start(ISSET(sudo_mode, MODE_LOGIN_SHELL) ? def_pam_login_service : def_pam_service, pw->pw_name, &pam_conv, &pamh); if (pam_status != PAM_SUCCESS) { @@ -103,9 +103,21 @@ * Set PAM_RUSER to the invoking user (the "from" user). * We set PAM_RHOST to avoid a bug in Solaris 7 and below. */ - (void) pam_set_item(pamh, PAM_RUSER, user_name); + rc = pam_set_item(pamh, PAM_RUSER, user_name); + if (rc != PAM_SUCCESS) { + const char *errstr = pam_strerror(pamh, rc); + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "pam_set_item(pamh, PAM_RUSER, %s): %s", user_name, + errstr ? errstr : "unknown error"); + } #ifdef __sun__ - (void) pam_set_item(pamh, PAM_RHOST, user_host); + rc = pam_set_item(pamh, PAM_RHOST, user_host); + if (rc != PAM_SUCCESS) { + const char *errstr = pam_strerror(pamh, rc); + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "pam_set_item(pamh, PAM_RHOST, %s): %s", user_host, + errstr ? errstr : "unknown error"); + } #endif /* @@ -113,10 +125,13 @@ * will cause a crash if PAM_TTY is not set so if * there is no tty, set PAM_TTY to the empty string. */ - if (user_ttypath == NULL) - (void) pam_set_item(pamh, PAM_TTY, ""); - else - (void) pam_set_item(pamh, PAM_TTY, user_ttypath); + rc = pam_set_item(pamh, PAM_TTY, user_ttypath ? user_ttypath : ""); + if (rc != PAM_SUCCESS) { + const char *errstr = pam_strerror(pamh, rc); + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "pam_set_item(pamh, PAM_TTY, %s): %s", + user_ttypath ? user_ttypath : "", errstr ? errstr : "unknown error"); + } /* * If PAM session and setcred support is disabled we don't @@ -129,16 +144,22 @@ } int -sudo_pam_verify(struct passwd *pw, char *prompt, sudo_auth *auth) +sudo_pam_verify(struct passwd *pw, char *prompt, sudo_auth *auth, struct sudo_conv_callback *callback) { const char *s; int *pam_status = (int *) auth->data; debug_decl(sudo_pam_verify, SUDOERS_DEBUG_AUTH) def_prompt = prompt; /* for converse */ + getpass_error = false; /* set by converse if user presses ^C */ + conv_callback = callback; /* passed to conversation function */ /* PAM_SILENT prevents the authentication service from generating output. */ *pam_status = pam_authenticate(pamh, PAM_SILENT); + if (getpass_error) { + /* error or ^C from tgetpass() */ + debug_return_int(AUTH_INTR); + } switch (*pam_status) { case PAM_SUCCESS: *pam_status = pam_acct_mgmt(pamh, PAM_SILENT); @@ -174,13 +195,10 @@ /* FALLTHROUGH */ case PAM_AUTH_ERR: case PAM_AUTHINFO_UNAVAIL: - if (getpass_error) { - /* error or ^C from tgetpass() */ - debug_return_int(AUTH_INTR); - } - /* FALLTHROUGH */ case PAM_MAXTRIES: case PAM_PERM_DENIED: + sudo_debug_printf(SUDO_DEBUG_WARN|SUDO_DEBUG_LINENO, + "pam_acct_mgmt: %d", *pam_status); debug_return_int(AUTH_FAILURE); default: if ((s = pam_strerror(pamh, *pam_status)) != NULL) @@ -206,7 +224,7 @@ int sudo_pam_begin_session(struct passwd *pw, char **user_envp[], sudo_auth *auth) { - int status = AUTH_SUCCESS; + int rc, status = AUTH_SUCCESS; int *pam_status = (int *) auth->data; debug_decl(sudo_pam_begin_session, SUDOERS_DEBUG_AUTH) @@ -217,7 +235,12 @@ */ if (pw == NULL) { if (pamh != NULL) { - (void) pam_end(pamh, PAM_SUCCESS | PAM_DATA_SILENT); + rc = pam_end(pamh, PAM_SUCCESS | PAM_DATA_SILENT); + if (rc != PAM_SUCCESS) { + const char *errstr = pam_strerror(pamh, rc); + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "pam_end: %s", errstr ? errstr : "unknown error"); + } pamh = NULL; } goto done; @@ -227,7 +250,13 @@ * Update PAM_USER to reference the user we are running the command * as, as opposed to the user we authenticated as. */ - (void) pam_set_item(pamh, PAM_USER, pw->pw_name); + rc = pam_set_item(pamh, PAM_USER, pw->pw_name); + if (rc != PAM_SUCCESS) { + const char *errstr = pam_strerror(pamh, rc); + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "pam_set_item(pamh, PAM_USER, %s): %s", pw->pw_name, + errstr ? errstr : "unknown error"); + } /* * Reinitialize credentials when changing the user. @@ -237,15 +266,28 @@ * pam_unix will fail but pam_ldap or pam_sss may succeed, but if * pam_unix is first in the stack, pam_setcred() will fail. */ - if (def_pam_setcred) - (void) pam_setcred(pamh, PAM_REINITIALIZE_CRED); + if (def_pam_setcred) { + rc = pam_setcred(pamh, PAM_REINITIALIZE_CRED); + if (rc != PAM_SUCCESS) { + const char *errstr = pam_strerror(pamh, rc); + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "pam_setcred: %s", errstr ? errstr : "unknown error"); + } + } if (def_pam_session) { *pam_status = pam_open_session(pamh, 0); if (*pam_status != PAM_SUCCESS) { - (void) pam_end(pamh, *pam_status | PAM_DATA_SILENT); + const char *errstr = pam_strerror(pamh, *pam_status); + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "pam_open_session: %s", errstr ? errstr : "unknown error"); + rc = pam_end(pamh, *pam_status | PAM_DATA_SILENT); + if (rc != PAM_SUCCESS) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "pam_end: %s", errstr ? errstr : "unknown error"); + } pamh = NULL; - status = AUTH_FAILURE; + status = AUTH_FATAL; goto done; } } @@ -260,12 +302,11 @@ char **pam_envp = pam_getenvlist(pamh); if (pam_envp != NULL) { /* Merge pam env with user env. */ - env_init(*user_envp); - if (!env_merge(pam_envp)) - status = PAM_SYSTEM_ERR; + if (!env_init(*user_envp) || !env_merge(pam_envp)) + status = AUTH_FATAL; *user_envp = env_get(); - env_init(NULL); - sudo_efree(pam_envp); + (void)env_init(NULL); + free(pam_envp); /* XXX - we leak any duplicates that were in pam_envp */ } } @@ -278,7 +319,7 @@ int sudo_pam_end_session(struct passwd *pw, sudo_auth *auth) { - int status = AUTH_SUCCESS; + int rc, status = AUTH_SUCCESS; debug_decl(sudo_pam_end_session, SUDOERS_DEBUG_AUTH) if (pamh != NULL) { @@ -287,13 +328,36 @@ * as, as opposed to the user we authenticated as. * XXX - still needed now that session init is in parent? */ - (void) pam_set_item(pamh, PAM_USER, pw->pw_name); - if (def_pam_session) - (void) pam_close_session(pamh, PAM_SILENT); - if (def_pam_setcred) - (void) pam_setcred(pamh, PAM_DELETE_CRED | PAM_SILENT); - if (pam_end(pamh, PAM_SUCCESS | PAM_DATA_SILENT) != PAM_SUCCESS) - status = AUTH_FAILURE; + rc = pam_set_item(pamh, PAM_USER, pw->pw_name); + if (rc != PAM_SUCCESS) { + const char *errstr = pam_strerror(pamh, rc); + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "pam_set_item(pamh, PAM_USER, %s): %s", pw->pw_name, + errstr ? errstr : "unknown error"); + } + if (def_pam_session) { + rc = pam_close_session(pamh, PAM_SILENT); + if (rc != PAM_SUCCESS) { + const char *errstr = pam_strerror(pamh, rc); + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "pam_close_session: %s", errstr ? errstr : "unknown error"); + } + } + if (def_pam_setcred) { + rc = pam_setcred(pamh, PAM_DELETE_CRED | PAM_SILENT); + if (rc != PAM_SUCCESS) { + const char *errstr = pam_strerror(pamh, rc); + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "pam_setcred: %s", errstr ? errstr : "unknown error"); + } + } + rc = pam_end(pamh, PAM_SUCCESS | PAM_DATA_SILENT); + if (rc != PAM_SUCCESS) { + const char *errstr = pam_strerror(pamh, rc); + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "pam_end: %s", errstr ? errstr : "unknown error"); + status = AUTH_FATAL; + } pamh = NULL; } @@ -306,32 +370,48 @@ #ifdef PAM_TEXT_DOMAIN # define PAM_PROMPT_IS_PASSWORD(_p) \ - (strcmp((_p), dgt(PAM_TEXT_DOMAIN, "Password: ")) == 0 || \ - strcmp((_p), dgt(PAM_TEXT_DOMAIN, "Password:")) == 0) + (strcmp((_p), dgt(PAM_TEXT_DOMAIN, "Password:")) == 0 || \ + strcmp((_p), dgt(PAM_TEXT_DOMAIN, "Password: ")) == 0 || \ + PROMPT_IS_PASSWORD(_p)) #else # define PAM_PROMPT_IS_PASSWORD(_p) PROMPT_IS_PASSWORD(_p) #endif /* PAM_TEXT_DOMAIN */ /* - * ``Conversation function'' for PAM. - * XXX - does not handle PAM_BINARY_PROMPT + * ``Conversation function'' for PAM <-> human interaction. */ static int converse(int num_msg, PAM_CONST struct pam_message **msg, - struct pam_response **response, void *appdata_ptr) + struct pam_response **reply_out, void *vcallback) { - struct pam_response *pr; - PAM_CONST struct pam_message *pm; + struct sudo_conv_callback *callback = NULL; + struct pam_response *reply; const char *prompt; char *pass; int n, type; - int ret = PAM_AUTH_ERR; + int ret = PAM_SUCCESS; debug_decl(converse, SUDOERS_DEBUG_AUTH) - if ((*response = calloc(num_msg, sizeof(struct pam_response))) == NULL) - debug_return_int(PAM_SYSTEM_ERR); + if (num_msg <= 0 || num_msg > PAM_MAX_NUM_MSG) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "invalid number of PAM messages: %d", num_msg); + debug_return_int(PAM_CONV_ERR); + } + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "number of PAM messages: %d", num_msg); + + if ((reply = calloc(num_msg, sizeof(struct pam_response))) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_int(PAM_BUF_ERR); + } + *reply_out = reply; + + if (vcallback != NULL) + callback = *((struct sudo_conv_callback **)vcallback); + + for (n = 0; n < num_msg; n++) { + PAM_CONST struct pam_message *pm = PAM_MSG_GET(msg, n); - for (pr = *response, pm = *msg, n = num_msg; n--; pr++, pm++) { type = SUDO_CONV_PROMPT_ECHO_OFF; switch (pm->msg_style) { case PAM_PROMPT_ECHO_ON: @@ -362,18 +442,20 @@ prompt = pm->msg; } /* Read the password unless interrupted. */ - pass = auth_getpass(prompt, def_passwd_timeout * 60, type); + pass = auth_getpass(prompt, def_passwd_timeout * 60, type, callback); if (pass == NULL) { /* Error (or ^C) reading password, don't try again. */ - getpass_error = 1; -#if (defined(__darwin__) || defined(__APPLE__)) && !defined(OPENPAM_VERSION) - pass = ""; -#else + getpass_error = true; goto done; -#endif } - pr->resp = sudo_estrdup(pass); - memset_s(pass, SUDO_CONV_REPL_MAX, 0, strlen(pass)); + if (strlen(pass) >= PAM_MAX_RESP_SIZE) { + 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)); + goto done; + } + reply[n].resp = pass; /* auth_getpass() malloc's a copy */ break; case PAM_TEXT_INFO: if (pm->msg) @@ -386,24 +468,29 @@ } break; default: + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unsupported message style: %d", pm->msg_style); ret = PAM_CONV_ERR; goto done; } } - ret = PAM_SUCCESS; done: if (ret != PAM_SUCCESS) { /* Zero and free allocated memory and return an error. */ - for (pr = *response, n = num_msg; n--; pr++) { + for (n = 0; n < num_msg; n++) { + struct pam_response *pr = &reply[n]; + if (pr->resp != NULL) { memset_s(pr->resp, SUDO_CONV_REPL_MAX, 0, strlen(pr->resp)); free(pr->resp); pr->resp = NULL; } } - free(*response); - *response = NULL; + free(reply); + *reply_out = NULL; } debug_return_int(ret); } + +#endif /* HAVE_PAM */ diff -Nru sudo-1.8.12/plugins/sudoers/auth/passwd.c sudo-1.8.16/plugins/sudoers/auth/passwd.c --- sudo-1.8.12/plugins/sudoers/auth/passwd.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/auth/passwd.c 2015-10-31 23:35:25.000000000 +0000 @@ -22,23 +22,14 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include "sudoers.h" @@ -59,11 +50,11 @@ sudo_setspent(); auth->data = sudo_getepw(pw); sudo_endspent(); - debug_return_int(AUTH_SUCCESS); + debug_return_int(auth->data ? AUTH_SUCCESS : AUTH_FATAL); } int -sudo_passwd_verify(struct passwd *pw, char *pass, sudo_auth *auth) +sudo_passwd_verify(struct passwd *pw, char *pass, sudo_auth *auth, struct sudo_conv_callback *callback) { char sav, *epass; char *pw_epasswd = auth->data; @@ -71,7 +62,9 @@ int matched = 0; debug_decl(sudo_passwd_verify, SUDOERS_DEBUG_AUTH) - pw_len = strlen(pw_epasswd); + /* An empty plain-text password must match an empty encrypted password. */ + if (pass[0] == '\0') + debug_return_int(pw_epasswd[0] ? AUTH_FAILURE : AUTH_SUCCESS); #ifdef HAVE_GETAUTHUID /* Ultrix shadow passwords may use crypt16() */ @@ -85,6 +78,7 @@ * If this turns out not to be safe we will have to use OS #ifdef's (sigh). */ sav = pass[8]; + pw_len = strlen(pw_epasswd); if (pw_len == DESLEN || HAS_AGEINFO(pw_epasswd, pw_len)) pass[8] = '\0'; @@ -115,7 +109,7 @@ if (pw_epasswd != NULL) { memset_s(pw_epasswd, SUDO_CONV_REPL_MAX, 0, strlen(pw_epasswd)); - sudo_efree(pw_epasswd); + free(pw_epasswd); } debug_return_int(AUTH_SUCCESS); } diff -Nru sudo-1.8.12/plugins/sudoers/auth/rfc1938.c sudo-1.8.16/plugins/sudoers/auth/rfc1938.c --- sudo-1.8.12/plugins/sudoers/auth/rfc1938.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/auth/rfc1938.c 2015-10-31 23:35:24.000000000 +0000 @@ -21,25 +21,18 @@ #include +#if defined(HAVE_SKEY) || defined(HAVE_OPIE) + #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #if defined(HAVE_SKEY) @@ -65,6 +58,7 @@ sudo_rfc1938_setup(struct passwd *pw, char **promptp, sudo_auth *auth) { char challenge[256]; + size_t challenge_len; static char *orig_prompt = NULL, *new_prompt = NULL; static int op_len, np_size; static struct RFC1938 rfc1938; @@ -108,9 +102,15 @@ } /* Get space for new prompt with embedded challenge */ - if (np_size < op_len + strlen(challenge) + 7) { - np_size = op_len + strlen(challenge) + 7; - new_prompt = (char *) sudo_erealloc(new_prompt, np_size); + challenge_len = strlen(challenge); + if (np_size < op_len + challenge_len + 7) { + char *p = realloc(new_prompt, op_len + challenge_len + 7); + if (p == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_int(AUTH_FATAL); + } + np_size = op_len + challenge_len + 7; + new_prompt = p; } if (def_long_otp_prompt) @@ -124,7 +124,7 @@ } int -sudo_rfc1938_verify(struct passwd *pw, char *pass, sudo_auth *auth) +sudo_rfc1938_verify(struct passwd *pw, char *pass, sudo_auth *auth, struct sudo_conv_callback *callback) { debug_decl(sudo_rfc1938_verify, SUDOERS_DEBUG_AUTH) @@ -133,3 +133,5 @@ else debug_return_int(AUTH_FAILURE); } + +#endif /* HAVE_SKEY || HAVE_OPIE */ diff -Nru sudo-1.8.12/plugins/sudoers/auth/secureware.c sudo-1.8.16/plugins/sudoers/auth/secureware.c --- sudo-1.8.12/plugins/sudoers/auth/secureware.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/auth/secureware.c 2015-10-31 23:35:25.000000000 +0000 @@ -20,25 +20,18 @@ #include +#ifdef HAVE_GETPRPWNAM + #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #ifdef __hpux # undef MAXINT @@ -51,34 +44,38 @@ #include "sudoers.h" #include "sudo_auth.h" +#ifdef __alpha +extern int crypt_type; +#endif + int sudo_secureware_init(struct passwd *pw, sudo_auth *auth) { -#ifdef __alpha - extern int crypt_type; debug_decl(sudo_secureware_init, SUDOERS_DEBUG_AUTH) +#ifdef __alpha if (crypt_type == INT_MAX) debug_return_int(AUTH_FAILURE); /* no shadow */ -#else - debug_decl(secureware_init, SUDOERS_DEBUG_AUTH) #endif + sudo_setspent(); auth->data = sudo_getepw(pw); sudo_endspent(); - debug_return_int(AUTH_SUCCESS); + debug_return_int(auth->data ? AUTH_SUCCESS : AUTH_FATAL); } int -sudo_secureware_verify(struct passwd *pw, char *pass, sudo_auth *auth) +sudo_secureware_verify(struct passwd *pw, char *pass, sudo_auth *auth, struct sudo_conv_callback *callback) { char *pw_epasswd = auth->data; char *epass = NULL; debug_decl(sudo_secureware_verify, SUDOERS_DEBUG_AUTH) -#ifdef __alpha - { - extern int crypt_type; + /* An empty plain-text password must match an empty encrypted password. */ + if (pass[0] == '\0') + debug_return_int(pw_epasswd[0] ? AUTH_FAILURE : AUTH_SUCCESS); + +#if defined(__alpha) # ifdef HAVE_DISPCRYPT epass = dispcrypt(pass, pw_epasswd, crypt_type); # else @@ -87,7 +84,6 @@ else if (crypt_type == AUTH_CRYPT_CRYPT16) epass = crypt(pass, pw_epasswd); # endif /* HAVE_DISPCRYPT */ - } #elif defined(HAVE_BIGCRYPT) epass = bigcrypt(pass, pw_epasswd); #endif /* __alpha */ @@ -107,7 +103,9 @@ if (pw_epasswd != NULL) { memset_s(pw_epasswd, SUDO_CONV_REPL_MAX, 0, strlen(pw_epasswd)); - sudo_efree(pw_epasswd); + free(pw_epasswd); } debug_return_int(AUTH_SUCCESS); } + +#endif /* HAVE_GETPRPWNAM */ diff -Nru sudo-1.8.12/plugins/sudoers/auth/securid5.c sudo-1.8.16/plugins/sudoers/auth/securid5.c --- sudo-1.8.12/plugins/sudoers/auth/securid5.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/auth/securid5.c 2016-03-17 16:13:10.000000000 +0000 @@ -25,25 +25,18 @@ #include +#ifdef HAVE_SECURID + #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include /* Needed for SecurID v5.0 Authentication on UNIX */ @@ -146,14 +139,14 @@ * incorrect authentication, fatal on errors */ int -sudo_securid_verify(struct passwd *pw, char *pass, sudo_auth *auth) +sudo_securid_verify(struct passwd *pw, char *pass, sudo_auth *auth, struct sudo_conv_callback *callback) { SDI_HANDLE *sd = (SDI_HANDLE *) auth->data; int rval; debug_decl(sudo_securid_verify, SUDOERS_DEBUG_AUTH) pass = auth_getpass("Enter your PASSCODE: ", - def_passwd_timeout * 60, SUDO_CONV_PROMPT_ECHO_OFF); + def_passwd_timeout * 60, SUDO_CONV_PROMPT_ECHO_OFF, callback); /* Have ACE verify password */ switch (SD_Check(*sd, pass, pw->pw_name)) { @@ -184,11 +177,15 @@ /* Sometimes (when current token close to expire?) ACE challenges for the next token displayed (entered without the PIN) */ + if (pass != NULL) { + memset_s(pass, SUDO_PASS_MAX, 0, strlen(pass)); + free(pass); + } pass = auth_getpass("\ !!! ATTENTION !!!\n\ Wait for the token code to change, \n\ then enter the new token code.\n", \ - def_passwd_timeout * 60, SUDO_CONV_PROMPT_ECHO_OFF); + def_passwd_timeout * 60, SUDO_CONV_PROMPT_ECHO_OFF, callback); if (SD_Next(*sd, pass) == ACM_OK) { rval = AUTH_SUCCESS; @@ -219,6 +216,13 @@ /* Free resources */ SD_Close(*sd); + if (pass != NULL) { + memset_s(pass, SUDO_PASS_MAX, 0, strlen(pass)); + free(pass); + } + /* Return stored state to calling process */ debug_return_int(rval); } + +#endif /* HAVE_SECURID */ diff -Nru sudo-1.8.12/plugins/sudoers/auth/sia.c sudo-1.8.16/plugins/sudoers/auth/sia.c --- sudo-1.8.12/plugins/sudoers/auth/sia.c 2015-02-01 02:02:45.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/auth/sia.c 2016-03-17 16:13:10.000000000 +0000 @@ -23,25 +23,18 @@ #include +#ifdef HAVE_SIA_SES_INIT + #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include #include @@ -49,107 +42,113 @@ #include "sudoers.h" #include "sudo_auth.h" -static int sudo_collect(int, int, uchar_t *, int, prompt_t *); - -static char *def_prompt; static char **sudo_argv; static int sudo_argc; -#define PROMPT_IS_PASSWORD(_p) \ - (strncmp((_p), "Password:", 9) == 0 && \ - ((_p)[9] == '\0' || ((_p)[9] == ' ' && (_p)[10] == '\0'))) - -/* - * Collection routine (callback) for limiting the timeouts in SIA - * prompts and (possibly) setting a custom prompt. - */ -static int -sudo_collect(int timeout, int rendition, uchar_t *title, int nprompts, - prompt_t *prompts) -{ - int rval; - sigset_t mask, omask; - debug_decl(sudo_collect, SUDOERS_DEBUG_AUTH) - - switch (rendition) { - case SIAFORM: - case SIAONELINER: - if (timeout <= 0 || timeout > def_passwd_timeout * 60) - timeout = def_passwd_timeout * 60; - /* - * Substitute custom prompt if a) the sudo prompt is not "Password:" - * and b) the SIA prompt is "Password:" (so we know it is safe). - * This keeps us from overwriting things like S/Key challenges. - */ - if (!PROMPT_IS_PASSWORD(def_prompt) && - PROMPT_IS_PASSWORD((char *)prompts[0].prompt)) - prompts[0].prompt = (unsigned char *)def_prompt; - break; - default: - break; - } - - /* Unblock SIGINT and SIGQUIT during password entry. */ - sigemptyset(&mask); - sigaddset(&mask, SIGINT); - sigaddset(&mask, SIGQUIT); - sigprocmask(SIG_UNBLOCK, &mask, &omask); - - rval = sia_collect_trm(timeout, rendition, title, nprompts, prompts); - - /* Restore previous signal mask. */ - sigprocmask(SIG_SETMASK, &omask, NULL); - - debug_return_int(rval); -} - int sudo_sia_setup(struct passwd *pw, char **promptp, sudo_auth *auth) { - SIAENTITY *siah = NULL; + SIAENTITY *siah; int i; debug_decl(sudo_sia_setup, SUDOERS_DEBUG_AUTH) /* Rebuild argv for sia_ses_init() */ sudo_argc = NewArgc + 1; - sudo_argv = sudo_emallocarray(sudo_argc + 1, sizeof(char *)); + sudo_argv = reallocarray(NULL, sudo_argc + 1, sizeof(char *)); + if (sudo_argv == NULL) { + log_warningx(0, N_("unable to allocate memory")); + debug_return_int(AUTH_FATAL); + } sudo_argv[0] = "sudo"; for (i = 0; i < NewArgc; i++) sudo_argv[i + 1] = NewArgv[i]; sudo_argv[sudo_argc] = NULL; - if (sia_ses_init(&siah, sudo_argc, sudo_argv, NULL, pw->pw_name, user_ttypath, 1, NULL) != SIASUCCESS) { - + /* We don't let SIA prompt the user for input. */ + if (sia_ses_init(&siah, sudo_argc, sudo_argv, NULL, pw->pw_name, user_ttypath, 0, NULL) != SIASUCCESS) { log_warning(0, N_("unable to initialize SIA session")); debug_return_int(AUTH_FATAL); } - auth->data = (void *) siah; + auth->data = siah; debug_return_int(AUTH_SUCCESS); } int -sudo_sia_verify(struct passwd *pw, char *prompt, sudo_auth *auth) +sudo_sia_verify(struct passwd *pw, char *prompt, sudo_auth *auth, + struct sudo_conv_callback *callback) { - SIAENTITY *siah = (SIAENTITY *) auth->data; + SIAENTITY *siah = auth->data; + char *pass; + int rc; debug_decl(sudo_sia_verify, SUDOERS_DEBUG_AUTH) - def_prompt = prompt; /* for sudo_collect */ + /* Get password, return AUTH_INTR if we got ^C */ + pass = auth_getpass(prompt, def_passwd_timeout * 60, + SUDO_CONV_PROMPT_ECHO_OFF, callback); + if (pass == NULL) + debug_return_int(AUTH_INTR); + + /* Check password and zero out plaintext copy. */ + rc = sia_ses_authent(NULL, pass, siah); + memset_s(pass, SUDO_CONV_REPL_MAX, 0, strlen(pass)); + free(pass); - /* XXX - need a way to detect user hitting ^C or EOF at prompt */ - if (sia_ses_reauthent(sudo_collect, siah) == SIASUCCESS) + if (rc == SIASUCCESS) debug_return_int(AUTH_SUCCESS); - else - debug_return_int(AUTH_FAILURE); + if (ISSET(rc, SIASTOP)) + debug_return_int(AUTH_FATAL); + debug_return_int(AUTH_FAILURE); } int sudo_sia_cleanup(struct passwd *pw, sudo_auth *auth) { - SIAENTITY *siah = (SIAENTITY *) auth->data; + SIAENTITY *siah = auth->data; debug_decl(sudo_sia_cleanup, SUDOERS_DEBUG_AUTH) (void) sia_ses_release(&siah); - sudo_efree(sudo_argv); + auth->data = NULL; + free(sudo_argv); debug_return_int(AUTH_SUCCESS); } + +int +sudo_sia_begin_session(struct passwd *pw, char **user_envp[], sudo_auth *auth) +{ + SIAENTITY *siah; + int status = AUTH_FATAL; + debug_decl(sudo_sia_begin_session, SUDOERS_DEBUG_AUTH) + + /* Re-init sia for the target user's session. */ + if (sia_ses_init(&siah, NewArgc, NewArgv, NULL, pw->pw_name, user_ttypath, 0, NULL) != SIASUCCESS) { + log_warning(0, N_("unable to initialize SIA session")); + goto done; + } + + if (sia_make_entity_pwd(pw, siah) != SIASUCCESS) { + sudo_warn("sia_make_entity_pwd"); + goto done; + } + + status = AUTH_FAILURE; /* no more fatal errors. */ + + siah->authtype = SIA_A_NONE; + if (sia_ses_estab(sia_collect_trm, siah) != SIASUCCESS) { + sudo_warn("sia_ses_estab"); + goto done; + } + + if (sia_ses_launch(sia_collect_trm, siah) != SIASUCCESS) { + sudo_warn("sia_ses_launch"); + goto done; + } + + status = AUTH_SUCCESS; + +done: + (void) sia_ses_release(&siah); + debug_return_int(status); +} + +#endif /* HAVE_SIA_SES_INIT */ diff -Nru sudo-1.8.12/plugins/sudoers/auth/sudo_auth.c sudo-1.8.16/plugins/sudoers/auth/sudo_auth.c --- sudo-1.8.12/plugins/sudoers/auth/sudo_auth.c 2015-02-01 02:02:45.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/auth/sudo_auth.c 2016-03-17 16:13:10.000000000 +0000 @@ -22,23 +22,14 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include #include @@ -49,6 +40,9 @@ static sudo_auth auth_switch[] = { /* Standalone entries first */ +#ifdef HAVE_AIXAUTH + AUTH_ENTRY("aixauth", FLAG_STANDALONE, sudo_aix_init, NULL, sudo_aix_verify, sudo_aix_cleanup, NULL, NULL) +#endif #ifdef HAVE_PAM AUTH_ENTRY("pam", FLAG_STANDALONE, sudo_pam_init, NULL, sudo_pam_verify, sudo_pam_cleanup, sudo_pam_begin_session, sudo_pam_end_session) #endif @@ -56,10 +50,7 @@ AUTH_ENTRY("SecurId", FLAG_STANDALONE, sudo_securid_init, sudo_securid_setup, sudo_securid_verify, NULL, NULL, NULL) #endif #ifdef HAVE_SIA_SES_INIT - AUTH_ENTRY("sia", FLAG_STANDALONE, NULL, sudo_sia_setup, sudo_sia_verify, sudo_sia_cleanup, NULL, NULL) -#endif -#ifdef HAVE_AIXAUTH - AUTH_ENTRY("aixauth", FLAG_STANDALONE, NULL, NULL, sudo_aix_verify, sudo_aix_cleanup, NULL, NULL) + AUTH_ENTRY("sia", FLAG_STANDALONE, NULL, sudo_sia_setup, sudo_sia_verify, sudo_sia_cleanup, sudo_sia_begin_session, NULL) #endif #ifdef HAVE_FWTK AUTH_ENTRY("fwtk", FLAG_STANDALONE, sudo_fwtk_init, NULL, sudo_fwtk_verify, sudo_fwtk_cleanup, NULL, NULL) @@ -93,7 +84,7 @@ AUTH_ENTRY(NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL) }; -static int standalone; +static bool standalone; /* * Initialize sudoers authentication method(s). @@ -109,20 +100,6 @@ if (auth_switch[0].name == NULL) debug_return_int(0); - /* Make sure we haven't mixed standalone and shared auth methods. */ - standalone = IS_STANDALONE(&auth_switch[0]); - if (standalone && auth_switch[1].name != NULL) { - audit_failure(NewArgc, NewArgv, N_("invalid authentication methods")); - log_warningx(SLOG_SEND_MAIL, - N_("Invalid authentication methods compiled into sudo! " - "You may not mix standalone and non-standalone authentication.")); - debug_return_int(-1); - } - - /* Set FLAG_ONEANDONLY if there is only one auth method. */ - if (auth_switch[1].name == NULL) - SET(auth_switch[0].flags, FLAG_ONEANDONLY); - /* Initialize auth methods and unconfigure the method if necessary. */ for (auth = auth_switch; auth->name; auth++) { if (auth->init && !IS_DISABLED(auth)) { @@ -134,6 +111,50 @@ break; /* assume error msg already printed */ } } + + /* + * Make sure we haven't mixed standalone and shared auth methods. + * If there are multiple standalone methods, only use the first one. + */ + if ((standalone = IS_STANDALONE(&auth_switch[0]))) { + bool found = false; + for (auth = auth_switch; auth->name; auth++) { + if (IS_DISABLED(auth)) + continue; + if (!IS_STANDALONE(auth)) { + audit_failure(NewArgc, NewArgv, + N_("invalid authentication methods")); + log_warningx(SLOG_SEND_MAIL, + N_("Invalid authentication methods compiled into sudo! " + "You may not mix standalone and non-standalone authentication.")); + debug_return_int(-1); + } + if (!found) { + /* Found first standalone method. */ + found = true; + continue; + } + /* Disable other standalone methods. */ + SET(auth->flags, FLAG_DISABLED); + } + } + + /* Set FLAG_ONEANDONLY if there is only one auth method. */ + for (auth = auth_switch; auth->name; auth++) { + /* Find first enabled auth method. */ + if (!IS_DISABLED(auth)) { + sudo_auth *first = auth; + /* Check for others. */ + for (; auth->name; auth++) { + if (!IS_DISABLED(auth)) + break; + } + if (auth->name == NULL) + SET(first->flags, FLAG_ONEANDONLY); + break; + } + } + debug_return_int(status == AUTH_FATAL ? -1 : 0); } @@ -188,11 +209,11 @@ * Returns true if verified, false if not or -1 on error. */ int -verify_user(struct passwd *pw, char *prompt, int validated) +verify_user(struct passwd *pw, char *prompt, int validated, + struct sudo_conv_callback *callback) { unsigned int ntries; int rval, status, success = AUTH_FAILURE; - char *p; sudo_auth *auth; sigset_t mask, omask; sigaction_t sa, saved_sigtstp; @@ -227,6 +248,7 @@ for (ntries = 0; ntries < def_passwd_tries; ntries++) { int num_methods = 0; + char *pass = NULL; /* If user attempted to interrupt password verify, quit now. */ if (user_interrupted()) @@ -256,12 +278,10 @@ } /* Get the password unless the auth function will do it for us */ - if (standalone) { - p = prompt; - } else { - p = auth_getpass(prompt, def_passwd_timeout * 60, - SUDO_CONV_PROMPT_ECHO_OFF); - if (p == NULL) + if (!standalone) { + pass = auth_getpass(prompt, def_passwd_timeout * 60, + SUDO_CONV_PROMPT_ECHO_OFF, callback); + if (pass == NULL) break; } @@ -270,12 +290,16 @@ if (IS_DISABLED(auth)) continue; - success = auth->status = (auth->verify)(pw, p, auth); + success = auth->status = + (auth->verify)(pw, standalone ? prompt : pass, auth, callback); if (success != AUTH_FAILURE) break; } - if (!standalone) - memset_s(p, SUDO_CONV_REPL_MAX, 0, strlen(p)); + if (!standalone) { + memset_s(pass, SUDO_CONV_REPL_MAX, 0, strlen(pass)); + free(pass); + pass = NULL; + } if (success != AUTH_FAILURE) goto done; @@ -321,11 +345,11 @@ for (auth = auth_switch; auth->name; auth++) { if (auth->begin_session && !IS_DISABLED(auth)) { status = (auth->begin_session)(pw, user_env, auth); - if (status == AUTH_FATAL) + if (status != AUTH_SUCCESS) break; /* assume error msg already printed */ } } - debug_return_int(status == AUTH_FATAL ? -1 : 1); + debug_return_int(status == AUTH_SUCCESS ? 1 : -1); } bool @@ -365,8 +389,14 @@ debug_return_int(status == AUTH_FATAL ? -1 : 1); } +/* + * Prompts the user for a password using the conversation function. + * Returns the plaintext password or NULL. + * The user is responsible for freeing the returned value. + */ char * -auth_getpass(const char *prompt, int timeout, int type) +auth_getpass(const char *prompt, int timeout, int type, + struct sudo_conv_callback *callback) { struct sudo_conv_message msg; struct sudo_conv_reply repl; @@ -394,7 +424,7 @@ msg.timeout = def_passwd_timeout * 60; msg.msg = prompt; memset(&repl, 0, sizeof(repl)); - sudo_conv(1, &msg, &repl); + sudo_conv(1, &msg, &repl, callback); /* XXX - check for ENOTTY? */ /* Restore previous signal mask. */ diff -Nru sudo-1.8.12/plugins/sudoers/auth/sudo_auth.h sudo-1.8.16/plugins/sudoers/auth/sudo_auth.h --- sudo-1.8.12/plugins/sudoers/auth/sudo_auth.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/auth/sudo_auth.h 2015-10-31 23:35:24.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999-2005, 2007-2012 Todd C. Miller + * Copyright (c) 1999-2005, 2007-2015 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 @@ -30,7 +30,7 @@ void *data; /* method-specific data pointer */ int (*init)(struct passwd *pw, struct sudo_auth *auth); int (*setup)(struct passwd *pw, char **prompt, struct sudo_auth *auth); - int (*verify)(struct passwd *pw, char *p, struct sudo_auth *auth); + int (*verify)(struct passwd *pw, char *p, struct sudo_auth *auth, struct sudo_conv_callback *callback); int (*cleanup)(struct passwd *pw, struct sudo_auth *auth); int (*begin_session)(struct passwd *pw, char **user_env[], struct sudo_auth *auth); int (*end_session)(struct passwd *pw, struct sudo_auth *auth); @@ -47,46 +47,49 @@ #define IS_ONEANDONLY(x) ((x)->flags & FLAG_ONEANDONLY) /* Like tgetpass() but uses conversation function */ -char *auth_getpass(const char *prompt, int timeout, int type); +char *auth_getpass(const char *prompt, int timeout, int type, + struct sudo_conv_callback *callback); /* Pointer to conversation function to use with auth_getpass(). */ extern sudo_conv_t sudo_conv; /* Prototypes for standalone methods */ int bsdauth_init(struct passwd *pw, sudo_auth *auth); -int bsdauth_verify(struct passwd *pw, char *prompt, sudo_auth *auth); +int bsdauth_verify(struct passwd *pw, char *prompt, sudo_auth *auth, struct sudo_conv_callback *callback); int bsdauth_cleanup(struct passwd *pw, sudo_auth *auth); -int sudo_aix_verify(struct passwd *pw, char *pass, sudo_auth *auth); +int sudo_aix_init(struct passwd *pw, sudo_auth *auth); +int sudo_aix_verify(struct passwd *pw, char *pass, sudo_auth *auth, struct sudo_conv_callback *callback); int sudo_aix_cleanup(struct passwd *pw, sudo_auth *auth); int sudo_fwtk_init(struct passwd *pw, sudo_auth *auth); -int sudo_fwtk_verify(struct passwd *pw, char *prompt, sudo_auth *auth); +int sudo_fwtk_verify(struct passwd *pw, char *prompt, sudo_auth *auth, struct sudo_conv_callback *callback); int sudo_fwtk_cleanup(struct passwd *pw, sudo_auth *auth); int sudo_pam_init(struct passwd *pw, sudo_auth *auth); -int sudo_pam_verify(struct passwd *pw, char *prompt, sudo_auth *auth); +int sudo_pam_verify(struct passwd *pw, char *prompt, sudo_auth *auth, struct sudo_conv_callback *callback); int sudo_pam_cleanup(struct passwd *pw, sudo_auth *auth); int sudo_pam_begin_session(struct passwd *pw, char **user_env[], sudo_auth *auth); int sudo_pam_end_session(struct passwd *pw, sudo_auth *auth); int sudo_securid_init(struct passwd *pw, sudo_auth *auth); int sudo_securid_setup(struct passwd *pw, char **prompt, sudo_auth *auth); -int sudo_securid_verify(struct passwd *pw, char *pass, sudo_auth *auth); +int sudo_securid_verify(struct passwd *pw, char *pass, sudo_auth *auth, struct sudo_conv_callback *callback); int sudo_sia_setup(struct passwd *pw, char **prompt, sudo_auth *auth); -int sudo_sia_verify(struct passwd *pw, char *prompt, sudo_auth *auth); +int sudo_sia_verify(struct passwd *pw, char *prompt, sudo_auth *auth, struct sudo_conv_callback *callback); int sudo_sia_cleanup(struct passwd *pw, sudo_auth *auth); +int sudo_sia_begin_session(struct passwd *pw, char **user_env[], sudo_auth *auth); /* Prototypes for normal methods */ -int sudo_afs_verify(struct passwd *pw, char *pass, sudo_auth *auth); -int sudo_dce_verify(struct passwd *pw, char *pass, sudo_auth *auth); +int sudo_afs_verify(struct passwd *pw, char *pass, sudo_auth *auth, struct sudo_conv_callback *callback); +int sudo_dce_verify(struct passwd *pw, char *pass, sudo_auth *auth, struct sudo_conv_callback *callback); int sudo_krb5_init(struct passwd *pw, sudo_auth *auth); int sudo_krb5_setup(struct passwd *pw, char **prompt, sudo_auth *auth); -int sudo_krb5_verify(struct passwd *pw, char *pass, sudo_auth *auth); +int sudo_krb5_verify(struct passwd *pw, char *pass, sudo_auth *auth, struct sudo_conv_callback *callback); int sudo_krb5_cleanup(struct passwd *pw, sudo_auth *auth); int sudo_passwd_init(struct passwd *pw, sudo_auth *auth); -int sudo_passwd_verify(struct passwd *pw, char *pass, sudo_auth *auth); +int sudo_passwd_verify(struct passwd *pw, char *pass, sudo_auth *auth, struct sudo_conv_callback *callback); int sudo_passwd_cleanup(struct passwd *pw, sudo_auth *auth); int sudo_rfc1938_setup(struct passwd *pw, char **prompt, sudo_auth *auth); -int sudo_rfc1938_verify(struct passwd *pw, char *pass, sudo_auth *auth); +int sudo_rfc1938_verify(struct passwd *pw, char *pass, sudo_auth *auth, struct sudo_conv_callback *callback); int sudo_secureware_init(struct passwd *pw, sudo_auth *auth); -int sudo_secureware_verify(struct passwd *pw, char *pass, sudo_auth *auth); +int sudo_secureware_verify(struct passwd *pw, char *pass, sudo_auth *auth, struct sudo_conv_callback *callback); int sudo_secureware_cleanup(struct passwd *pw, sudo_auth *auth); /* Fields: name, flags, init, setup, verify, cleanup, begin_sess, end_sess */ diff -Nru sudo-1.8.12/plugins/sudoers/base64.c sudo-1.8.16/plugins/sudoers/base64.c --- sudo-1.8.12/plugins/sudoers/base64.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/base64.c 2015-10-31 23:35:24.000000000 +0000 @@ -20,14 +20,7 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ @@ -60,27 +53,19 @@ */ while (*str != '\0') { for (i = 0; i < 4; i++) { - switch (*str) { - case '=': - str++; - /* FALLTHROUGH */ - case '\0': - ch[i] = '='; + if (*str == '=' || *str == '\0') break; - default: - if ((pos = strchr(b64, *str++)) == NULL) - debug_return_size_t((size_t)-1); - ch[i] = (unsigned char)(pos - b64); - break; - } + if ((pos = strchr(b64, *str++)) == NULL) + debug_return_size_t((size_t)-1); + ch[i] = (unsigned char)(pos - b64); } - if (ch[0] == '=' || ch[1] == '=' || dst == dend) + if (i == 0 || i == 1 || dst == dend) break; *dst++ = (ch[0] << 2) | ((ch[1] & 0x30) >> 4); - if (ch[2] == '=' || dst == dend) + if (i == 2 || dst == dend) break; *dst++ = ((ch[1] & 0x0f) << 4) | ((ch[2] & 0x3c) >> 2); - if (ch[3] == '=' || dst == dend) + if (i == 3 || dst == dend) break; *dst++ = ((ch[2] & 0x03) << 6) | ch[3]; } diff -Nru sudo-1.8.12/plugins/sudoers/boottime.c sudo-1.8.16/plugins/sudoers/boottime.c --- sudo-1.8.12/plugins/sudoers/boottime.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/boottime.c 2015-10-31 23:35:07.000000000 +0000 @@ -20,28 +20,19 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STDBOOL_H # include #else # include "compat/stdbool.h" #endif /* HAVE_STDBOOL_H */ #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ +#include #include #ifdef TIME_WITH_SYS_TIME # include @@ -59,17 +50,18 @@ #include "sudoers.h" /* - * Fill in a struct timeval with the time the system booted. + * Fill in a struct timespec with the time the system booted. * Returns 1 on success and 0 on failure. */ #if defined(__linux__) bool -get_boottime(struct timeval *tv) +get_boottime(struct timespec *ts) { char *line = NULL; size_t linesize = 0; bool found = false; + long long llval; ssize_t len; FILE *fp; debug_decl(get_boottime, SUDOERS_DEBUG_UTIL) @@ -79,12 +71,19 @@ if (fp != NULL) { while ((len = getline(&line, &linesize, fp)) != -1) { if (strncmp(line, "btime ", 6) == 0) { - long long llval = strtonum(line + 6, 1, LLONG_MAX, NULL); + if (line[len - 1] == '\n') + line[len - 1] = '\0'; + llval = strtonum(line + 6, 1, LLONG_MAX, NULL); if (llval > 0) { - tv->tv_sec = (time_t)llval; - tv->tv_usec = 0; + ts->tv_sec = (time_t)llval; + ts->tv_nsec = 0; found = true; + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "found btime in /proc/stat: %lld", llval); break; + } else { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "invalid btime in /proc/stat: %s", line); } } } @@ -98,25 +97,32 @@ #elif defined(HAVE_SYSCTL) && defined(KERN_BOOTTIME) bool -get_boottime(struct timeval *tv) +get_boottime(struct timespec *ts) { size_t size; int mib[2]; + struct timeval tv; debug_decl(get_boottime, SUDOERS_DEBUG_UTIL) mib[0] = CTL_KERN; mib[1] = KERN_BOOTTIME; - size = sizeof(*tv); - if (sysctl(mib, 2, tv, &size, NULL, 0) != -1) + size = sizeof(tv); + if (sysctl(mib, 2, &tv, &size, NULL, 0) != -1) { + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "KERN_BOOTTIME: %lld, %ld", (long long)tv.tv_sec, (long)tv.tv_usec); + TIMEVAL_TO_TIMESPEC(&tv, ts); debug_return_bool(true); + } + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "KERN_BOOTTIME: %s", strerror(errno)); debug_return_bool(false); } #elif defined(HAVE_GETUTXID) bool -get_boottime(struct timeval *tv) +get_boottime(struct timespec *ts) { struct utmpx *ut, key; debug_decl(get_boottime, SUDOERS_DEBUG_UTIL) @@ -125,8 +131,10 @@ key.ut_type = BOOT_TIME; setutxent(); if ((ut = getutxid(&key)) != NULL) { - tv->tv_sec = ut->ut_tv.tv_sec; - tv->tv_usec = ut->ut_tv.tv_usec; + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "BOOT_TIME: %lld, %ld", (long long)ut->ut_tv.tv_sec, + (long)ut->ut_tv.tv_usec); + TIMEVAL_TO_TIMESPEC(&ut->ut_tv, ts); } endutxent(); debug_return_bool(ut != NULL); @@ -135,7 +143,7 @@ #elif defined(HAVE_GETUTID) bool -get_boottime(struct timeval *tv) +get_boottime(struct timespec *ts) { struct utmp *ut, key; debug_decl(get_boottime, SUDOERS_DEBUG_UTIL) @@ -144,8 +152,10 @@ key.ut_type = BOOT_TIME; setutent(); if ((ut = getutid(&key)) != NULL) { - tv->tv_sec = ut->ut_time; - tv->tv_usec = 0; + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "BOOT_TIME: %lld", (long long)ut->ut_time); + ts->tv_sec = ut->ut_time; + ts->tv_nsec = 0; } endutent(); debug_return_bool(ut != NULL); @@ -154,7 +164,7 @@ #else bool -get_boottime(struct timeval *tv) +get_boottime(struct timespec *ts) { debug_decl(get_boottime, SUDOERS_DEBUG_UTIL) debug_return_bool(false); diff -Nru sudo-1.8.12/plugins/sudoers/bsm_audit.c sudo-1.8.16/plugins/sudoers/bsm_audit.c --- sudo-1.8.12/plugins/sudoers/bsm_audit.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/bsm_audit.c 2015-10-31 23:34:59.000000000 +0000 @@ -17,6 +17,8 @@ #include +#ifdef HAVE_BSM_AUDIT + #include #include @@ -43,6 +45,8 @@ # define AUDIT_NOT_CONFIGURED ENOSYS #endif +static au_event_t sudo_audit_event = AUE_sudo; + static int audit_sudo_selected(int sorf) { @@ -67,7 +71,19 @@ } else { mask = &ainfo_addr.ai_mask; } - rc = au_preselect(AUE_sudo, mask, sorf, AU_PRS_REREAD); + rc = au_preselect(sudo_audit_event, mask, sorf, AU_PRS_REREAD); + if (rc == -1) { +#if defined(__APPLE__) && defined(AUE_DARWIN_sudo) + /* + * Mac OS X 10.10 au_preselect() only accepts AUE_DARWIN_sudo. + */ + sudo_audit_event = AUE_DARWIN_sudo; + rc = au_preselect(sudo_audit_event, mask, sorf, AU_PRS_REREAD); + if (rc == -1) +#endif + + sudo_warn("au_preselect"); + } debug_return_int(rc); } @@ -148,9 +164,9 @@ } au_write(aufd, tok); #ifdef __sun - if (au_close(aufd, 1, AUE_sudo, 0) == -1) + if (au_close(aufd, 1, sudo_audit_event, 0) == -1) #else - if (au_close(aufd, 1, AUE_sudo) == -1) + if (au_close(aufd, 1, sudo_audit_event) == -1) #endif { sudo_warn(U_("unable to commit audit record")); @@ -236,9 +252,9 @@ } au_write(aufd, tok); #ifdef __sun - if (au_close(aufd, 1, AUE_sudo, PAD_FAILURE) == -1) + if (au_close(aufd, 1, sudo_audit_event, PAD_FAILURE) == -1) #else - if (au_close(aufd, 1, AUE_sudo) == -1) + if (au_close(aufd, 1, sudo_audit_event) == -1) #endif { sudo_warn(U_("unable to commit audit record")); @@ -246,3 +262,5 @@ } debug_return_int(0); } + +#endif /* HAVE_BSM_AUDIT */ diff -Nru sudo-1.8.12/plugins/sudoers/bsm_audit.h sudo-1.8.16/plugins/sudoers/bsm_audit.h --- sudo-1.8.12/plugins/sudoers/bsm_audit.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/bsm_audit.h 2015-10-31 23:34:59.000000000 +0000 @@ -15,10 +15,10 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _SUDOERS_BSM_AUDIT_H -#define _SUDOERS_BSM_AUDIT_H +#ifndef SUDOERS_BSM_AUDIT_H +#define SUDOERS_BSM_AUDIT_H int bsm_audit_success(char *argv[]); int bsm_audit_failure(char *argv[], char const * const, va_list); -#endif /* _SUDOERS_BSM_AUDIT_H */ +#endif /* SUDOERS_BSM_AUDIT_H */ diff -Nru sudo-1.8.12/plugins/sudoers/check.c sudo-1.8.16/plugins/sudoers/check.c --- sudo-1.8.12/plugins/sudoers/check.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/check.c 2015-10-31 23:35:25.000000000 +0000 @@ -24,23 +24,14 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #ifdef TIME_WITH_SYS_TIME # include #endif @@ -55,36 +46,94 @@ static bool display_lecture(int); static struct passwd *get_authpw(int); +struct getpass_closure { + void *cookie; + struct passwd *auth_pw; +}; + +/* + * Called when getpass is suspended so we can drop the lock. + */ +static int +getpass_suspend(int signo, void *vclosure) +{ + struct getpass_closure *closure = vclosure; + + timestamp_close(closure->cookie); + closure->cookie = NULL; + return 0; +} + +/* + * Called when getpass is resumed so we can reacquire the lock. + */ +static int +getpass_resume(int signo, void *vclosure) +{ + struct getpass_closure *closure = vclosure; + + closure->cookie = timestamp_open(user_name, user_sid); + if (closure->cookie == NULL) + return -1; + if (!timestamp_lock(closure->cookie, closure->auth_pw)) + return -1; + return 0; +} + /* * Returns true if the user successfully authenticates, false if not - * or -1 on error. + * or -1 on fatal error. */ static int check_user_interactive(int validated, int mode, struct passwd *auth_pw) { - int status, rval = true; + struct sudo_conv_callback cb, *callback = NULL; + struct getpass_closure closure; + int status = TS_ERROR; + int rval = -1; + char *prompt; + bool lectured; debug_decl(check_user_interactive, SUDOERS_DEBUG_AUTH) - /* Always need a password when -k was specified with the command. */ - if (ISSET(mode, MODE_IGNORE_TICKET)) - SET(validated, FLAG_CHECK_USER); - - if (build_timestamp(auth_pw) == -1) { - rval = -1; - goto done; + /* Setup closure for getpass_{suspend,resume} */ + closure.auth_pw = auth_pw; + closure.cookie = NULL; + sudo_pw_addref(closure.auth_pw); + + /* Open, lock and read time stamp file if we are using it. */ + if (!ISSET(mode, MODE_IGNORE_TICKET)) { + /* Open time stamp file and check its status. */ + closure.cookie = timestamp_open(user_name, user_sid); + if (timestamp_lock(closure.cookie, closure.auth_pw)) + status = timestamp_status(closure.cookie, closure.auth_pw); + + /* Construct callback for getpass function. */ + memset(&cb, 0, sizeof(cb)); + cb.version = SUDO_CONV_CALLBACK_VERSION; + cb.closure = &closure; + cb.on_suspend = getpass_suspend; + cb.on_resume = getpass_resume; + callback = &cb; } - status = timestamp_status(auth_pw); + switch (status) { + case TS_FATAL: + /* Fatal error (usually setuid failure), unsafe to proceed. */ + goto done; - if (status != TS_CURRENT || ISSET(validated, FLAG_CHECK_USER)) { - char *prompt; - bool lectured; + case TS_CURRENT: + /* Time stamp file is valid and current. */ + if (!ISSET(validated, FLAG_CHECK_USER)) { + rval = true; + break; + } + /* FALLTHROUGH */ + default: /* Bail out if we are non-interactive and a password is required */ if (ISSET(mode, MODE_NONINTERACTIVE)) { validated |= FLAG_NON_INTERACTIVE; log_auth_failure(validated, 0); - rval = -1; goto done; } @@ -93,23 +142,29 @@ /* Expand any escapes in the prompt. */ prompt = expand_prompt(user_prompt ? user_prompt : def_passprompt, - auth_pw->pw_name); - if (prompt == NULL) { - rval = -1; + closure.auth_pw->pw_name); + if (prompt == NULL) goto done; - } - rval = verify_user(auth_pw, prompt, validated); + rval = verify_user(closure.auth_pw, prompt, validated, callback); if (rval == true && lectured) - set_lectured(); - sudo_efree(prompt); + (void)set_lectured(); /* lecture error not fatal */ + free(prompt); + break; } - /* Only update timestamp if user was validated. */ - if (rval == true && ISSET(validated, VALIDATE_SUCCESS) && - !ISSET(mode, MODE_IGNORE_TICKET) && status != TS_ERROR) - update_timestamp(auth_pw); + + /* + * Only update time stamp if user was validated. + * Failure to update the time stamp is not a fatal error. + */ + if (rval == true && ISSET(validated, VALIDATE_SUCCESS) && status != TS_ERROR) + (void)timestamp_update(closure.cookie, closure.auth_pw); done: - debug_return_bool(rval); + if (closure.cookie != NULL) + timestamp_close(closure.cookie); + sudo_pw_delref(closure.auth_pw); + + debug_return_int(rval); } /* @@ -160,7 +215,7 @@ sudo_auth_cleanup(auth_pw); sudo_pw_delref(auth_pw); - debug_return_bool(rval); + debug_return_int(rval); } /* @@ -189,7 +244,7 @@ buf[nread] = '\0'; msg.msg_type = SUDO_CONV_ERROR_MSG; msg.msg = buf; - sudo_conv(1, &msg, &repl); + sudo_conv(1, &msg, &repl, NULL); } fclose(fp); } else { @@ -200,7 +255,7 @@ " #1) Respect the privacy of others.\n" " #2) Think before you type.\n" " #3) With great power comes great responsibility.\n\n"); - sudo_conv(1, &msg, &repl); + sudo_conv(1, &msg, &repl, NULL); } debug_return_bool(true); } diff -Nru sudo-1.8.12/plugins/sudoers/check.h sudo-1.8.16/plugins/sudoers/check.h --- sudo-1.8.12/plugins/sudoers/check.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/check.h 2015-10-31 23:35:24.000000000 +0000 @@ -19,15 +19,15 @@ * Materiel Command, USAF, under agreement number F39502-99-1-0512. */ -#ifndef _SUDOERS_CHECK_H -#define _SUDOERS_CHECK_H +#ifndef SUDOERS_CHECK_H +#define SUDOERS_CHECK_H /* Status codes for timestamp_status() */ #define TS_CURRENT 0 #define TS_OLD 1 #define TS_MISSING 2 -#define TS_NOFILE 3 -#define TS_ERROR 4 +#define TS_ERROR 3 +#define TS_FATAL 4 /* * Time stamps are now stored in a single file which contains multiple @@ -40,6 +40,7 @@ #define TS_GLOBAL 0x01 #define TS_TTY 0x02 #define TS_PPID 0x03 +#define TS_LOCKEXCL 0x04 /* Time stamp flags */ #define TS_DISABLED 0x01 /* entry disabled */ @@ -60,9 +61,12 @@ } u; }; +void *timestamp_open(const char *user, pid_t sid); +void timestamp_close(void *vcookie); +bool timestamp_lock(void *vcookie, struct passwd *pw); +bool timestamp_update(void *vcookie, struct passwd *pw); +int timestamp_status(void *vcookie, struct passwd *pw); bool already_lectured(int status); -bool update_timestamp(struct passwd *pw); -int build_timestamp(struct passwd *pw); -int timestamp_status(struct passwd *pw); +int set_lectured(void); -#endif /* _SUDOERS_CHECK_H */ +#endif /* SUDOERS_CHECK_H */ diff -Nru sudo-1.8.12/plugins/sudoers/defaults.c sudo-1.8.16/plugins/sudoers/defaults.c --- sudo-1.8.12/plugins/sudoers/defaults.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/defaults.c 2016-03-17 16:13:10.000000000 +0000 @@ -23,23 +23,14 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -# ifdef HAVE_UNISTD_H #include -#endif /* HAVE_UNISTD_H */ #include #include @@ -55,7 +46,6 @@ int num; }; -#ifdef LOG_NFACILITIES static struct strmap facilities[] = { #ifdef LOG_AUTHPRIV { "authpriv", LOG_AUTHPRIV }, @@ -73,7 +63,6 @@ { "local7", LOG_LOCAL7 }, { NULL, -1 } }; -#endif /* LOG_NFACILITIES */ static struct strmap priorities[] = { { "alert", LOG_ALERT }, @@ -93,13 +82,13 @@ static bool store_int(char *, struct sudo_defs_types *, int); static bool store_list(char *, struct sudo_defs_types *, int); static bool store_mode(char *, struct sudo_defs_types *, int); -static bool store_str(char *, struct sudo_defs_types *, int); +static int store_str(char *, struct sudo_defs_types *, int); static bool store_syslogfac(char *, struct sudo_defs_types *, int); static bool store_syslogpri(char *, struct sudo_defs_types *, int); static bool store_tuple(char *, struct sudo_defs_types *, int); static bool store_uint(char *, struct sudo_defs_types *, int); static bool store_float(char *, struct sudo_defs_types *, int); -static void list_op(char *, size_t, struct sudo_defs_types *, enum list_ops); +static bool list_op(char *, size_t, struct sudo_defs_types *, enum list_ops); static const char *logfac2str(int); static const char *logpri2str(int); @@ -244,8 +233,14 @@ sudo_warnx(U_("values for `%s' must start with a '/'"), var); debug_return_bool(false); } - if (!store_str(val, cur, op)) { + switch (store_str(val, cur, op)) { + case true: + /* OK */ + break; + case false: sudo_warnx(U_("value `%s' is invalid for option `%s'"), val, var); + /* FALLTHROUGH */ + default: debug_return_bool(false); } break; @@ -340,7 +335,7 @@ * Set default options to compiled-in values. * Any of these may be overridden at runtime by a "Defaults" file. */ -void +bool init_defaults(void) { static int firsttime = 1; @@ -352,11 +347,11 @@ for (def = sudo_defs_table; def->name; def++) { switch (def->type & T_MASK) { case T_STR: - sudo_efree(def->sd_un.str); + free(def->sd_un.str); def->sd_un.str = NULL; break; case T_LIST: - list_op(NULL, 0, def, freeall); + (void)list_op(NULL, 0, def, freeall); break; } memset(&def->sd_un, 0, sizeof(def->sd_un)); @@ -418,17 +413,23 @@ #ifdef UMASK_OVERRIDE def_umask_override = true; #endif - def_iolog_file = sudo_estrdup("%{seq}"); - def_iolog_dir = sudo_estrdup(_PATH_SUDO_IO_LOGDIR); - def_sudoers_locale = sudo_estrdup("C"); + if ((def_iolog_file = strdup("%{seq}")) == NULL) + goto oom; + if ((def_iolog_dir = strdup(_PATH_SUDO_IO_LOGDIR)) == NULL) + goto oom; + if ((def_sudoers_locale = strdup("C")) == NULL) + goto oom; def_env_reset = ENV_RESET; def_set_logname = true; def_closefrom = STDERR_FILENO + 1; - def_pam_service = sudo_estrdup("sudo"); + if ((def_pam_service = strdup("sudo")) == NULL) + goto oom; #ifdef HAVE_PAM_LOGIN - def_pam_login_service = sudo_estrdup("sudo-i"); + if ((def_pam_login_service = strdup("sudo-i")) == NULL) + goto oom; #else - def_pam_login_service = sudo_estrdup("sudo"); + if ((def_pam_login_service = strdup("sudo")) == NULL) + goto oom; #endif #ifdef NO_PAM_SESSION def_pam_session = false; @@ -438,6 +439,8 @@ #ifdef HAVE_INNETGR def_use_netgroups = true; #endif + def_netgroup_tuple = false; + def_sudoedit_checkdir = true; /* Syslog options need special care since they both strings and ints */ #if (LOGGING & SLOG_SYSLOG) @@ -467,36 +470,53 @@ #endif /* Now do the strings */ - def_mailto = sudo_estrdup(MAILTO); - def_mailsub = sudo_estrdup(N_(MAILSUBJECT)); - def_badpass_message = sudo_estrdup(_(INCORRECT_PASSWORD)); - def_lecture_status_dir = sudo_estrdup(_PATH_SUDO_LECTURE_DIR); - def_timestampdir = sudo_estrdup(_PATH_SUDO_TIMEDIR); - def_passprompt = sudo_estrdup(_(PASSPROMPT)); - def_runas_default = sudo_estrdup(RUNAS_DEFAULT); + if ((def_mailto = strdup(MAILTO)) == NULL) + goto oom; + if ((def_mailsub = strdup(N_(MAILSUBJECT))) == NULL) + goto oom; + if ((def_badpass_message = strdup(_(INCORRECT_PASSWORD))) == NULL) + goto oom; + if ((def_lecture_status_dir = strdup(_PATH_SUDO_LECTURE_DIR)) == NULL) + goto oom; + if ((def_timestampdir = strdup(_PATH_SUDO_TIMEDIR)) == NULL) + goto oom; + if ((def_passprompt = strdup(_(PASSPROMPT))) == NULL) + goto oom; + if ((def_runas_default = strdup(RUNAS_DEFAULT)) == NULL) + goto oom; #ifdef _PATH_SUDO_SENDMAIL - def_mailerpath = sudo_estrdup(_PATH_SUDO_SENDMAIL); - def_mailerflags = sudo_estrdup("-t"); + if ((def_mailerpath = strdup(_PATH_SUDO_SENDMAIL)) == NULL) + goto oom; + if ((def_mailerflags = strdup("-t")) == NULL) + goto oom; #endif #if (LOGGING & SLOG_FILE) - def_logfile = sudo_estrdup(_PATH_SUDO_LOGFILE); + if ((def_logfile = strdup(_PATH_SUDO_LOGFILE)) == NULL) + goto oom; #endif #ifdef EXEMPTGROUP - def_exempt_group = sudo_estrdup(EXEMPTGROUP); + if ((def_exempt_group = strdup(EXEMPTGROUP)) == NULL) + goto oom; #endif #ifdef SECURE_PATH - def_secure_path = sudo_estrdup(SECURE_PATH); + if ((def_secure_path = strdup(SECURE_PATH)) == NULL) + goto oom; #endif - def_editor = sudo_estrdup(EDITOR); + if ((def_editor = strdup(EDITOR)) == NULL) + goto oom; def_set_utmp = true; def_pam_setcred = true; /* Finally do the lists (currently just environment tables). */ - init_envtables(); + if (!init_envtables()) + goto oom; firsttime = 0; - debug_return; + debug_return_bool(true); +oom: + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_bool(false); } /* @@ -518,21 +538,10 @@ rc = false; break; case DEFAULTS_USER: -#if 1 - if (ISSET(what, SETDEF_USER)) { - int m; - m = userlist_matches(sudo_user.pw, def->binding); - if (m == ALLOW) { - if (!set_default(def->var, def->val, def->op)) - rc = false; - } - } -#else if (ISSET(what, SETDEF_USER) && userlist_matches(sudo_user.pw, def->binding) == ALLOW && !set_default(def->var, def->val, def->op)) rc = false; -#endif break; case DEFAULTS_RUNAS: if (ISSET(what, SETDEF_RUNAS) && @@ -542,7 +551,7 @@ break; case DEFAULTS_HOST: if (ISSET(what, SETDEF_HOST) && - hostlist_matches(def->binding) == ALLOW && + hostlist_matches(sudo_user.pw, def->binding) == ALLOW && !set_default(def->var, def->val, def->op)) rc = false; break; @@ -700,19 +709,23 @@ debug_return_bool(true); } -static bool +static int store_str(char *val, struct sudo_defs_types *def, int op) { debug_decl(store_str, SUDOERS_DEBUG_DEFAULTS) - sudo_efree(def->sd_un.str); - if (op == false) + free(def->sd_un.str); + if (op == false) { def->sd_un.str = NULL; - else - def->sd_un.str = sudo_estrdup(val); + } else { + if ((def->sd_un.str = strdup(val)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_int(-1); + } + } if (def->callback) - debug_return_bool(def->callback(val)); - debug_return_bool(true); + debug_return_int(def->callback(val)); + debug_return_int(true); } static bool @@ -723,7 +736,7 @@ /* Remove all old members. */ if (op == false || op == true) - list_op(NULL, 0, def, freeall); + (void)list_op(NULL, 0, def, freeall); /* Split str into multiple space-separated words and act on each one. */ if (op != false) { @@ -738,7 +751,8 @@ /* Find end position and perform operation. */ for (end = start; *end && !isblank((unsigned char)*end); end++) ; - list_op(start, end - start, def, op == '-' ? delete : add); + if (!list_op(start, end - start, def, op == '-' ? delete : add)) + debug_return_bool(false); } while (*end++ != '\0'); } debug_return_bool(true); @@ -754,7 +768,6 @@ def->sd_un.ival = false; debug_return_bool(true); } -#ifdef LOG_NFACILITIES if (!val) debug_return_bool(false); for (fac = facilities; fac->name && strcmp(val, fac->name); fac++) @@ -763,25 +776,18 @@ debug_return_bool(false); /* not found */ def->sd_un.ival = fac->num; -#else - def->sd_un.ival = -1; -#endif /* LOG_NFACILITIES */ debug_return_bool(true); } static const char * logfac2str(int n) { -#ifdef LOG_NFACILITIES struct strmap *fac; debug_decl(logfac2str, SUDOERS_DEBUG_DEFAULTS) for (fac = facilities; fac->name && fac->num != n; fac++) ; debug_return_const_str(fac->name); -#else - return "default"; -#endif /* LOG_NFACILITIES */ } static bool @@ -836,7 +842,7 @@ debug_return_bool(true); } -static void +static bool list_op(char *val, size_t len, struct sudo_defs_types *def, enum list_ops op) { struct list_member *cur, *prev = NULL; @@ -845,25 +851,25 @@ if (op == freeall) { while ((cur = SLIST_FIRST(&def->sd_un.list)) != NULL) { SLIST_REMOVE_HEAD(&def->sd_un.list, entries); - sudo_efree(cur->value); - sudo_efree(cur); + free(cur->value); + free(cur); } - debug_return; + debug_return_bool(true); } SLIST_FOREACH(cur, &def->sd_un.list, entries) { if ((strncmp(cur->value, val, len) == 0 && cur->value[len] == '\0')) { if (op == add) - debug_return; /* already exists */ + debug_return_bool(true); /* already exists */ /* Delete node */ if (prev == NULL) SLIST_REMOVE_HEAD(&def->sd_un.list, entries); else SLIST_REMOVE_AFTER(prev, entries); - sudo_efree(cur->value); - sudo_efree(cur); + free(cur->value); + free(cur); break; } prev = cur; @@ -871,9 +877,13 @@ /* Add new node to the head of the list. */ if (op == add) { - cur = sudo_ecalloc(1, sizeof(struct list_member)); - cur->value = sudo_estrndup(val, len); + cur = calloc(1, sizeof(struct list_member)); + if (cur == NULL || (cur->value = strndup(val, len)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + free(cur); + debug_return_bool(false); + } SLIST_INSERT_HEAD(&def->sd_un.list, cur, entries); } - debug_return; + debug_return_bool(true); } diff -Nru sudo-1.8.12/plugins/sudoers/defaults.h sudo-1.8.16/plugins/sudoers/defaults.h --- sudo-1.8.12/plugins/sudoers/defaults.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/defaults.h 2015-10-31 23:35:00.000000000 +0000 @@ -19,8 +19,8 @@ * Materiel Command, USAF, under agreement number F39502-99-1-0512. */ -#ifndef _SUDOERS_DEFAULTS_H -#define _SUDOERS_DEFAULTS_H +#ifndef SUDOERS_DEFAULTS_H +#define SUDOERS_DEFAULTS_H #include @@ -110,11 +110,11 @@ * Prototypes */ void dump_default(void); -void init_defaults(void); +bool init_defaults(void); bool set_default(char *var, char *val, int op); bool update_defaults(int what); bool check_defaults(int what, bool quiet); extern struct sudo_defs_types sudo_defs_table[]; -#endif /* _SUDOERS_DEFAULTS_H */ +#endif /* SUDOERS_DEFAULTS_H */ diff -Nru sudo-1.8.12/plugins/sudoers/def_data.c sudo-1.8.16/plugins/sudoers/def_data.c --- sudo-1.8.12/plugins/sudoers/def_data.c 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/def_data.c 2016-03-17 16:13:10.000000000 +0000 @@ -63,6 +63,10 @@ N_("Send mail if the user is not allowed to run a command"), NULL, }, { + "mail_all_cmnds", T_FLAG, + N_("Send mail if the user tries to run a command"), + NULL, + }, { "tty_tickets", T_FLAG, N_("Use a separate timestamp for each user/tty combo"), NULL, @@ -383,6 +387,22 @@ N_("Enable sudoers netgroup support"), NULL, }, { + "sudoedit_checkdir", T_FLAG, + N_("Check parent directories for writability when editing files with sudoedit"), + NULL, + }, { + "sudoedit_follow", T_FLAG, + N_("Follow symbolic links when editing files with sudoedit"), + NULL, + }, { + "always_query_group_plugin", T_FLAG, + N_("Query the group plugin for unknown system groups"), + NULL, + }, { + "netgroup_tuple", T_FLAG, + N_("Match netgroups based on the entire tuple: user, host and domain"), + NULL, + }, { NULL, 0, NULL } }; diff -Nru sudo-1.8.12/plugins/sudoers/def_data.h sudo-1.8.16/plugins/sudoers/def_data.h --- sudo-1.8.12/plugins/sudoers/def_data.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/def_data.h 2016-03-17 16:13:10.000000000 +0000 @@ -18,166 +18,176 @@ #define I_MAIL_NO_HOST 8 #define def_mail_no_perms (sudo_defs_table[9].sd_un.flag) #define I_MAIL_NO_PERMS 9 -#define def_tty_tickets (sudo_defs_table[10].sd_un.flag) -#define I_TTY_TICKETS 10 -#define def_lecture (sudo_defs_table[11].sd_un.tuple) -#define I_LECTURE 11 -#define def_lecture_file (sudo_defs_table[12].sd_un.str) -#define I_LECTURE_FILE 12 -#define def_authenticate (sudo_defs_table[13].sd_un.flag) -#define I_AUTHENTICATE 13 -#define def_root_sudo (sudo_defs_table[14].sd_un.flag) -#define I_ROOT_SUDO 14 -#define def_log_host (sudo_defs_table[15].sd_un.flag) -#define I_LOG_HOST 15 -#define def_log_year (sudo_defs_table[16].sd_un.flag) -#define I_LOG_YEAR 16 -#define def_shell_noargs (sudo_defs_table[17].sd_un.flag) -#define I_SHELL_NOARGS 17 -#define def_set_home (sudo_defs_table[18].sd_un.flag) -#define I_SET_HOME 18 -#define def_always_set_home (sudo_defs_table[19].sd_un.flag) -#define I_ALWAYS_SET_HOME 19 -#define def_path_info (sudo_defs_table[20].sd_un.flag) -#define I_PATH_INFO 20 -#define def_fqdn (sudo_defs_table[21].sd_un.flag) -#define I_FQDN 21 -#define def_insults (sudo_defs_table[22].sd_un.flag) -#define I_INSULTS 22 -#define def_requiretty (sudo_defs_table[23].sd_un.flag) -#define I_REQUIRETTY 23 -#define def_env_editor (sudo_defs_table[24].sd_un.flag) -#define I_ENV_EDITOR 24 -#define def_rootpw (sudo_defs_table[25].sd_un.flag) -#define I_ROOTPW 25 -#define def_runaspw (sudo_defs_table[26].sd_un.flag) -#define I_RUNASPW 26 -#define def_targetpw (sudo_defs_table[27].sd_un.flag) -#define I_TARGETPW 27 -#define def_use_loginclass (sudo_defs_table[28].sd_un.flag) -#define I_USE_LOGINCLASS 28 -#define def_set_logname (sudo_defs_table[29].sd_un.flag) -#define I_SET_LOGNAME 29 -#define def_stay_setuid (sudo_defs_table[30].sd_un.flag) -#define I_STAY_SETUID 30 -#define def_preserve_groups (sudo_defs_table[31].sd_un.flag) -#define I_PRESERVE_GROUPS 31 -#define def_loglinelen (sudo_defs_table[32].sd_un.uival) -#define I_LOGLINELEN 32 -#define def_timestamp_timeout (sudo_defs_table[33].sd_un.fval) -#define I_TIMESTAMP_TIMEOUT 33 -#define def_passwd_timeout (sudo_defs_table[34].sd_un.fval) -#define I_PASSWD_TIMEOUT 34 -#define def_passwd_tries (sudo_defs_table[35].sd_un.uival) -#define I_PASSWD_TRIES 35 -#define def_umask (sudo_defs_table[36].sd_un.mode) -#define I_UMASK 36 -#define def_logfile (sudo_defs_table[37].sd_un.str) -#define I_LOGFILE 37 -#define def_mailerpath (sudo_defs_table[38].sd_un.str) -#define I_MAILERPATH 38 -#define def_mailerflags (sudo_defs_table[39].sd_un.str) -#define I_MAILERFLAGS 39 -#define def_mailto (sudo_defs_table[40].sd_un.str) -#define I_MAILTO 40 -#define def_mailfrom (sudo_defs_table[41].sd_un.str) -#define I_MAILFROM 41 -#define def_mailsub (sudo_defs_table[42].sd_un.str) -#define I_MAILSUB 42 -#define def_badpass_message (sudo_defs_table[43].sd_un.str) -#define I_BADPASS_MESSAGE 43 -#define def_lecture_status_dir (sudo_defs_table[44].sd_un.str) -#define I_LECTURE_STATUS_DIR 44 -#define def_timestampdir (sudo_defs_table[45].sd_un.str) -#define I_TIMESTAMPDIR 45 -#define def_timestampowner (sudo_defs_table[46].sd_un.str) -#define I_TIMESTAMPOWNER 46 -#define def_exempt_group (sudo_defs_table[47].sd_un.str) -#define I_EXEMPT_GROUP 47 -#define def_passprompt (sudo_defs_table[48].sd_un.str) -#define I_PASSPROMPT 48 -#define def_passprompt_override (sudo_defs_table[49].sd_un.flag) -#define I_PASSPROMPT_OVERRIDE 49 -#define def_runas_default (sudo_defs_table[50].sd_un.str) -#define I_RUNAS_DEFAULT 50 -#define def_secure_path (sudo_defs_table[51].sd_un.str) -#define I_SECURE_PATH 51 -#define def_editor (sudo_defs_table[52].sd_un.str) -#define I_EDITOR 52 -#define def_listpw (sudo_defs_table[53].sd_un.tuple) -#define I_LISTPW 53 -#define def_verifypw (sudo_defs_table[54].sd_un.tuple) -#define I_VERIFYPW 54 -#define def_noexec (sudo_defs_table[55].sd_un.flag) -#define I_NOEXEC 55 -#define def_ignore_local_sudoers (sudo_defs_table[56].sd_un.flag) -#define I_IGNORE_LOCAL_SUDOERS 56 -#define def_closefrom (sudo_defs_table[57].sd_un.ival) -#define I_CLOSEFROM 57 -#define def_closefrom_override (sudo_defs_table[58].sd_un.flag) -#define I_CLOSEFROM_OVERRIDE 58 -#define def_setenv (sudo_defs_table[59].sd_un.flag) -#define I_SETENV 59 -#define def_env_reset (sudo_defs_table[60].sd_un.flag) -#define I_ENV_RESET 60 -#define def_env_check (sudo_defs_table[61].sd_un.list) -#define I_ENV_CHECK 61 -#define def_env_delete (sudo_defs_table[62].sd_un.list) -#define I_ENV_DELETE 62 -#define def_env_keep (sudo_defs_table[63].sd_un.list) -#define I_ENV_KEEP 63 -#define def_role (sudo_defs_table[64].sd_un.str) -#define I_ROLE 64 -#define def_type (sudo_defs_table[65].sd_un.str) -#define I_TYPE 65 -#define def_env_file (sudo_defs_table[66].sd_un.str) -#define I_ENV_FILE 66 -#define def_sudoers_locale (sudo_defs_table[67].sd_un.str) -#define I_SUDOERS_LOCALE 67 -#define def_visiblepw (sudo_defs_table[68].sd_un.flag) -#define I_VISIBLEPW 68 -#define def_pwfeedback (sudo_defs_table[69].sd_un.flag) -#define I_PWFEEDBACK 69 -#define def_fast_glob (sudo_defs_table[70].sd_un.flag) -#define I_FAST_GLOB 70 -#define def_umask_override (sudo_defs_table[71].sd_un.flag) -#define I_UMASK_OVERRIDE 71 -#define def_log_input (sudo_defs_table[72].sd_un.flag) -#define I_LOG_INPUT 72 -#define def_log_output (sudo_defs_table[73].sd_un.flag) -#define I_LOG_OUTPUT 73 -#define def_compress_io (sudo_defs_table[74].sd_un.flag) -#define I_COMPRESS_IO 74 -#define def_use_pty (sudo_defs_table[75].sd_un.flag) -#define I_USE_PTY 75 -#define def_group_plugin (sudo_defs_table[76].sd_un.str) -#define I_GROUP_PLUGIN 76 -#define def_iolog_dir (sudo_defs_table[77].sd_un.str) -#define I_IOLOG_DIR 77 -#define def_iolog_file (sudo_defs_table[78].sd_un.str) -#define I_IOLOG_FILE 78 -#define def_set_utmp (sudo_defs_table[79].sd_un.flag) -#define I_SET_UTMP 79 -#define def_utmp_runas (sudo_defs_table[80].sd_un.flag) -#define I_UTMP_RUNAS 80 -#define def_privs (sudo_defs_table[81].sd_un.str) -#define I_PRIVS 81 -#define def_limitprivs (sudo_defs_table[82].sd_un.str) -#define I_LIMITPRIVS 82 -#define def_exec_background (sudo_defs_table[83].sd_un.flag) -#define I_EXEC_BACKGROUND 83 -#define def_pam_service (sudo_defs_table[84].sd_un.str) -#define I_PAM_SERVICE 84 -#define def_pam_login_service (sudo_defs_table[85].sd_un.str) -#define I_PAM_LOGIN_SERVICE 85 -#define def_pam_setcred (sudo_defs_table[86].sd_un.flag) -#define I_PAM_SETCRED 86 -#define def_pam_session (sudo_defs_table[87].sd_un.flag) -#define I_PAM_SESSION 87 -#define def_maxseq (sudo_defs_table[88].sd_un.uival) -#define I_MAXSEQ 88 -#define def_use_netgroups (sudo_defs_table[89].sd_un.flag) -#define I_USE_NETGROUPS 89 +#define def_mail_all_cmnds (sudo_defs_table[10].sd_un.flag) +#define I_MAIL_ALL_CMNDS 10 +#define def_tty_tickets (sudo_defs_table[11].sd_un.flag) +#define I_TTY_TICKETS 11 +#define def_lecture (sudo_defs_table[12].sd_un.tuple) +#define I_LECTURE 12 +#define def_lecture_file (sudo_defs_table[13].sd_un.str) +#define I_LECTURE_FILE 13 +#define def_authenticate (sudo_defs_table[14].sd_un.flag) +#define I_AUTHENTICATE 14 +#define def_root_sudo (sudo_defs_table[15].sd_un.flag) +#define I_ROOT_SUDO 15 +#define def_log_host (sudo_defs_table[16].sd_un.flag) +#define I_LOG_HOST 16 +#define def_log_year (sudo_defs_table[17].sd_un.flag) +#define I_LOG_YEAR 17 +#define def_shell_noargs (sudo_defs_table[18].sd_un.flag) +#define I_SHELL_NOARGS 18 +#define def_set_home (sudo_defs_table[19].sd_un.flag) +#define I_SET_HOME 19 +#define def_always_set_home (sudo_defs_table[20].sd_un.flag) +#define I_ALWAYS_SET_HOME 20 +#define def_path_info (sudo_defs_table[21].sd_un.flag) +#define I_PATH_INFO 21 +#define def_fqdn (sudo_defs_table[22].sd_un.flag) +#define I_FQDN 22 +#define def_insults (sudo_defs_table[23].sd_un.flag) +#define I_INSULTS 23 +#define def_requiretty (sudo_defs_table[24].sd_un.flag) +#define I_REQUIRETTY 24 +#define def_env_editor (sudo_defs_table[25].sd_un.flag) +#define I_ENV_EDITOR 25 +#define def_rootpw (sudo_defs_table[26].sd_un.flag) +#define I_ROOTPW 26 +#define def_runaspw (sudo_defs_table[27].sd_un.flag) +#define I_RUNASPW 27 +#define def_targetpw (sudo_defs_table[28].sd_un.flag) +#define I_TARGETPW 28 +#define def_use_loginclass (sudo_defs_table[29].sd_un.flag) +#define I_USE_LOGINCLASS 29 +#define def_set_logname (sudo_defs_table[30].sd_un.flag) +#define I_SET_LOGNAME 30 +#define def_stay_setuid (sudo_defs_table[31].sd_un.flag) +#define I_STAY_SETUID 31 +#define def_preserve_groups (sudo_defs_table[32].sd_un.flag) +#define I_PRESERVE_GROUPS 32 +#define def_loglinelen (sudo_defs_table[33].sd_un.uival) +#define I_LOGLINELEN 33 +#define def_timestamp_timeout (sudo_defs_table[34].sd_un.fval) +#define I_TIMESTAMP_TIMEOUT 34 +#define def_passwd_timeout (sudo_defs_table[35].sd_un.fval) +#define I_PASSWD_TIMEOUT 35 +#define def_passwd_tries (sudo_defs_table[36].sd_un.uival) +#define I_PASSWD_TRIES 36 +#define def_umask (sudo_defs_table[37].sd_un.mode) +#define I_UMASK 37 +#define def_logfile (sudo_defs_table[38].sd_un.str) +#define I_LOGFILE 38 +#define def_mailerpath (sudo_defs_table[39].sd_un.str) +#define I_MAILERPATH 39 +#define def_mailerflags (sudo_defs_table[40].sd_un.str) +#define I_MAILERFLAGS 40 +#define def_mailto (sudo_defs_table[41].sd_un.str) +#define I_MAILTO 41 +#define def_mailfrom (sudo_defs_table[42].sd_un.str) +#define I_MAILFROM 42 +#define def_mailsub (sudo_defs_table[43].sd_un.str) +#define I_MAILSUB 43 +#define def_badpass_message (sudo_defs_table[44].sd_un.str) +#define I_BADPASS_MESSAGE 44 +#define def_lecture_status_dir (sudo_defs_table[45].sd_un.str) +#define I_LECTURE_STATUS_DIR 45 +#define def_timestampdir (sudo_defs_table[46].sd_un.str) +#define I_TIMESTAMPDIR 46 +#define def_timestampowner (sudo_defs_table[47].sd_un.str) +#define I_TIMESTAMPOWNER 47 +#define def_exempt_group (sudo_defs_table[48].sd_un.str) +#define I_EXEMPT_GROUP 48 +#define def_passprompt (sudo_defs_table[49].sd_un.str) +#define I_PASSPROMPT 49 +#define def_passprompt_override (sudo_defs_table[50].sd_un.flag) +#define I_PASSPROMPT_OVERRIDE 50 +#define def_runas_default (sudo_defs_table[51].sd_un.str) +#define I_RUNAS_DEFAULT 51 +#define def_secure_path (sudo_defs_table[52].sd_un.str) +#define I_SECURE_PATH 52 +#define def_editor (sudo_defs_table[53].sd_un.str) +#define I_EDITOR 53 +#define def_listpw (sudo_defs_table[54].sd_un.tuple) +#define I_LISTPW 54 +#define def_verifypw (sudo_defs_table[55].sd_un.tuple) +#define I_VERIFYPW 55 +#define def_noexec (sudo_defs_table[56].sd_un.flag) +#define I_NOEXEC 56 +#define def_ignore_local_sudoers (sudo_defs_table[57].sd_un.flag) +#define I_IGNORE_LOCAL_SUDOERS 57 +#define def_closefrom (sudo_defs_table[58].sd_un.ival) +#define I_CLOSEFROM 58 +#define def_closefrom_override (sudo_defs_table[59].sd_un.flag) +#define I_CLOSEFROM_OVERRIDE 59 +#define def_setenv (sudo_defs_table[60].sd_un.flag) +#define I_SETENV 60 +#define def_env_reset (sudo_defs_table[61].sd_un.flag) +#define I_ENV_RESET 61 +#define def_env_check (sudo_defs_table[62].sd_un.list) +#define I_ENV_CHECK 62 +#define def_env_delete (sudo_defs_table[63].sd_un.list) +#define I_ENV_DELETE 63 +#define def_env_keep (sudo_defs_table[64].sd_un.list) +#define I_ENV_KEEP 64 +#define def_role (sudo_defs_table[65].sd_un.str) +#define I_ROLE 65 +#define def_type (sudo_defs_table[66].sd_un.str) +#define I_TYPE 66 +#define def_env_file (sudo_defs_table[67].sd_un.str) +#define I_ENV_FILE 67 +#define def_sudoers_locale (sudo_defs_table[68].sd_un.str) +#define I_SUDOERS_LOCALE 68 +#define def_visiblepw (sudo_defs_table[69].sd_un.flag) +#define I_VISIBLEPW 69 +#define def_pwfeedback (sudo_defs_table[70].sd_un.flag) +#define I_PWFEEDBACK 70 +#define def_fast_glob (sudo_defs_table[71].sd_un.flag) +#define I_FAST_GLOB 71 +#define def_umask_override (sudo_defs_table[72].sd_un.flag) +#define I_UMASK_OVERRIDE 72 +#define def_log_input (sudo_defs_table[73].sd_un.flag) +#define I_LOG_INPUT 73 +#define def_log_output (sudo_defs_table[74].sd_un.flag) +#define I_LOG_OUTPUT 74 +#define def_compress_io (sudo_defs_table[75].sd_un.flag) +#define I_COMPRESS_IO 75 +#define def_use_pty (sudo_defs_table[76].sd_un.flag) +#define I_USE_PTY 76 +#define def_group_plugin (sudo_defs_table[77].sd_un.str) +#define I_GROUP_PLUGIN 77 +#define def_iolog_dir (sudo_defs_table[78].sd_un.str) +#define I_IOLOG_DIR 78 +#define def_iolog_file (sudo_defs_table[79].sd_un.str) +#define I_IOLOG_FILE 79 +#define def_set_utmp (sudo_defs_table[80].sd_un.flag) +#define I_SET_UTMP 80 +#define def_utmp_runas (sudo_defs_table[81].sd_un.flag) +#define I_UTMP_RUNAS 81 +#define def_privs (sudo_defs_table[82].sd_un.str) +#define I_PRIVS 82 +#define def_limitprivs (sudo_defs_table[83].sd_un.str) +#define I_LIMITPRIVS 83 +#define def_exec_background (sudo_defs_table[84].sd_un.flag) +#define I_EXEC_BACKGROUND 84 +#define def_pam_service (sudo_defs_table[85].sd_un.str) +#define I_PAM_SERVICE 85 +#define def_pam_login_service (sudo_defs_table[86].sd_un.str) +#define I_PAM_LOGIN_SERVICE 86 +#define def_pam_setcred (sudo_defs_table[87].sd_un.flag) +#define I_PAM_SETCRED 87 +#define def_pam_session (sudo_defs_table[88].sd_un.flag) +#define I_PAM_SESSION 88 +#define def_maxseq (sudo_defs_table[89].sd_un.uival) +#define I_MAXSEQ 89 +#define def_use_netgroups (sudo_defs_table[90].sd_un.flag) +#define I_USE_NETGROUPS 90 +#define def_sudoedit_checkdir (sudo_defs_table[91].sd_un.flag) +#define I_SUDOEDIT_CHECKDIR 91 +#define def_sudoedit_follow (sudo_defs_table[92].sd_un.flag) +#define I_SUDOEDIT_FOLLOW 92 +#define def_always_query_group_plugin (sudo_defs_table[93].sd_un.flag) +#define I_ALWAYS_QUERY_GROUP_PLUGIN93 +#define def_netgroup_tuple (sudo_defs_table[94].sd_un.flag) +#define I_NETGROUP_TUPLE 94 enum def_tuple { never, diff -Nru sudo-1.8.12/plugins/sudoers/def_data.in sudo-1.8.16/plugins/sudoers/def_data.in --- sudo-1.8.12/plugins/sudoers/def_data.in 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/def_data.in 2016-03-17 16:13:10.000000000 +0000 @@ -40,6 +40,9 @@ mail_no_perms T_FLAG "Send mail if the user is not allowed to run a command" +mail_all_cmnds + T_FLAG + "Send mail if the user tries to run a command" tty_tickets T_FLAG "Use a separate timestamp for each user/tty combo" @@ -283,3 +286,15 @@ use_netgroups T_FLAG "Enable sudoers netgroup support" +sudoedit_checkdir + T_FLAG + "Check parent directories for writability when editing files with sudoedit" +sudoedit_follow + T_FLAG + "Follow symbolic links when editing files with sudoedit" +always_query_group_plugin + T_FLAG + "Query the group plugin for unknown system groups" +netgroup_tuple + T_FLAG + "Match netgroups based on the entire tuple: user, host and domain" diff -Nru sudo-1.8.12/plugins/sudoers/editor.c sudo-1.8.16/plugins/sudoers/editor.c --- sudo-1.8.12/plugins/sudoers/editor.c 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/editor.c 2015-10-31 23:35:00.000000000 +0000 @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2010-2015 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 +#ifdef HAVE_STRING_H +# include +#endif /* HAVE_STRING_H */ +#ifdef HAVE_STRINGS_H +# include +#endif /* HAVE_STRINGS_H */ +#include +#include + +#include "sudoers.h" + +/* + * Search for the specified editor in the user's PATH, checking + * the result against whitelist if non-NULL. An argument vector + * suitable for execve() is allocated and stored in argv_out. + * If nfiles is non-zero, files[] is added to the end of argv_out. + * Returns the path to be executed on success, else NULL. + * The caller is responsible for freeing the returned editor path + * as well as the argument vector. + */ +char * +resolve_editor(const char *ed, size_t edlen, int nfiles, char **files, + int *argc_out, char ***argv_out, char * const *whitelist) +{ + char **nargv, *editor, *editor_path = NULL; + const char *cp, *ep, *tmp; + const char *edend = ed + edlen; + struct stat user_editor_sb; + int nargc; + debug_decl(resolve_editor, SUDOERS_DEBUG_UTIL) + + /* + * Split editor into an argument vector, including files to edit. + * The EDITOR and VISUAL environment variables may contain command + * line args so look for those and alloc space for them too. + */ + cp = sudo_strsplit(ed, edend, " \t", &ep); + if (cp == NULL) + debug_return_str(NULL); + editor = strndup(cp, (size_t)(ep - cp)); + if (editor == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_str(NULL); + } + + /* 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) { + free(editor); + errno = ENOENT; + debug_return_str(NULL); + } + + /* Count rest of arguments and allocate editor argv. */ + for (nargc = 1, tmp = ep; sudo_strsplit(NULL, edend, " \t", &tmp) != NULL; ) + nargc++; + if (nfiles != 0) + nargc += nfiles + 1; + nargv = reallocarray(NULL, nargc + 1, sizeof(char *)); + if (nargv == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + free(editor); + debug_return_str(NULL); + } + + /* Fill in editor argv (assumes files[] is NULL-terminated). */ + nargv[0] = editor; + for (nargc = 1; (cp = sudo_strsplit(NULL, edend, " \t", &ep)) != NULL; nargc++) { + nargv[nargc] = strndup(cp, (size_t)(ep - cp)); + if (nargv[nargc] == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + while (nargc--) + free(nargv[nargc]); + debug_return_str(NULL); + } + } + if (nfiles != 0) { + nargv[nargc++] = "--"; + while (nfiles--) + nargv[nargc++] = *files++; + } + nargv[nargc] = NULL; + + *argc_out = nargc; + *argv_out = nargv; + debug_return_str(editor_path); +} diff -Nru sudo-1.8.12/plugins/sudoers/env.c sudo-1.8.16/plugins/sudoers/env.c --- sudo-1.8.12/plugins/sudoers/env.c 2015-02-06 17:34:23.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/env.c 2016-03-17 16:13:11.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000-2005, 2007-2015 + * Copyright (c) 2000-2005, 2007-2016 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -24,23 +24,14 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #if defined(HAVE_STDINT_H) # include #elif defined(HAVE_INTTYPES_H) @@ -101,8 +92,8 @@ #define KEPT_MAX 0xff00 struct environment { - char * const *old_envp; /* pointer the environment we passed back */ char **envp; /* pointer to the new environment */ + char **old_envp; /* pointer the old environment we allocated */ size_t env_size; /* size of new_environ in char **'s */ size_t env_len; /* number of slots used, not counting NULL */ }; @@ -154,7 +145,8 @@ "BASH_ENV", /* bash, file to source before script runs */ "PS4", /* bash, prefix for lines in xtrace mode */ "GLOBIGNORE", /* bash, globbing patterns to ignore */ - "SHELLOPTS", /* bash, extra command line options */ + "BASHOPTS", /* bash, initial "shopt -s" options */ + "SHELLOPTS", /* bash, initial "set -o" options */ "JAVA_TOOL_OPTIONS", /* java, extra command line options */ "PERLIO_DEBUG ", /* perl, debugging output file */ "PERLLIB", /* perl, search path for modules/includes */ @@ -211,7 +203,7 @@ /* * Initialize env based on envp. */ -void +bool env_init(char * const envp[]) { char * const *ep; @@ -219,10 +211,14 @@ debug_decl(env_init, SUDOERS_DEBUG_ENV) if (envp == NULL) { + /* Free the old envp we allocated, if any. */ + free(env.old_envp); + /* Reset to initial state but keep a pointer to what we allocated. */ - envp = env.envp; - memset(&env, 0, sizeof(env)); - env.old_envp = envp; + env.old_envp = env.envp; + env.envp = NULL; + env.env_size = 0; + env.env_len = 0; } else { /* Make private copy of envp. */ for (ep = envp; *ep != NULL; ep++) @@ -231,7 +227,13 @@ env.env_len = len; env.env_size = len + 1 + 128; - env.envp = sudo_emallocarray(env.env_size, sizeof(char *)); + env.envp = reallocarray(NULL, env.env_size, sizeof(char *)); + if (env.envp == NULL) { + env.env_size = 0; + env.env_len = 0; + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_bool(false); + } #ifdef ENV_DEBUG memset(env.envp, 0, env.env_size * sizeof(char *)); #endif @@ -239,11 +241,11 @@ env.envp[len] = NULL; /* Free the old envp we allocated, if any. */ - if (env.old_envp != NULL) - sudo_efree((void *)env.old_envp); + free(env.old_envp); + env.old_envp = NULL; } - debug_return; + debug_return_bool(true); } /* @@ -256,6 +258,22 @@ } /* + * Swap the old and new copies of the environment. + */ +bool +env_swap_old(void) +{ + char **old_envp; + + if (env.old_envp == NULL) + return false; + old_envp = env.old_envp; + env.old_envp = env.envp; + env.envp = old_envp; + return true; +} + +/* * Similar to putenv(3) but operates on sudo's private copy of the * environment (not environ) and it always overwrites. The dupcheck param * determines whether we need to verify that the variable is not already set. @@ -287,11 +305,9 @@ errno = EOVERFLOW; return -1; } - nenvp = realloc(env.envp, nsize * sizeof(char *)); - if (nenvp == NULL) { - errno = ENOMEM; + nenvp = reallocarray(env.envp, nsize, sizeof(char *)); + if (nenvp == NULL) return -1; - } env.envp = nenvp; env.env_size = nsize; #ifdef ENV_DEBUG @@ -378,7 +394,11 @@ debug_decl(sudo_setenv2, SUDOERS_DEBUG_ENV) esize = strlen(var) + 1 + strlen(val) + 1; - estring = sudo_emalloc(esize); + if ((estring = malloc(esize)) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + debug_return_int(-1); + } /* Build environment string and insert it. */ if (strlcpy(estring, var, esize) >= esize || @@ -391,7 +411,9 @@ rval = sudo_putenv(estring, dupcheck, overwrite); } if (rval == -1) - sudo_efree(estring); + free(estring); + else + sudoers_gc_add(GC_PTR, estring); debug_return_int(rval); } @@ -433,10 +455,8 @@ } /* Allocate and fill in estring. */ - if ((estring = ep = malloc(esize)) == NULL) { - errno = ENOMEM; + if ((estring = ep = malloc(esize)) == NULL) goto done; - } for (cp = var; *cp && *cp != '='; cp++) *ep++ = *cp; *ep++ = '='; @@ -450,6 +470,8 @@ done: if (rval == -1) free(estring); + else + sudoers_gc_add(GC_PTR, estring); return rval; } @@ -657,7 +679,7 @@ keepit = !strpbrk(++val, "/%"); } } - debug_return_bool(keepit); + debug_return_int(keepit); } /* @@ -801,6 +823,16 @@ } } +#define CHECK_PUTENV(a, b, c) do { \ + if (sudo_putenv((a), (b), (c)) == -1) \ + goto bad; \ +} while (0) + +#define CHECK_SETENV2(a, b, c, d) do { \ + if (sudo_setenv2((a), (b), (c), (d)) == -1) \ + goto bad; \ +} while (0) + /* * Build a new environment and ether clear potentially dangerous * variables from the old one or start with a clean slate. @@ -810,7 +842,7 @@ bool rebuild_env(void) { - char **old_envp, **ep, *cp, *ps1; + char **ep, *cp, *ps1; char idbuf[MAX_UID_T_LEN + 1]; unsigned int didvar; bool reset_home = false; @@ -823,8 +855,15 @@ didvar = 0; env.env_len = 0; env.env_size = 128; - old_envp = env.envp; - env.envp = sudo_emallocarray(env.env_size, sizeof(char *)); + free(env.old_envp); + env.old_envp = env.envp; + env.envp = reallocarray(NULL, env.env_size, sizeof(char *)); + if (env.envp == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + env.env_size = 0; + goto bad; + } #ifdef ENV_DEBUG memset(env.envp, 0, env.env_size * sizeof(char *)); #else @@ -867,7 +906,7 @@ } /* Pull in vars we want to keep from the old environment. */ - for (ep = old_envp; *ep; ep++) { + for (ep = env.old_envp; *ep; ep++) { bool keepit; /* @@ -884,8 +923,7 @@ if (keepit) { /* Preserve variable. */ - if (sudo_putenv(*ep, false, false) == -1) - goto bad; + CHECK_PUTENV(*ep, true, false); env_update_didvar(*ep, &didvar); } } @@ -897,25 +935,23 @@ * on sudoers options). */ if (ISSET(sudo_mode, MODE_LOGIN_SHELL)) { - sudo_setenv2("SHELL", runas_pw->pw_shell, + CHECK_SETENV2("SHELL", runas_pw->pw_shell, ISSET(didvar, DID_SHELL), true); - sudo_setenv2("LOGNAME", runas_pw->pw_name, + CHECK_SETENV2("LOGNAME", runas_pw->pw_name, ISSET(didvar, DID_LOGNAME), true); - sudo_setenv2("USER", runas_pw->pw_name, + CHECK_SETENV2("USER", runas_pw->pw_name, ISSET(didvar, DID_USER), true); - sudo_setenv2("USERNAME", runas_pw->pw_name, + CHECK_SETENV2("USERNAME", runas_pw->pw_name, ISSET(didvar, DID_USERNAME), true); } else { - if (!ISSET(didvar, DID_SHELL)) - sudo_setenv2("SHELL", sudo_user.pw->pw_shell, false, true); - /* We will set LOGNAME later in the !def_set_logname case. */ + /* We will set LOGNAME later in the def_set_logname case. */ if (!def_set_logname) { if (!ISSET(didvar, DID_LOGNAME)) - sudo_setenv2("LOGNAME", user_name, false, true); + CHECK_SETENV2("LOGNAME", user_name, false, true); if (!ISSET(didvar, DID_USER)) - sudo_setenv2("USER", user_name, false, true); + CHECK_SETENV2("USER", user_name, false, true); if (!ISSET(didvar, DID_USERNAME)) - sudo_setenv2("USERNAME", user_name, false, true); + CHECK_SETENV2("USERNAME", user_name, false, true); } } @@ -929,104 +965,122 @@ */ if (ISSET(sudo_mode, MODE_LOGIN_SHELL) || !ISSET(didvar, KEPT_MAIL)) { cp = _PATH_MAILDIR; - if (cp[sizeof(_PATH_MAILDIR) - 2] == '/') - sudo_easprintf(&cp, "MAIL=%s%s", _PATH_MAILDIR, runas_pw->pw_name); - else - sudo_easprintf(&cp, "MAIL=%s/%s", _PATH_MAILDIR, runas_pw->pw_name); + if (cp[sizeof(_PATH_MAILDIR) - 2] == '/') { + if (asprintf(&cp, "MAIL=%s%s", _PATH_MAILDIR, runas_pw->pw_name) == -1) + goto bad; + } else { + if (asprintf(&cp, "MAIL=%s/%s", _PATH_MAILDIR, runas_pw->pw_name) == -1) + goto bad; + } if (sudo_putenv(cp, ISSET(didvar, DID_MAIL), true) == -1) { free(cp); goto bad; } + sudoers_gc_add(GC_PTR, cp); } } else { /* * Copy environ entries as long as they don't match env_delete or * env_check. */ - for (ep = old_envp; *ep; ep++) { + for (ep = env.old_envp; *ep; ep++) { /* Add variable unless it matches a black list. */ if (!env_should_delete(*ep)) { if (strncmp(*ep, "SUDO_PS1=", 9) == 0) ps1 = *ep + 5; + else if (strncmp(*ep, "SHELL=", 6) == 0) + SET(didvar, DID_SHELL); else if (strncmp(*ep, "PATH=", 5) == 0) SET(didvar, DID_PATH); else if (strncmp(*ep, "TERM=", 5) == 0) SET(didvar, DID_TERM); - if (sudo_putenv(*ep, false, false) == -1) - goto bad; + CHECK_PUTENV(*ep, true, false); } } } /* Replace the PATH envariable with a secure one? */ if (def_secure_path && !user_is_exempt()) { - if (sudo_setenv2("PATH", def_secure_path, true, true) == -1) - goto bad; + CHECK_SETENV2("PATH", def_secure_path, true, true); SET(didvar, DID_PATH); } /* * Set $USER, $LOGNAME and $USERNAME to target if "set_logname" is not * disabled. We skip this if we are running a login shell (because - * they have already been set) or sudoedit (because we want the editor - * to find the invoking user's startup files). + * they have already been set). */ - if (def_set_logname && !ISSET(sudo_mode, MODE_LOGIN_SHELL|MODE_EDIT)) { - if (!ISSET(didvar, KEPT_LOGNAME)) - sudo_setenv2("LOGNAME", runas_pw->pw_name, true, true); - if (!ISSET(didvar, KEPT_USER)) - sudo_setenv2("USER", runas_pw->pw_name, true, true); - if (!ISSET(didvar, KEPT_USERNAME)) - sudo_setenv2("USERNAME", runas_pw->pw_name, true, true); + if (def_set_logname && !ISSET(sudo_mode, MODE_LOGIN_SHELL)) { + if (!ISSET(didvar, (KEPT_LOGNAME|KEPT_USER|KEPT_USERNAME))) { + /* Nothing preserved, set all three. */ + CHECK_SETENV2("LOGNAME", runas_pw->pw_name, true, true); + CHECK_SETENV2("USER", runas_pw->pw_name, true, true); + CHECK_SETENV2("USERNAME", runas_pw->pw_name, true, true); + } else if ((didvar & (KEPT_LOGNAME|KEPT_USER|KEPT_USERNAME)) != + (KEPT_LOGNAME|KEPT_USER|KEPT_USERNAME)) { + /* + * Preserved some of LOGNAME, USER, USERNAME but not all. + * Make the unset ones match so we don't end up with some + * set to the invoking user and others set to the runas user. + */ + if (ISSET(didvar, KEPT_LOGNAME)) + cp = sudo_getenv("LOGNAME"); + else if (ISSET(didvar, KEPT_USER)) + cp = sudo_getenv("USER"); + else if (ISSET(didvar, KEPT_USERNAME)) + cp = sudo_getenv("USERNAME"); + else + cp = NULL; + if (cp != NULL) { + if (!ISSET(didvar, KEPT_LOGNAME)) + CHECK_SETENV2("LOGNAME", cp, true, true); + if (!ISSET(didvar, KEPT_USER)) + CHECK_SETENV2("USER", cp, true, true); + if (!ISSET(didvar, KEPT_USERNAME)) + CHECK_SETENV2("USERNAME", cp, true, true); + } + } } /* Set $HOME to target user if not preserving user's value. */ if (reset_home) - sudo_setenv2("HOME", runas_pw->pw_dir, true, true); + CHECK_SETENV2("HOME", runas_pw->pw_dir, true, true); - /* Provide default values for $TERM and $PATH if they are not set. */ - if (!ISSET(didvar, DID_TERM)) { - if (sudo_putenv("TERM=unknown", false, false) == -1) - goto bad; - } - if (!ISSET(didvar, DID_PATH)) { - if (sudo_setenv2("PATH", _PATH_STDPATH, false, true) == -1) - goto bad; - } + /* Provide default values for $SHELL, $TERM and $PATH if not set. */ + if (!ISSET(didvar, DID_SHELL)) + CHECK_SETENV2("SHELL", runas_pw->pw_shell, false, false); + if (!ISSET(didvar, DID_TERM)) + CHECK_PUTENV("TERM=unknown", false, false); + if (!ISSET(didvar, DID_PATH)) + CHECK_SETENV2("PATH", _PATH_STDPATH, false, true); /* Set PS1 if SUDO_PS1 is set. */ - if (ps1 != NULL) { - if (sudo_putenv(ps1, true, true) == -1) - goto bad; - } + if (ps1 != NULL) + CHECK_PUTENV(ps1, true, true); /* Add the SUDO_COMMAND envariable (cmnd + args). */ if (user_args) { - sudo_easprintf(&cp, "SUDO_COMMAND=%s %s", user_cmnd, user_args); + if (asprintf(&cp, "SUDO_COMMAND=%s %s", user_cmnd, user_args) == -1) + goto bad; if (sudo_putenv(cp, true, true) == -1) { - sudo_efree(cp); + free(cp); goto bad; } + sudoers_gc_add(GC_PTR, cp); } else { - if (sudo_setenv2("SUDO_COMMAND", user_cmnd, true, true) == -1) - goto bad; + CHECK_SETENV2("SUDO_COMMAND", user_cmnd, true, true); } /* Add the SUDO_USER, SUDO_UID, SUDO_GID environment variables. */ - if (sudo_setenv2("SUDO_USER", user_name, true, true) == -1) - goto bad; + CHECK_SETENV2("SUDO_USER", user_name, true, true); snprintf(idbuf, sizeof(idbuf), "%u", (unsigned int) user_uid); - if (sudo_setenv2("SUDO_UID", idbuf, true, true) == -1) - goto bad; + CHECK_SETENV2("SUDO_UID", idbuf, true, true); snprintf(idbuf, sizeof(idbuf), "%u", (unsigned int) user_gid); - if (sudo_setenv2("SUDO_GID", idbuf, true, true) == -1) - goto bad; - - /* Free old environment. */ - sudo_efree(old_envp); + CHECK_SETENV2("SUDO_GID", idbuf, true, true); debug_return_bool(true); bad: + sudo_warn(U_("unable to rebuild the environment")); debug_return_bool(false); } @@ -1065,8 +1119,7 @@ validate_env_vars(char * const env_vars[]) { char * const *ep; - char *eq, *bad = NULL; - size_t len, blen = 0, bsize = 0; + char *eq, errbuf[4096]; bool okvar, rval = true; debug_decl(validate_env_vars, SUDOERS_DEBUG_ENV) @@ -1074,6 +1127,7 @@ debug_return_bool(true); /* nothing to do */ /* Add user-specified environment variables. */ + errbuf[0] = '\0'; for (ep = env_vars; *ep != NULL; ep++) { if (def_secure_path && !user_is_exempt() && strncmp(*ep, "PATH=", 5) == 0) { @@ -1087,27 +1141,20 @@ /* Not allowed, add to error string, allocating as needed. */ if ((eq = strchr(*ep, '=')) != NULL) *eq = '\0'; - len = strlen(*ep) + 2; - if (blen + len >= bsize) { - do { - bsize += 1024; - } while (blen + len >= bsize); - bad = sudo_erealloc(bad, bsize); - bad[blen] = '\0'; + if (errbuf[0] != '\0') + (void)strlcat(errbuf, ", ", sizeof(errbuf)); + if (strlcat(errbuf, *ep, sizeof(errbuf)) >= sizeof(errbuf)) { + errbuf[sizeof(errbuf) - 4] = '\0'; + (void)strlcat(errbuf, "...", sizeof(errbuf)); } - strlcat(bad, *ep, bsize); - strlcat(bad, ", ", bsize); - blen += len; if (eq != NULL) *eq = '='; } } - if (bad != NULL) { - bad[blen - 2] = '\0'; /* remove trailing ", " */ + if (errbuf[0] != '\0') { /* XXX - audit? */ log_warningx(0, - N_("sorry, you are not allowed to set the following environment variables: %s"), bad); - sudo_efree(bad); + N_("sorry, you are not allowed to set the following environment variables: %s"), errbuf); rval = false; } debug_return_bool(rval); @@ -1166,10 +1213,17 @@ val_len -= 2; } - cp = sudo_emalloc(var_len + 1 + val_len + 1); + if ((cp = malloc(var_len + 1 + val_len + 1)) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + /* XXX - no undo on failure */ + rval = false; + break; + } memcpy(cp, var, var_len + 1); /* includes '=' */ memcpy(cp + var_len + 1, val, val_len + 1); /* includes NUL */ + sudoers_gc_add(GC_PTR, cp); if (sudo_putenv(cp, true, overwrite) == -1) { /* XXX - no undo on failure */ rval = false; @@ -1182,32 +1236,49 @@ debug_return_bool(rval); } -void +bool init_envtables(void) { struct list_member *cur; const char **p; + debug_decl(init_envtables, SUDOERS_DEBUG_ENV) /* Fill in the "env_delete" list. */ for (p = initial_badenv_table; *p; p++) { - cur = sudo_ecalloc(1, sizeof(struct list_member)); - cur->value = sudo_estrdup(*p); + cur = calloc(1, sizeof(struct list_member)); + if (cur == NULL || (cur->value = strdup(*p)) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + free(cur); + debug_return_bool(false); + } SLIST_INSERT_HEAD(&def_env_delete, cur, entries); } /* Fill in the "env_check" list. */ for (p = initial_checkenv_table; *p; p++) { - cur = sudo_ecalloc(1, sizeof(struct list_member)); - cur->value = sudo_estrdup(*p); + cur = calloc(1, sizeof(struct list_member)); + if (cur == NULL || (cur->value = strdup(*p)) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + free(cur); + debug_return_bool(false); + } SLIST_INSERT_HEAD(&def_env_check, cur, entries); } /* Fill in the "env_keep" list. */ for (p = initial_keepenv_table; *p; p++) { - cur = sudo_ecalloc(1, sizeof(struct list_member)); - cur->value = sudo_estrdup(*p); + cur = calloc(1, sizeof(struct list_member)); + if (cur == NULL || (cur->value = strdup(*p)) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + free(cur); + debug_return_bool(false); + } SLIST_INSERT_HEAD(&def_env_keep, cur, entries); } + debug_return_bool(true); } int diff -Nru sudo-1.8.12/plugins/sudoers/find_path.c sudo-1.8.16/plugins/sudoers/find_path.c --- sudo-1.8.12/plugins/sudoers/find_path.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/find_path.c 2015-10-31 23:35:00.000000000 +0000 @@ -24,99 +24,125 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include "sudoers.h" /* + * Check the given command against the specified whitelist (NULL-terminated). + * On success, rewrites cmnd based on the whitelist and returns true. + * On failure, returns false. + */ +static bool +cmnd_allowed(char *cmnd, size_t cmnd_size, 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)) + debug_return_bool(false); + + if (whitelist == NULL) + debug_return_bool(true); /* nothing to check */ + + /* We compare the base names to avoid excessive stat()ing. */ + if ((cmnd_base = strrchr(cmnd, '/')) == NULL) + debug_return_bool(false); /* can't happen */ + cmnd_base++; + + for (wl = whitelist; *wl != NULL; wl++) { + struct stat sb; + const char *base; + + if ((base = strrchr(*wl, '/')) == NULL) + continue; /* XXX - warn? */ + base++; + + if (strcmp(cmnd_base, base) != 0) + continue; + + if (sudo_goodpath(*wl, &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; + debug_return_bool(true); + } + } + debug_return_bool(false); +} + +/* * This function finds the full pathname for a command and * stores it in a statically allocated array, filling in a pointer * to the array. Returns FOUND if the command was found, NOT_FOUND * if it was not found, or NOT_FOUND_DOT if it would have been found * but it is in '.' and IGNORE_DOT is set. + * The caller is responsible for freeing the output file. */ int -find_path(char *infile, char **outfile, struct stat *sbp, char *path, - int ignore_dot) +find_path(const char *infile, char **outfile, struct stat *sbp, + const char *path, int ignore_dot, char * const *whitelist) { - static char command[PATH_MAX]; /* qualified filename */ - char *n; /* for traversing path */ - char *origpath; /* so we can free path later */ - bool found = false; /* did we find the command? */ - bool checkdot = false; /* check current dir? */ - int len; /* length parameter */ + char command[PATH_MAX]; + const char *cp, *ep, *pathend; + bool found = false; + bool checkdot = false; + int len; debug_decl(find_path, SUDOERS_DEBUG_UTIL) - if (strlen(infile) >= PATH_MAX) { - errno = ENAMETOOLONG; - debug_return_int(NOT_FOUND_ERROR); - } - /* * If we were given a fully qualified or relative path * there is no need to look at $PATH. */ - if (strchr(infile, '/')) { - strlcpy(command, infile, sizeof(command)); /* paranoia */ - if (sudo_goodpath(command, sbp)) { - *outfile = command; - debug_return_int(FOUND); - } else - debug_return_int(NOT_FOUND); + if (strchr(infile, '/') != NULL) { + if (strlcpy(command, infile, sizeof(command)) >= sizeof(command)) { + errno = ENAMETOOLONG; + debug_return_int(NOT_FOUND_ERROR); + } + found = cmnd_allowed(command, sizeof(command), sbp, whitelist); + goto done; } if (path == NULL) debug_return_int(NOT_FOUND); - path = sudo_estrdup(path); - origpath = path; - do { - if ((n = strchr(path, ':'))) - *n = '\0'; + pathend = path + strlen(path); + for (cp = sudo_strsplit(path, pathend, ":", &ep); cp != NULL; + cp = sudo_strsplit(NULL, pathend, ":", &ep)) { /* - * Search current dir last if it is in PATH This will miss sneaky - * things like using './' or './/' + * Search current dir last if it is in PATH. + * This will miss sneaky things like using './' or './/' (XXX) */ - if (*path == '\0' || (*path == '.' && *(path + 1) == '\0')) { + if (cp == ep || (*cp == '.' && cp + 1 == ep)) { checkdot = 1; - path = n + 1; continue; } /* * Resolve the path and exit the loop if found. */ - len = snprintf(command, sizeof(command), "%s/%s", path, infile); + len = snprintf(command, sizeof(command), "%.*s/%s", + (int)(ep - cp), cp, infile); if (len <= 0 || (size_t)len >= sizeof(command)) { - sudo_efree(origpath); errno = ENAMETOOLONG; debug_return_int(NOT_FOUND_ERROR); } - if ((found = sudo_goodpath(command, sbp))) + found = cmnd_allowed(command, sizeof(command), sbp, whitelist); + if (found) break; - - path = n + 1; - - } while (n); - sudo_efree(origpath); + } /* * Check current dir if dot was in the PATH @@ -127,14 +153,16 @@ errno = ENAMETOOLONG; debug_return_int(NOT_FOUND_ERROR); } - found = sudo_goodpath(command, sbp); + found = cmnd_allowed(command, sizeof(command), sbp, whitelist); if (found && ignore_dot) debug_return_int(NOT_FOUND_DOT); } +done: if (found) { - *outfile = command; + if ((*outfile = strdup(command)) == NULL) + debug_return_int(NOT_FOUND_ERROR); debug_return_int(FOUND); - } else - debug_return_int(NOT_FOUND); + } + debug_return_int(NOT_FOUND); } diff -Nru sudo-1.8.12/plugins/sudoers/gc.c sudo-1.8.16/plugins/sudoers/gc.c --- sudo-1.8.12/plugins/sudoers/gc.c 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/gc.c 2016-03-17 16:13:10.000000000 +0000 @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2016 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 "sudoers.h" + +struct sudoers_gc_entry { + SLIST_ENTRY(sudoers_gc_entry) entries; + enum sudoers_gc_types type; + union { + char **vec; + void *ptr; + } u; +}; +SLIST_HEAD(sudoers_gc_list, sudoers_gc_entry); +#ifdef NO_LEAKS +static struct sudoers_gc_list sudoers_gc_list = + SLIST_HEAD_INITIALIZER(sudoers_gc_list); +#endif + +bool +sudoers_gc_add(enum sudoers_gc_types type, void *v) +{ +#ifdef NO_LEAKS + struct sudoers_gc_entry *gc; + debug_decl(sudoers_gc_add, SUDOERS_DEBUG_UTIL) + + if (v == NULL) + debug_return_bool(false); + + gc = calloc(1, sizeof(*gc)); + if (gc == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_bool(false); + } + switch (type) { + case GC_PTR: + gc->u.ptr = v; + break; + case GC_VECTOR: + gc->u.vec = v; + break; + default: + free(gc); + sudo_warnx("unexpected garbage type %d", type); + debug_return_bool(false); + } + gc->type = type; + SLIST_INSERT_HEAD(&sudoers_gc_list, gc, entries); + debug_return_bool(true); +#else + return true; +#endif /* NO_LEAKS */ +} + +bool +sudoers_gc_remove(enum sudoers_gc_types type, void *v) +{ +#ifdef NO_LEAKS + struct sudoers_gc_entry *gc, *prev = NULL; + debug_decl(sudoers_gc_remove, SUDOERS_DEBUG_UTIL) + + SLIST_FOREACH(gc, &sudoers_gc_list, entries) { + switch (gc->type) { + case GC_PTR: + if (gc->u.ptr == v) + goto found; + break; + case GC_VECTOR: + if (gc->u.vec == v) + goto found; + break; + default: + sudo_warnx("unexpected garbage type %d in %p", gc->type, gc); + } + prev = gc; + } + return false; +found: + if (prev != NULL) + SLIST_REMOVE_HEAD(&sudoers_gc_list, entries); + else + SLIST_REMOVE_AFTER(prev, entries); + return true; +#else + return false; +#endif /* NO_LEAKS */ +} + +#ifdef NO_LEAKS +static void +sudoers_gc_run(void) +{ + struct sudoers_gc_entry *gc; + char **cur; + debug_decl(sudoers_gc_run, SUDOERS_DEBUG_UTIL) + + /* Collect garbage. */ + while ((gc = SLIST_FIRST(&sudoers_gc_list))) { + SLIST_REMOVE_HEAD(&sudoers_gc_list, entries); + switch (gc->type) { + case GC_PTR: + free(gc->u.ptr); + free(gc); + break; + case GC_VECTOR: + for (cur = gc->u.vec; *cur != NULL; cur++) + free(*cur); + free(gc->u.vec); + free(gc); + break; + default: + sudo_warnx("unexpected garbage type %d", gc->type); + } + } + + debug_return; +} +#endif /* NO_LEAKS */ + +void +sudoers_gc_init(void) +{ +#ifdef NO_LEAKS + atexit(sudoers_gc_run); +#endif +} diff -Nru sudo-1.8.12/plugins/sudoers/getdate.c sudo-1.8.16/plugins/sudoers/getdate.c --- sudo-1.8.12/plugins/sudoers/getdate.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/getdate.c 2015-10-31 23:35:00.000000000 +0000 @@ -29,18 +29,8 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H @@ -120,7 +110,7 @@ static int yylex(void); int yyparse(void); -#line 113 "getdate.y" +#line 103 "getdate.y" #ifndef YYSTYPE_DEFINED #define YYSTYPE_DEFINED typedef union { @@ -128,7 +118,7 @@ enum _MERIDIAN Meridian; } YYSTYPE; #endif /* YYSTYPE_DEFINED */ -#line 131 "getdate.c" +#line 121 "getdate.c" #define tAGO 257 #define tDAY 258 #define tDAYZONE 259 @@ -396,7 +386,7 @@ short *yysslim; YYSTYPE *yyvs; unsigned int yystacksize; -#line 332 "getdate.y" +#line 322 "getdate.y" /* Month and day table. */ static TABLE const MonthDayTable[] = { @@ -1018,7 +1008,7 @@ /* NOTREACHED */ } #endif /* TEST */ -#line 969 "getdate.c" +#line 959 "getdate.c" /* allocate initial stack or double stack size, up to YYMAXDEPTH */ #if defined(__cplusplus) || defined(__STDC__) static int yygrowstack(void) @@ -1227,37 +1217,37 @@ switch (yyn) { case 3: -#line 131 "getdate.y" +#line 121 "getdate.y" { yyHaveTime++; } break; case 4: -#line 134 "getdate.y" +#line 124 "getdate.y" { yyHaveZone++; } break; case 5: -#line 137 "getdate.y" +#line 127 "getdate.y" { yyHaveDate++; } break; case 6: -#line 140 "getdate.y" +#line 130 "getdate.y" { yyHaveDay++; } break; case 7: -#line 143 "getdate.y" +#line 133 "getdate.y" { yyHaveRel++; } break; case 9: -#line 149 "getdate.y" +#line 139 "getdate.y" { yyHour = yyvsp[-1].Number; yyMinutes = 0; @@ -1266,7 +1256,7 @@ } break; case 10: -#line 155 "getdate.y" +#line 145 "getdate.y" { yyHour = yyvsp[-3].Number; yyMinutes = yyvsp[-1].Number; @@ -1275,7 +1265,7 @@ } break; case 11: -#line 161 "getdate.y" +#line 151 "getdate.y" { yyHour = yyvsp[-3].Number; yyMinutes = yyvsp[-1].Number; @@ -1285,7 +1275,7 @@ } break; case 12: -#line 168 "getdate.y" +#line 158 "getdate.y" { yyHour = yyvsp[-5].Number; yyMinutes = yyvsp[-3].Number; @@ -1294,7 +1284,7 @@ } break; case 13: -#line 174 "getdate.y" +#line 164 "getdate.y" { yyHour = yyvsp[-5].Number; yyMinutes = yyvsp[-3].Number; @@ -1305,56 +1295,56 @@ } break; case 14: -#line 184 "getdate.y" +#line 174 "getdate.y" { yyTimezone = yyvsp[0].Number; yyDSTmode = DSToff; } break; case 15: -#line 188 "getdate.y" +#line 178 "getdate.y" { yyTimezone = yyvsp[0].Number; yyDSTmode = DSTon; } break; case 16: -#line 193 "getdate.y" +#line 183 "getdate.y" { yyTimezone = yyvsp[-1].Number; yyDSTmode = DSTon; } break; case 17: -#line 199 "getdate.y" +#line 189 "getdate.y" { yyDayOrdinal = 1; yyDayNumber = yyvsp[0].Number; } break; case 18: -#line 203 "getdate.y" +#line 193 "getdate.y" { yyDayOrdinal = 1; yyDayNumber = yyvsp[-1].Number; } break; case 19: -#line 207 "getdate.y" +#line 197 "getdate.y" { yyDayOrdinal = yyvsp[-1].Number; yyDayNumber = yyvsp[0].Number; } break; case 20: -#line 213 "getdate.y" +#line 203 "getdate.y" { yyMonth = yyvsp[-2].Number; yyDay = yyvsp[0].Number; } break; case 21: -#line 217 "getdate.y" +#line 207 "getdate.y" { if (yyvsp[-4].Number >= 100) { yyYear = yyvsp[-4].Number; @@ -1368,7 +1358,7 @@ } break; case 22: -#line 228 "getdate.y" +#line 218 "getdate.y" { /* ISO 8601 format. yyyy-mm-dd. */ yyYear = yyvsp[-2].Number; @@ -1377,7 +1367,7 @@ } break; case 23: -#line 234 "getdate.y" +#line 224 "getdate.y" { /* e.g. 17-JUN-1992. */ yyDay = yyvsp[-2].Number; @@ -1386,14 +1376,14 @@ } break; case 24: -#line 240 "getdate.y" +#line 230 "getdate.y" { yyMonth = yyvsp[-1].Number; yyDay = yyvsp[0].Number; } break; case 25: -#line 244 "getdate.y" +#line 234 "getdate.y" { yyMonth = yyvsp[-3].Number; yyDay = yyvsp[-2].Number; @@ -1401,14 +1391,14 @@ } break; case 26: -#line 249 "getdate.y" +#line 239 "getdate.y" { yyMonth = yyvsp[0].Number; yyDay = yyvsp[-1].Number; } break; case 27: -#line 253 "getdate.y" +#line 243 "getdate.y" { yyMonth = yyvsp[-1].Number; yyDay = yyvsp[-2].Number; @@ -1416,68 +1406,68 @@ } break; case 28: -#line 260 "getdate.y" +#line 250 "getdate.y" { yyRelSeconds = -yyRelSeconds; yyRelMonth = -yyRelMonth; } break; case 30: -#line 267 "getdate.y" +#line 257 "getdate.y" { yyRelSeconds += yyvsp[-1].Number * yyvsp[0].Number * 60L; } break; case 31: -#line 270 "getdate.y" +#line 260 "getdate.y" { yyRelSeconds += yyvsp[-1].Number * yyvsp[0].Number * 60L; } break; case 32: -#line 273 "getdate.y" +#line 263 "getdate.y" { yyRelSeconds += yyvsp[0].Number * 60L; } break; case 33: -#line 276 "getdate.y" +#line 266 "getdate.y" { yyRelSeconds += yyvsp[-1].Number; } break; case 34: -#line 279 "getdate.y" +#line 269 "getdate.y" { yyRelSeconds += yyvsp[-1].Number; } break; case 35: -#line 282 "getdate.y" +#line 272 "getdate.y" { yyRelSeconds++; } break; case 36: -#line 285 "getdate.y" +#line 275 "getdate.y" { yyRelMonth += yyvsp[-1].Number * yyvsp[0].Number; } break; case 37: -#line 288 "getdate.y" +#line 278 "getdate.y" { yyRelMonth += yyvsp[-1].Number * yyvsp[0].Number; } break; case 38: -#line 291 "getdate.y" +#line 281 "getdate.y" { yyRelMonth += yyvsp[0].Number; } break; case 39: -#line 296 "getdate.y" +#line 286 "getdate.y" { if (yyHaveTime && yyHaveDate && !yyHaveRel) yyYear = yyvsp[0].Number; @@ -1505,18 +1495,18 @@ } break; case 40: -#line 323 "getdate.y" +#line 313 "getdate.y" { yyval.Meridian = MER24; } break; case 41: -#line 326 "getdate.y" +#line 316 "getdate.y" { yyval.Meridian = yyvsp[0].Meridian; } break; -#line 1467 "getdate.c" +#line 1457 "getdate.c" } yyssp -= yym; yystate = *yyssp; diff -Nru sudo-1.8.12/plugins/sudoers/getdate.y sudo-1.8.16/plugins/sudoers/getdate.y --- sudo-1.8.12/plugins/sudoers/getdate.y 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/getdate.y 2015-10-31 23:35:00.000000000 +0000 @@ -17,18 +17,8 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H diff -Nru sudo-1.8.12/plugins/sudoers/getspwuid.c sudo-1.8.16/plugins/sudoers/getspwuid.c --- sudo-1.8.12/plugins/sudoers/getspwuid.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/getspwuid.c 2015-10-31 23:35:00.000000000 +0000 @@ -24,23 +24,14 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include #ifdef HAVE_GETSPNAM @@ -142,7 +133,7 @@ done: #endif /* If no shadow password, fall back on regular password. */ - debug_return_str(sudo_estrdup(epw ? epw : pw->pw_passwd)); + debug_return_str(strdup(epw ? epw : pw->pw_passwd)); } void diff -Nru sudo-1.8.12/plugins/sudoers/goodpath.c sudo-1.8.16/plugins/sudoers/goodpath.c --- sudo-1.8.12/plugins/sudoers/goodpath.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/goodpath.c 2015-10-31 23:35:00.000000000 +0000 @@ -30,9 +30,7 @@ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include "sudoers.h" @@ -43,18 +41,22 @@ bool sudo_goodpath(const char *path, struct stat *sbp) { - struct stat sb; bool rval = false; debug_decl(sudo_goodpath, SUDOERS_DEBUG_UTIL) - if (path != NULL && stat(path, &sb) == 0) { - /* Make sure path describes an executable regular file. */ - if (S_ISREG(sb.st_mode) && ISSET(sb.st_mode, 0111)) - rval = true; - else - errno = EACCES; - if (sbp) - (void) memcpy(sbp, &sb, sizeof(struct stat)); + if (path != NULL) { + struct stat sb; + + if (sbp == NULL) + sbp = &sb; + + if (stat(path, sbp) == 0) { + /* Make sure path describes an executable regular file. */ + if (S_ISREG(sbp->st_mode) && ISSET(sbp->st_mode, 0111)) + rval = true; + else + errno = EACCES; + } } debug_return_bool(rval); diff -Nru sudo-1.8.12/plugins/sudoers/gram.c sudo-1.8.16/plugins/sudoers/gram.c --- sudo-1.8.12/plugins/sudoers/gram.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/gram.c 2015-10-31 23:35:24.000000000 +0000 @@ -64,23 +64,15 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #if defined(HAVE_STDINT_H) # include #elif defined(HAVE_INTTYPES_H) @@ -109,12 +101,12 @@ /* * Local protoypes */ -static void add_defaults(int, struct member *, struct defaults *); -static void add_userspec(struct member *, struct privilege *); +static bool add_defaults(int, struct member *, struct defaults *); +static bool add_userspec(struct member *, struct privilege *); static struct defaults *new_default(char *, char *, int); static struct member *new_member(char *, int); static struct sudo_digest *new_digest(int, const char *); -#line 81 "gram.y" +#line 73 "gram.y" #ifndef YYSTYPE_DEFINED #define YYSTYPE_DEFINED typedef union { @@ -132,7 +124,7 @@ int tok; } YYSTYPE; #endif /* YYSTYPE_DEFINED */ -#line 135 "gram.c" +#line 127 "gram.c" #define COMMAND 257 #define ALIAS 258 #define DEFVAR 259 @@ -156,22 +148,26 @@ #define NOLOG_INPUT 277 #define LOG_OUTPUT 278 #define NOLOG_OUTPUT 279 -#define ALL 280 -#define COMMENT 281 -#define HOSTALIAS 282 -#define CMNDALIAS 283 -#define USERALIAS 284 -#define RUNASALIAS 285 -#define ERROR 286 -#define TYPE 287 -#define ROLE 288 -#define PRIVS 289 -#define LIMITPRIVS 290 -#define MYSELF 291 -#define SHA224_TOK 292 -#define SHA256_TOK 293 -#define SHA384_TOK 294 -#define SHA512_TOK 295 +#define MAIL 280 +#define NOMAIL 281 +#define FOLLOW 282 +#define NOFOLLOW 283 +#define ALL 284 +#define COMMENT 285 +#define HOSTALIAS 286 +#define CMNDALIAS 287 +#define USERALIAS 288 +#define RUNASALIAS 289 +#define ERROR 290 +#define TYPE 291 +#define ROLE 292 +#define PRIVS 293 +#define LIMITPRIVS 294 +#define MYSELF 295 +#define SHA224_TOK 296 +#define SHA256_TOK 297 +#define SHA384_TOK 298 +#define SHA512_TOK 299 #define YYERRCODE 256 #if defined(__cplusplus) || defined(__STDC__) const short sudoerslhs[] = @@ -186,11 +182,11 @@ 7, 7, 6, 6, 24, 25, 23, 23, 23, 23, 23, 27, 28, 26, 26, 26, 26, 26, 18, 18, 19, 19, 19, 19, 19, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 5, 5, 5, 33, - 33, 36, 10, 10, 34, 34, 37, 8, 8, 35, - 35, 38, 32, 32, 39, 14, 14, 12, 12, 13, - 13, 13, 13, 13, 17, 17, 15, 15, 16, 16, - 16, + 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, + 5, 5, 5, 33, 33, 36, 10, 10, 34, 34, + 37, 8, 8, 35, 35, 38, 32, 32, 39, 14, + 14, 12, 12, 13, 13, 13, 13, 13, 17, 17, + 15, 15, 16, 16, 16, }; #if defined(__cplusplus) || defined(__STDC__) const short sudoerslen[] = @@ -205,11 +201,11 @@ 1, 2, 1, 2, 3, 3, 0, 1, 1, 2, 2, 3, 3, 0, 1, 1, 2, 2, 0, 3, 0, 1, 3, 2, 1, 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, + 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[] = @@ -217,24 +213,24 @@ short sudoersdefred[] = #endif { 0, - 0, 100, 102, 103, 104, 0, 0, 0, 0, 0, - 101, 5, 0, 0, 0, 0, 0, 0, 96, 98, + 0, 104, 106, 107, 108, 0, 0, 0, 0, 0, + 105, 5, 0, 0, 0, 0, 0, 0, 100, 102, 0, 0, 3, 6, 0, 0, 17, 0, 29, 32, - 31, 33, 30, 0, 27, 0, 83, 0, 0, 79, - 78, 77, 0, 0, 0, 0, 0, 43, 41, 88, - 0, 0, 0, 0, 80, 0, 0, 85, 0, 0, - 93, 0, 0, 90, 99, 0, 0, 24, 0, 4, + 31, 33, 30, 0, 27, 0, 87, 0, 0, 83, + 82, 81, 0, 0, 0, 0, 0, 43, 41, 92, + 0, 0, 0, 0, 84, 0, 0, 89, 0, 0, + 97, 0, 0, 94, 103, 0, 0, 24, 0, 4, 0, 0, 0, 20, 0, 28, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 42, 0, 0, - 0, 0, 0, 0, 0, 0, 97, 0, 0, 21, - 22, 23, 18, 84, 37, 38, 39, 40, 89, 0, - 81, 0, 86, 0, 94, 0, 91, 0, 34, 0, + 0, 0, 0, 0, 0, 0, 101, 0, 0, 21, + 22, 23, 18, 88, 37, 38, 39, 40, 93, 0, + 85, 0, 90, 0, 98, 0, 95, 0, 34, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 109, 111, 110, 0, 105, 107, 0, 0, 60, + 0, 113, 115, 114, 0, 109, 111, 0, 0, 60, 35, 0, 0, 0, 0, 66, 0, 0, 50, 51, - 108, 0, 0, 46, 45, 0, 0, 0, 57, 58, - 106, 52, 53, 67, 68, 69, 70, 71, 72, 73, - 74, 75, 76, 36, + 112, 0, 0, 46, 45, 0, 0, 0, 57, 58, + 110, 52, 53, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 79, 80, 77, 78, 36, }; #if defined(__cplusplus) || defined(__STDC__) const short sudoersdgoto[] = @@ -252,164 +248,165 @@ #else short sudoerssindex[] = #endif - { -33, - -277, 0, 0, 0, 0, -13, 75, 105, 105, -15, - 0, 0, -246, -241, -217, -210, -226, 0, 0, 0, - -5, -33, 0, 0, -3, -244, 0, 5, 0, 0, - 0, 0, 0, -237, 0, -28, 0, -19, -19, 0, - 0, 0, -251, -7, -1, 4, 7, 0, 0, 0, - -14, -20, -2, 8, 0, 6, 11, 0, 9, 13, - 0, 12, 14, 0, 0, 105, -11, 0, 18, 0, - -203, -200, -188, 0, -13, 0, 75, 5, 5, 5, - 0, -187, -185, -184, -183, -15, 5, 0, 75, -246, - -15, -241, 105, -217, 105, -210, 0, 42, 75, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, - 0, 40, 0, 43, 0, 43, 0, 45, 0, 44, - -279, 0, 135, -6, 49, 42, 25, 32, -243, -195, - -192, 0, 0, 0, -236, 0, 0, 54, 135, 0, - 0, -164, -163, 41, 46, 0, -189, -180, 0, 0, - 0, 135, 54, 0, 0, -159, -158, 585, 0, 0, + { 686, + -272, 0, 0, 0, 0, -23, 227, -19, -19, -5, + 0, 0, -239, -236, -234, -232, -231, 0, 0, 0, + -33, 686, 0, 0, -3, -220, 0, 3, 0, 0, + 0, 0, 0, -225, 0, -28, 0, -24, -24, 0, + 0, 0, -240, -15, -8, 2, 8, 0, 0, 0, + -21, -12, -9, 10, 0, 9, 13, 0, 11, 16, + 0, 14, 19, 0, 0, -19, -36, 0, 20, 0, + -208, -187, -183, 0, -23, 0, 227, 3, 3, 3, + 0, -181, -180, -179, -178, -5, 3, 0, 227, -239, + -5, -236, -19, -234, -19, -232, 0, 41, 227, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, + 0, 47, 0, 48, 0, 48, 0, -29, 0, 50, + -230, 0, 289, -7, 52, 41, 34, 37, -229, -192, + -191, 0, 0, 0, -217, 0, 0, 56, 289, 0, + 0, -161, -160, 43, 44, 0, -188, -185, 0, 0, + 0, 289, 56, 0, 0, -154, -153, 533, 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 - { 106, + { 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 110, 0, 0, 1, 0, 0, 181, 0, 0, + 0, 114, 0, 0, 1, 0, 0, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 211, 0, 0, 241, 0, 0, 271, - 0, 0, 301, 0, 0, 0, 0, 0, 331, 0, - 0, 0, 0, 0, 0, 0, 0, 361, 391, 421, - 0, 0, 0, 0, 0, 0, 451, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, - 0, 61, 0, 91, 0, 121, 0, 70, 0, 151, - 495, 0, 71, 72, 0, 467, 0, 0, 615, 525, - 555, 0, 0, 0, 0, 0, 0, 73, 0, 0, - 0, 0, 0, 0, 0, 0, 645, 675, 0, 0, - 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 159, 0, 0, 193, 0, 0, 207, + 0, 0, 241, 0, 0, 0, 0, 0, 275, 0, + 0, 0, 0, 0, 0, 0, 0, 309, 323, 357, + 0, 0, 0, 0, 0, 0, 371, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 404, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, + 0, 49, 0, 63, 0, 97, 0, 74, 0, 111, + 434, 0, 75, 76, 0, 404, 0, 0, 566, 465, + 499, 0, 0, 0, 0, 0, 0, 77, 0, 0, + 0, 0, 0, 0, 0, 0, 597, 630, 0, 0, + 0, 0, 78, 0, 0, 0, 0, 0, 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, - -10, 0, 47, 17, 80, 65, -84, 27, 92, -4, - 48, 62, 112, 2, -25, 10, -9, 0, 0, 33, - 0, 0, 0, 3, 16, 0, -17, -12, 0, 0, - 111, 0, 0, 0, 0, 50, 51, 52, 53, + -4, 0, 45, 18, 80, 72, -79, 35, 91, -1, + 51, 61, 112, -6, -20, -2, 4, 0, 0, 32, + 0, 0, 0, 5, 7, 0, -14, 6, 0, 0, + 116, 0, 0, 0, 0, 57, 54, 39, 55, }; -#define YYTABLESIZE 970 +#define YYTABLESIZE 975 #if defined(__cplusplus) || defined(__STDC__) const short sudoerstable[] = #else short sudoerstable[] = #endif - { 17, - 19, 109, 36, 24, 26, 40, 41, 127, 128, 38, - 39, 53, 43, 26, 74, 77, 56, 43, 26, 26, - 29, 132, 30, 31, 66, 32, 133, 34, 42, 86, - 82, 2, 77, 19, 3, 4, 5, 66, 66, 72, - 59, 73, 33, 134, 19, 144, 145, 62, 75, 98, - 82, 139, 78, 11, 79, 80, 83, 71, 89, 100, - 87, 84, 101, 82, 85, 90, 91, 87, 92, 93, - 94, 96, 95, 174, 102, 99, 105, 17, 106, 107, - 108, 118, 77, 86, 110, 142, 66, 126, 82, 140, - 95, 127, 143, 87, 114, 128, 116, 152, 154, 155, - 145, 156, 123, 162, 163, 1, 157, 34, 144, 2, - 61, 65, 62, 64, 63, 141, 88, 112, 87, 124, - 92, 103, 81, 95, 104, 76, 161, 97, 65, 153, - 160, 122, 70, 150, 159, 0, 0, 17, 0, 111, - 0, 0, 113, 0, 151, 149, 115, 117, 95, 0, - 26, 0, 0, 92, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 92, 0, - 12, 0, 0, 26, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + { 34, + 19, 38, 39, 17, 26, 36, 109, 77, 26, 26, + 66, 26, 24, 17, 86, 77, 40, 41, 53, 66, + 43, 56, 86, 59, 98, 62, 2, 43, 123, 3, + 4, 5, 29, 19, 30, 31, 66, 32, 74, 72, + 132, 73, 82, 42, 19, 133, 75, 86, 91, 83, + 139, 89, 11, 78, 100, 79, 80, 71, 33, 84, + 127, 128, 99, 144, 145, 85, 134, 90, 87, 91, + 92, 93, 86, 94, 95, 101, 96, 99, 178, 102, + 118, 91, 105, 106, 107, 108, 114, 110, 116, 77, + 86, 66, 140, 126, 142, 99, 96, 143, 127, 152, + 128, 154, 155, 156, 157, 145, 91, 144, 162, 163, + 26, 124, 1, 2, 61, 65, 62, 64, 63, 103, + 99, 141, 81, 88, 76, 112, 97, 104, 65, 96, + 122, 161, 151, 160, 117, 150, 149, 70, 0, 0, + 0, 0, 153, 26, 12, 113, 111, 0, 115, 0, + 0, 0, 159, 0, 96, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, - 9, 0, 0, 12, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 2, 0, 0, 3, 4, 5, - 25, 6, 7, 8, 9, 10, 40, 41, 0, 25, - 10, 40, 41, 9, 25, 25, 11, 12, 13, 14, - 15, 16, 29, 0, 30, 31, 19, 32, 19, 42, - 0, 19, 19, 19, 42, 19, 19, 19, 19, 19, - 8, 0, 0, 10, 33, 0, 44, 45, 46, 47, - 19, 19, 19, 19, 19, 19, 82, 0, 82, 0, - 0, 82, 82, 82, 0, 82, 82, 82, 82, 82, - 11, 0, 2, 8, 0, 3, 4, 5, 0, 0, - 82, 82, 82, 82, 82, 82, 87, 0, 87, 0, - 0, 87, 87, 87, 11, 87, 87, 87, 87, 87, - 7, 0, 29, 11, 30, 31, 0, 32, 0, 0, - 87, 87, 87, 87, 87, 87, 95, 0, 95, 0, - 0, 95, 95, 95, 33, 95, 95, 95, 95, 95, - 15, 0, 2, 7, 0, 3, 4, 5, 0, 0, - 95, 95, 95, 95, 95, 95, 92, 0, 92, 0, - 0, 92, 92, 92, 11, 92, 92, 92, 92, 92, - 13, 0, 132, 15, 0, 0, 0, 133, 0, 0, - 92, 92, 92, 92, 92, 92, 26, 0, 26, 0, - 0, 26, 26, 26, 134, 26, 26, 26, 26, 26, - 14, 0, 0, 13, 0, 0, 0, 0, 0, 0, - 26, 26, 26, 26, 26, 26, 12, 0, 12, 0, - 0, 12, 12, 12, 0, 12, 12, 12, 12, 12, - 16, 0, 0, 14, 0, 0, 0, 0, 0, 0, - 12, 12, 12, 12, 12, 12, 9, 0, 9, 0, - 0, 9, 9, 9, 0, 9, 9, 9, 9, 9, - 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, - 9, 9, 9, 9, 9, 9, 10, 0, 10, 59, - 0, 10, 10, 10, 0, 10, 10, 10, 10, 10, + 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 10, 10, 10, 10, 10, 10, 8, 47, 8, 0, - 0, 8, 8, 8, 0, 8, 8, 8, 8, 8, + 0, 9, 10, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 29, 10, 30, 31, 2, 32, + 25, 3, 4, 5, 25, 25, 0, 25, 2, 8, + 11, 3, 4, 5, 40, 41, 0, 0, 0, 0, + 33, 40, 41, 0, 11, 0, 19, 0, 19, 34, + 0, 19, 19, 19, 11, 19, 19, 19, 19, 19, + 86, 42, 86, 11, 7, 86, 86, 86, 42, 86, + 86, 86, 86, 86, 19, 19, 19, 19, 19, 19, + 44, 45, 46, 47, 0, 0, 0, 0, 86, 86, + 86, 86, 86, 86, 91, 0, 91, 7, 15, 91, + 91, 91, 0, 91, 91, 91, 91, 91, 99, 0, + 99, 135, 13, 99, 99, 99, 0, 99, 99, 99, + 99, 99, 91, 91, 91, 91, 91, 91, 0, 0, + 0, 15, 0, 0, 0, 0, 99, 99, 99, 99, + 99, 99, 96, 0, 96, 13, 14, 96, 96, 96, + 0, 96, 96, 96, 96, 96, 26, 0, 26, 0, + 16, 26, 26, 26, 0, 26, 26, 26, 26, 26, + 96, 96, 96, 96, 96, 96, 0, 0, 0, 14, + 0, 0, 0, 0, 26, 26, 26, 26, 26, 26, + 12, 0, 12, 16, 0, 12, 12, 12, 0, 12, + 12, 12, 12, 12, 9, 0, 9, 0, 0, 9, + 9, 9, 0, 9, 9, 9, 9, 9, 12, 12, + 12, 12, 12, 12, 0, 0, 59, 0, 0, 0, + 0, 0, 9, 9, 9, 9, 9, 9, 10, 0, + 10, 0, 0, 10, 10, 10, 0, 10, 10, 10, + 10, 10, 8, 0, 8, 0, 47, 8, 8, 8, + 0, 8, 8, 8, 8, 8, 10, 10, 10, 10, + 10, 10, 0, 0, 29, 0, 30, 31, 0, 32, 8, 8, 8, 8, 8, 8, 11, 48, 11, 0, 0, 11, 11, 11, 0, 11, 11, 11, 11, 11, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 11, 11, 11, 11, 11, 11, 7, 49, 7, 0, - 0, 7, 7, 7, 0, 7, 7, 7, 7, 7, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 7, 7, 7, 7, 7, 7, 15, 43, 15, 0, - 0, 15, 15, 15, 0, 15, 15, 15, 15, 15, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 15, 15, 15, 15, 15, 15, 13, 54, 13, 0, - 0, 13, 13, 13, 0, 13, 13, 13, 13, 13, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 13, 13, 13, 13, 13, 13, 14, 55, 14, 0, - 0, 14, 14, 14, 0, 14, 14, 14, 14, 14, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 14, 14, 14, 14, 14, 14, 16, 56, 16, 0, + 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 11, 11, 11, 11, 11, 11, + 7, 49, 7, 0, 0, 7, 7, 7, 0, 7, + 7, 7, 7, 7, 0, 0, 132, 0, 0, 0, + 0, 133, 0, 0, 0, 0, 0, 0, 7, 7, + 7, 7, 7, 7, 15, 43, 15, 0, 0, 15, + 15, 15, 134, 15, 15, 15, 15, 15, 13, 0, + 13, 0, 0, 13, 13, 13, 0, 13, 13, 13, + 13, 13, 15, 15, 15, 15, 15, 15, 54, 0, + 0, 0, 0, 0, 0, 0, 13, 13, 13, 13, + 13, 13, 14, 0, 14, 0, 0, 14, 14, 14, + 0, 14, 14, 14, 14, 14, 16, 0, 16, 55, 0, 16, 16, 16, 0, 16, 16, 16, 16, 16, - 0, 0, 0, 59, 59, 0, 0, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 0, 0, 0, - 0, 47, 47, 59, 59, 59, 59, 0, 59, 59, - 59, 59, 0, 0, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 0, 0, 0, 0, 0, - 0, 48, 48, 47, 47, 0, 47, 47, 47, 47, - 0, 0, 0, 0, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, - 0, 49, 49, 48, 48, 0, 48, 48, 48, 48, - 0, 0, 0, 0, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 0, 0, 0, 0, 0, - 0, 40, 41, 49, 49, 0, 49, 49, 49, 49, - 0, 0, 0, 0, 164, 165, 166, 167, 168, 169, - 170, 171, 172, 173, 42, 0, 0, 0, 0, 0, - 0, 54, 54, 0, 0, 0, 44, 45, 46, 47, - 0, 0, 0, 0, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 0, 0, 0, 0, 0, - 0, 55, 55, 0, 0, 0, 54, 54, 54, 54, - 0, 0, 0, 0, 55, 55, 55, 55, 55, 55, - 55, 55, 55, 55, 55, 0, 0, 0, 0, 0, - 0, 56, 56, 0, 0, 0, 55, 55, 55, 55, - 0, 0, 0, 0, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 56, 56, 56, 56, + 14, 14, 14, 14, 14, 14, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 16, 16, 16, 16, 16, + 59, 59, 56, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 59, 59, 59, 59, 59, 59, 59, + 59, 59, 59, 59, 59, 59, 59, 59, 0, 0, + 47, 47, 0, 0, 59, 59, 59, 59, 0, 59, + 59, 59, 59, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 17, 0, + 0, 48, 48, 0, 0, 0, 47, 47, 0, 47, + 47, 47, 47, 0, 48, 48, 48, 48, 48, 48, + 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, + 0, 0, 0, 0, 0, 49, 49, 48, 48, 0, + 48, 48, 48, 48, 0, 0, 0, 0, 49, 49, + 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, + 49, 49, 49, 0, 0, 0, 0, 0, 0, 40, + 41, 49, 49, 0, 49, 49, 49, 49, 0, 0, + 0, 0, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176, 177, 42, 0, 0, 0, + 0, 0, 54, 54, 0, 0, 0, 0, 44, 45, + 46, 47, 0, 0, 0, 54, 54, 54, 54, 54, + 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, + 0, 0, 0, 55, 55, 0, 0, 0, 0, 0, + 0, 54, 54, 54, 54, 0, 55, 55, 55, 55, + 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, + 55, 0, 0, 0, 0, 0, 56, 56, 0, 0, + 0, 0, 55, 55, 55, 55, 0, 0, 0, 56, + 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, + 56, 56, 56, 56, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 56, 56, 56, 56, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 0, 2, 0, 0, 3, 4, 5, 0, + 6, 7, 8, 9, 10, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, + 12, 13, 14, 15, 16, }; #if defined(__cplusplus) || defined(__STDC__) const short sudoerscheck[] = @@ -417,109 +414,110 @@ short sudoerscheck[] = #endif { 33, - 0, 86, 7, 281, 33, 257, 258, 287, 288, 8, - 9, 258, 33, 33, 259, 44, 258, 33, 33, 33, - 258, 258, 260, 261, 44, 263, 263, 33, 280, 44, - 0, 258, 44, 33, 261, 262, 263, 44, 44, 43, - 258, 45, 280, 280, 44, 289, 290, 258, 44, 61, - 58, 58, 36, 280, 38, 39, 58, 61, 61, 263, - 0, 58, 263, 33, 58, 58, 61, 51, 58, 61, - 58, 58, 61, 158, 263, 58, 264, 33, 264, 264, - 264, 40, 44, 44, 89, 61, 44, 44, 58, 41, - 0, 287, 61, 33, 93, 288, 95, 44, 263, 263, - 290, 61, 58, 263, 263, 0, 61, 33, 289, 0, - 41, 41, 41, 41, 41, 126, 52, 91, 58, 118, - 0, 75, 43, 33, 77, 34, 152, 66, 17, 139, - 148, 99, 22, 131, 147, -1, -1, 33, -1, 90, - -1, -1, 92, -1, 135, 130, 94, 96, 58, -1, - 0, -1, -1, 33, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 33, -1, -1, + 0, 8, 9, 33, 33, 7, 86, 44, 33, 33, + 44, 33, 285, 33, 0, 44, 257, 258, 258, 44, + 33, 258, 44, 258, 61, 258, 258, 33, 58, 261, + 262, 263, 258, 33, 260, 261, 44, 263, 259, 43, + 258, 45, 58, 284, 44, 263, 44, 33, 0, 58, + 58, 61, 284, 36, 263, 38, 39, 61, 284, 58, + 291, 292, 0, 293, 294, 58, 284, 58, 51, 61, + 58, 61, 58, 58, 61, 263, 58, 58, 158, 263, + 40, 33, 264, 264, 264, 264, 93, 89, 95, 44, + 44, 44, 41, 44, 61, 33, 0, 61, 291, 44, + 292, 263, 263, 61, 61, 294, 58, 293, 263, 263, + 0, 118, 0, 0, 41, 41, 41, 41, 41, 75, + 58, 126, 43, 52, 34, 91, 66, 77, 17, 33, + 99, 152, 135, 148, 96, 131, 130, 22, -1, -1, + -1, -1, 139, 33, 0, 92, 90, -1, 94, -1, + -1, -1, 147, -1, 58, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 58, -1, - 0, -1, -1, 33, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 58, -1, - 0, -1, -1, 33, -1, -1, -1, -1, -1, -1, - -1, -1, 256, -1, 258, -1, -1, 261, 262, 263, - 259, 265, 266, 267, 268, 269, 257, 258, -1, 259, - 0, 257, 258, 33, 259, 259, 280, 281, 282, 283, - 284, 285, 258, -1, 260, 261, 256, 263, 258, 280, - -1, 261, 262, 263, 280, 265, 266, 267, 268, 269, - 0, -1, -1, 33, 280, -1, 292, 293, 294, 295, - 280, 281, 282, 283, 284, 285, 256, -1, 258, -1, - -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, - 0, -1, 258, 33, -1, 261, 262, 263, -1, -1, - 280, 281, 282, 283, 284, 285, 256, -1, 258, -1, - -1, 261, 262, 263, 280, 265, 266, 267, 268, 269, - 0, -1, 258, 33, 260, 261, -1, 263, -1, -1, - 280, 281, 282, 283, 284, 285, 256, -1, 258, -1, - -1, 261, 262, 263, 280, 265, 266, 267, 268, 269, - 0, -1, 258, 33, -1, 261, 262, 263, -1, -1, - 280, 281, 282, 283, 284, 285, 256, -1, 258, -1, - -1, 261, 262, 263, 280, 265, 266, 267, 268, 269, - 0, -1, 258, 33, -1, -1, -1, 263, -1, -1, - 280, 281, 282, 283, 284, 285, 256, -1, 258, -1, - -1, 261, 262, 263, 280, 265, 266, 267, 268, 269, - 0, -1, -1, 33, -1, -1, -1, -1, -1, -1, - 280, 281, 282, 283, 284, 285, 256, -1, 258, -1, - -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, - 0, -1, -1, 33, -1, -1, -1, -1, -1, -1, - 280, 281, 282, 283, 284, 285, 256, -1, 258, -1, - -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, - -1, -1, -1, 33, -1, -1, -1, -1, -1, -1, - 280, 281, 282, 283, 284, 285, 256, -1, 258, 33, - -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 280, 281, 282, 283, 284, 285, 256, 33, 258, -1, - -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 280, 281, 282, 283, 284, 285, 256, 33, 258, -1, - -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 280, 281, 282, 283, 284, 285, 256, 33, 258, -1, - -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 280, 281, 282, 283, 284, 285, 256, 33, 258, -1, - -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, + -1, -1, -1, -1, -1, -1, -1, 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 280, 281, 282, 283, 284, 285, 256, 33, 258, -1, - -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, + -1, 33, 0, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 280, 281, 282, 283, 284, 285, 256, 33, 258, -1, + -1, -1, -1, -1, 258, 33, 260, 261, 258, 263, + 259, 261, 262, 263, 259, 259, -1, 259, 258, 33, + 0, 261, 262, 263, 257, 258, -1, -1, -1, -1, + 284, 257, 258, -1, 284, -1, 256, -1, 258, 33, + -1, 261, 262, 263, 284, 265, 266, 267, 268, 269, + 256, 284, 258, 33, 0, 261, 262, 263, 284, 265, + 266, 267, 268, 269, 284, 285, 286, 287, 288, 289, + 296, 297, 298, 299, -1, -1, -1, -1, 284, 285, + 286, 287, 288, 289, 256, -1, 258, 33, 0, 261, + 262, 263, -1, 265, 266, 267, 268, 269, 256, -1, + 258, 33, 0, 261, 262, 263, -1, 265, 266, 267, + 268, 269, 284, 285, 286, 287, 288, 289, -1, -1, + -1, 33, -1, -1, -1, -1, 284, 285, 286, 287, + 288, 289, 256, -1, 258, 33, 0, 261, 262, 263, + -1, 265, 266, 267, 268, 269, 256, -1, 258, -1, + 0, 261, 262, 263, -1, 265, 266, 267, 268, 269, + 284, 285, 286, 287, 288, 289, -1, -1, -1, 33, + -1, -1, -1, -1, 284, 285, 286, 287, 288, 289, + 256, -1, 258, 33, -1, 261, 262, 263, -1, 265, + 266, 267, 268, 269, 256, -1, 258, -1, -1, 261, + 262, 263, -1, 265, 266, 267, 268, 269, 284, 285, + 286, 287, 288, 289, -1, -1, 33, -1, -1, -1, + -1, -1, 284, 285, 286, 287, 288, 289, 256, -1, + 258, -1, -1, 261, 262, 263, -1, 265, 266, 267, + 268, 269, 256, -1, 258, -1, 33, 261, 262, 263, + -1, 265, 266, 267, 268, 269, 284, 285, 286, 287, + 288, 289, -1, -1, 258, -1, 260, 261, -1, 263, + 284, 285, 286, 287, 288, 289, 256, 33, 258, -1, -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 280, 281, 282, 283, 284, 285, 256, 33, 258, -1, + 284, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 284, 285, 286, 287, 288, 289, + 256, 33, 258, -1, -1, 261, 262, 263, -1, 265, + 266, 267, 268, 269, -1, -1, 258, -1, -1, -1, + -1, 263, -1, -1, -1, -1, -1, -1, 284, 285, + 286, 287, 288, 289, 256, 33, 258, -1, -1, 261, + 262, 263, 284, 265, 266, 267, 268, 269, 256, -1, + 258, -1, -1, 261, 262, 263, -1, 265, 266, 267, + 268, 269, 284, 285, 286, 287, 288, 289, 33, -1, + -1, -1, -1, -1, -1, -1, 284, 285, 286, 287, + 288, 289, 256, -1, 258, -1, -1, 261, 262, 263, + -1, 265, 266, 267, 268, 269, 256, -1, 258, 33, -1, 261, 262, 263, -1, 265, 266, 267, 268, 269, + 284, 285, 286, 287, 288, 289, -1, -1, -1, -1, + -1, -1, -1, -1, 284, 285, 286, 287, 288, 289, + 257, 258, 33, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, -1, -1, + 257, 258, -1, -1, 291, 292, 293, 294, -1, 296, + 297, 298, 299, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 33, -1, + -1, 257, 258, -1, -1, -1, 293, 294, -1, 296, + 297, 298, 299, -1, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, -1, + -1, -1, -1, -1, -1, 257, 258, 293, 294, -1, + 296, 297, 298, 299, -1, -1, -1, -1, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, -1, -1, -1, -1, -1, -1, 257, + 258, 293, 294, -1, 296, 297, 298, 299, -1, -1, + -1, -1, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, -1, -1, -1, + -1, -1, 257, 258, -1, -1, -1, -1, 296, 297, + 298, 299, -1, -1, -1, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, -1, -1, -1, 257, 258, -1, -1, -1, -1, -1, - 280, 281, 282, 283, 284, 285, 270, 271, 272, 273, - 274, 275, 276, 277, 278, 279, 280, -1, -1, -1, - -1, 257, 258, 287, 288, 289, 290, -1, 292, 293, - 294, 295, -1, -1, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, -1, -1, -1, -1, -1, - -1, 257, 258, 289, 290, -1, 292, 293, 294, 295, - -1, -1, -1, -1, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, -1, -1, -1, -1, -1, - -1, 257, 258, 289, 290, -1, 292, 293, 294, 295, - -1, -1, -1, -1, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, -1, -1, -1, -1, -1, - -1, 257, 258, 289, 290, -1, 292, 293, 294, 295, - -1, -1, -1, -1, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, -1, -1, -1, -1, -1, - -1, 257, 258, -1, -1, -1, 292, 293, 294, 295, - -1, -1, -1, -1, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, -1, -1, -1, -1, -1, - -1, 257, 258, -1, -1, -1, 292, 293, 294, 295, - -1, -1, -1, -1, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, -1, -1, -1, -1, -1, - -1, 257, 258, -1, -1, -1, 292, 293, 294, 295, - -1, -1, -1, -1, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 292, 293, 294, 295, + -1, 296, 297, 298, 299, -1, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, + 284, -1, -1, -1, -1, -1, 257, 258, -1, -1, + -1, -1, 296, 297, 298, 299, -1, -1, -1, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 281, 282, 283, 284, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 296, 297, 298, 299, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 256, -1, 258, -1, -1, 261, 262, 263, -1, + 265, 266, 267, 268, 269, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 284, + 285, 286, 287, 288, 289, }; #define YYFINAL 18 #ifndef YYDEBUG #define YYDEBUG 0 #endif -#define YYMAXTOKEN 295 +#define YYMAXTOKEN 299 #if YYDEBUG #if defined(__cplusplus) || defined(__STDC__) const char * const sudoersname[] = @@ -537,9 +535,10 @@ "COMMAND","ALIAS","DEFVAR","NTWKADDR","NETGROUP","USERGROUP","WORD","DIGEST", "DEFAULTS","DEFAULTS_HOST","DEFAULTS_USER","DEFAULTS_RUNAS","DEFAULTS_CMND", "NOPASSWD","PASSWD","NOEXEC","EXEC","SETENV","NOSETENV","LOG_INPUT", -"NOLOG_INPUT","LOG_OUTPUT","NOLOG_OUTPUT","ALL","COMMENT","HOSTALIAS", -"CMNDALIAS","USERALIAS","RUNASALIAS","ERROR","TYPE","ROLE","PRIVS","LIMITPRIVS", -"MYSELF","SHA224_TOK","SHA256_TOK","SHA384_TOK","SHA512_TOK", +"NOLOG_INPUT","LOG_OUTPUT","NOLOG_OUTPUT","MAIL","NOMAIL","FOLLOW","NOFOLLOW", +"ALL","COMMENT","HOSTALIAS","CMNDALIAS","USERALIAS","RUNASALIAS","ERROR","TYPE", +"ROLE","PRIVS","LIMITPRIVS","MYSELF","SHA224_TOK","SHA256_TOK","SHA384_TOK", +"SHA512_TOK", }; #if defined(__cplusplus) || defined(__STDC__) const char * const sudoersrule[] = @@ -623,6 +622,10 @@ "cmndtag : cmndtag NOLOG_INPUT", "cmndtag : cmndtag LOG_OUTPUT", "cmndtag : cmndtag NOLOG_OUTPUT", +"cmndtag : cmndtag FOLLOW", +"cmndtag : cmndtag NOFOLLOW", +"cmndtag : cmndtag MAIL", +"cmndtag : cmndtag NOMAIL", "cmnd : ALL", "cmnd : ALIAS", "cmnd : COMMAND", @@ -685,7 +688,7 @@ short *yysslim; YYSTYPE *yyvs; unsigned int yystacksize; -#line 677 "gram.y" +#line 859 "gram.y" void sudoerserror(const char *s) { @@ -698,7 +701,7 @@ /* Save the line the first error occurred on. */ if (errorlineno == -1) { errorlineno = sudolineno; - errorfile = sudo_estrdup(sudoers); + errorfile = sudoers; } if (sudoers_warnings && s != NULL) { LEXTRACE("<*> "); @@ -724,7 +727,12 @@ struct defaults *d; debug_decl(new_default, SUDOERS_DEBUG_PARSER) - d = sudo_ecalloc(1, sizeof(struct defaults)); + 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); + } + d->var = var; d->val = val; /* d->type = 0; */ @@ -741,7 +749,12 @@ struct member *m; debug_decl(new_member, SUDOERS_DEBUG_PARSER) - m = sudo_ecalloc(1, sizeof(struct member)); + 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); @@ -755,9 +768,20 @@ struct sudo_digest *dig; debug_decl(new_digest, SUDOERS_DEBUG_PARSER) - dig = sudo_emalloc(sizeof(*dig)); + if ((dig = malloc(sizeof(*dig))) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + debug_return_ptr(NULL); + } + dig->digest_type = digest_type; - dig->digest_str = sudo_estrdup(digest_str); + dig->digest_str = strdup(digest_str); + if (dig->digest_str == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + free(dig); + dig = NULL; + } debug_return_ptr(dig); } @@ -767,7 +791,7 @@ * The binding, if non-NULL, specifies a list of hosts, users, or * runas users the entries apply to (specified by the type). */ -static void +static bool add_defaults(int type, struct member *bmem, struct defaults *defs) { struct defaults *d; @@ -778,7 +802,11 @@ /* * We use a single binding for each entry in defs. */ - binding = sudo_emalloc(sizeof(*binding)); + if ((binding = malloc(sizeof(*binding))) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + debug_return_bool(false); + } if (bmem != NULL) HLTQ_TO_TAILQ(binding, bmem, entries); else @@ -795,37 +823,42 @@ TAILQ_CONCAT_HLTQ(&defaults, defs, entries); } - debug_return; + debug_return_bool(true); } /* * Allocate a new struct userspec, populate it, and insert it at the * end of the userspecs list. */ -static void +static bool add_userspec(struct member *members, struct privilege *privs) { struct userspec *u; debug_decl(add_userspec, SUDOERS_DEBUG_PARSER) - u = sudo_ecalloc(1, sizeof(*u)); + if ((u = calloc(1, sizeof(*u))) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + debug_return_bool(false); + } HLTQ_TO_TAILQ(&u->users, members, entries); HLTQ_TO_TAILQ(&u->privileges, privs, entries); TAILQ_INSERT_TAIL(&userspecs, u, entries); - debug_return; + debug_return_bool(true); } /* * Free up space used by data structures from a previous parser run and sets * the current sudoers file to path. */ -void +bool init_parser(const char *path, bool quiet) { struct member_list *binding; struct defaults *d, *d_next; struct userspec *us, *us_next; + bool rval = true; debug_decl(init_parser, SUDOERS_DEBUG_PARSER) TAILQ_FOREACH_SAFE(us, &userspecs, entries, us_next) { @@ -833,8 +866,8 @@ struct privilege *priv, *priv_next; TAILQ_FOREACH_SAFE(m, &us->users, entries, m_next) { - sudo_efree(m->name); - sudo_efree(m); + free(m->name); + free(m); } TAILQ_FOREACH_SAFE(priv, &us->privileges, entries, priv_next) { struct member_list *runasuserlist = NULL, *runasgrouplist = NULL; @@ -847,62 +880,62 @@ #endif /* HAVE_PRIV_SET */ TAILQ_FOREACH_SAFE(m, &priv->hostlist, entries, m_next) { - sudo_efree(m->name); - sudo_efree(m); + free(m->name); + free(m); } TAILQ_FOREACH_SAFE(cs, &priv->cmndlist, entries, cs_next) { #ifdef HAVE_SELINUX /* Only free the first instance of a role/type. */ if (cs->role != role) { role = cs->role; - sudo_efree(cs->role); + free(cs->role); } if (cs->type != type) { type = cs->type; - sudo_efree(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; - sudo_efree(cs->privs); + free(cs->privs); } if (cs->limitprivs != limitprivs) { limitprivs = cs->limitprivs; - sudo_efree(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; TAILQ_FOREACH_SAFE(m, runasuserlist, entries, m_next) { - sudo_efree(m->name); - sudo_efree(m); + free(m->name); + free(m); } - sudo_efree(runasuserlist); + free(runasuserlist); } if (cs->runasgrouplist && cs->runasgrouplist != runasgrouplist) { runasgrouplist = cs->runasgrouplist; TAILQ_FOREACH_SAFE(m, runasgrouplist, entries, m_next) { - sudo_efree(m->name); - sudo_efree(m); + free(m->name); + free(m); } - sudo_efree(runasgrouplist); + free(runasgrouplist); } if (cs->cmnd->type == COMMAND) { struct sudo_command *c = (struct sudo_command *) cs->cmnd->name; - sudo_efree(c->cmnd); - sudo_efree(c->args); + free(c->cmnd); + free(c->args); } - sudo_efree(cs->cmnd->name); - sudo_efree(cs->cmnd); - sudo_efree(cs); + free(cs->cmnd->name); + free(cs->cmnd); + free(cs); } - sudo_efree(priv); + free(priv); } - sudo_efree(us); + free(us); } TAILQ_INIT(&userspecs); @@ -916,35 +949,45 @@ if (m->type == COMMAND) { struct sudo_command *c = (struct sudo_command *) m->name; - sudo_efree(c->cmnd); - sudo_efree(c->args); + free(c->cmnd); + free(c->args); } - sudo_efree(m->name); - sudo_efree(m); + free(m->name); + free(m); } - sudo_efree(d->binding); + free(d->binding); } - sudo_efree(d->var); - sudo_efree(d->val); - sudo_efree(d); + free(d->var); + free(d->val); + free(d); } TAILQ_INIT(&defaults); - init_aliases(); - init_lexer(); - sudo_efree(sudoers); - sudoers = path ? sudo_estrdup(path) : NULL; + if (!init_aliases()) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + rval = false; + } + + free(sudoers); + if (path != NULL) { + if ((sudoers = strdup(path)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + rval = false; + } + } else { + sudoers = NULL; + } parse_error = false; errorlineno = -1; errorfile = sudoers; sudoers_warnings = !quiet; - debug_return; + debug_return_bool(rval); } -#line 895 "gram.c" +#line 938 "gram.c" /* allocate initial stack or double stack size, up to YYMAXDEPTH */ #if defined(__cplusplus) || defined(__STDC__) static int yygrowstack(void) @@ -1153,129 +1196,171 @@ switch (yyn) { case 1: -#line 171 "gram.y" +#line 167 "gram.y" { ; } break; case 5: -#line 179 "gram.y" +#line 175 "gram.y" { ; } break; case 6: -#line 182 "gram.y" +#line 178 "gram.y" { yyerrok; } break; case 7: -#line 185 "gram.y" +#line 181 "gram.y" { - add_userspec(yyvsp[-1].member, yyvsp[0].privilege); + if (!add_userspec(yyvsp[-1].member, yyvsp[0].privilege)) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; case 8: -#line 188 "gram.y" +#line 187 "gram.y" { ; } break; case 9: -#line 191 "gram.y" +#line 190 "gram.y" { ; } break; case 10: -#line 194 "gram.y" +#line 193 "gram.y" { ; } break; case 11: -#line 197 "gram.y" +#line 196 "gram.y" { ; } break; case 12: -#line 200 "gram.y" +#line 199 "gram.y" { - add_defaults(DEFAULTS, NULL, yyvsp[0].defaults); + if (!add_defaults(DEFAULTS, NULL, yyvsp[0].defaults)) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; case 13: -#line 203 "gram.y" +#line 205 "gram.y" { - add_defaults(DEFAULTS_USER, yyvsp[-1].member, yyvsp[0].defaults); + if (!add_defaults(DEFAULTS_USER, yyvsp[-1].member, yyvsp[0].defaults)) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; case 14: -#line 206 "gram.y" +#line 211 "gram.y" { - add_defaults(DEFAULTS_RUNAS, yyvsp[-1].member, yyvsp[0].defaults); + if (!add_defaults(DEFAULTS_RUNAS, yyvsp[-1].member, yyvsp[0].defaults)) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; case 15: -#line 209 "gram.y" +#line 217 "gram.y" { - add_defaults(DEFAULTS_HOST, yyvsp[-1].member, yyvsp[0].defaults); + if (!add_defaults(DEFAULTS_HOST, yyvsp[-1].member, yyvsp[0].defaults)) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; case 16: -#line 212 "gram.y" +#line 223 "gram.y" { - add_defaults(DEFAULTS_CMND, yyvsp[-1].member, yyvsp[0].defaults); + if (!add_defaults(DEFAULTS_CMND, yyvsp[-1].member, yyvsp[0].defaults)) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; case 18: -#line 218 "gram.y" +#line 232 "gram.y" { HLTQ_CONCAT(yyvsp[-2].defaults, yyvsp[0].defaults, entries); yyval.defaults = yyvsp[-2].defaults; } break; case 19: -#line 224 "gram.y" +#line 238 "gram.y" { yyval.defaults = new_default(yyvsp[0].string, NULL, true); + if (yyval.defaults == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; case 20: -#line 227 "gram.y" +#line 245 "gram.y" { yyval.defaults = new_default(yyvsp[0].string, NULL, false); + if (yyval.defaults == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; case 21: -#line 230 "gram.y" +#line 252 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, true); + if (yyval.defaults == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; case 22: -#line 233 "gram.y" +#line 259 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, '+'); + if (yyval.defaults == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; case 23: -#line 236 "gram.y" +#line 266 "gram.y" { yyval.defaults = new_default(yyvsp[-2].string, yyvsp[0].string, '-'); + if (yyval.defaults == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; case 25: -#line 242 "gram.y" +#line 276 "gram.y" { HLTQ_CONCAT(yyvsp[-2].privilege, yyvsp[0].privilege, entries); yyval.privilege = yyvsp[-2].privilege; } break; case 26: -#line 248 "gram.y" +#line 282 "gram.y" { - struct privilege *p = sudo_ecalloc(1, sizeof(*p)); + struct privilege *p = calloc(1, sizeof(*p)); + if (p == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } HLTQ_TO_TAILQ(&p->hostlist, yyvsp[-2].member, entries); HLTQ_TO_TAILQ(&p->cmndlist, yyvsp[0].cmndspec, entries); HLTQ_INIT(p, entries); @@ -1283,51 +1368,71 @@ } break; case 27: -#line 257 "gram.y" +#line 295 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; case 28: -#line 261 "gram.y" +#line 299 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; case 29: -#line 267 "gram.y" +#line 305 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); + if (yyval.member == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; case 30: -#line 270 "gram.y" +#line 312 "gram.y" { yyval.member = new_member(NULL, ALL); + if (yyval.member == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; case 31: -#line 273 "gram.y" +#line 319 "gram.y" { yyval.member = new_member(yyvsp[0].string, NETGROUP); + if (yyval.member == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; case 32: -#line 276 "gram.y" +#line 326 "gram.y" { yyval.member = new_member(yyvsp[0].string, NTWKADDR); + if (yyval.member == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; case 33: -#line 279 "gram.y" +#line 333 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); + if (yyval.member == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; case 35: -#line 285 "gram.y" +#line 343 "gram.y" { struct cmndspec *prev; prev = HLTQ_LAST(yyvsp[-2].cmndspec, cmndspec, entries); @@ -1358,6 +1463,10 @@ 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 || @@ -1369,23 +1478,35 @@ } break; case 36: -#line 326 "gram.y" +#line 388 "gram.y" { - struct cmndspec *cs = sudo_ecalloc(1, sizeof(*cs)); + struct cmndspec *cs = calloc(1, sizeof(*cs)); + if (cs == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } if (yyvsp[-4].runas != NULL) { if (yyvsp[-4].runas->runasusers != NULL) { cs->runasuserlist = - sudo_emalloc(sizeof(*cs->runasuserlist)); + malloc(sizeof(*cs->runasuserlist)); + if (cs->runasuserlist == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } HLTQ_TO_TAILQ(cs->runasuserlist, yyvsp[-4].runas->runasusers, entries); } if (yyvsp[-4].runas->runasgroups != NULL) { cs->runasgrouplist = - sudo_emalloc(sizeof(*cs->runasgrouplist)); + malloc(sizeof(*cs->runasgrouplist)); + if (cs->runasgrouplist == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } HLTQ_TO_TAILQ(cs->runasgrouplist, yyvsp[-4].runas->runasgroups, entries); } - sudo_efree(yyvsp[-4].runas); + free(yyvsp[-4].runas); } #ifdef HAVE_SELINUX cs->role = yyvsp[-3].seinfo.role; @@ -1406,37 +1527,53 @@ } break; case 37: -#line 362 "gram.y" +#line 436 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA224, yyvsp[0].string); + if (yyval.digest == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; case 38: -#line 365 "gram.y" +#line 443 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA256, yyvsp[0].string); + if (yyval.digest == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; case 39: -#line 368 "gram.y" +#line 450 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA384, yyvsp[0].string); + if (yyval.digest == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; case 40: -#line 371 "gram.y" +#line 457 "gram.y" { yyval.digest = new_digest(SUDO_DIGEST_SHA512, yyvsp[0].string); + if (yyval.digest == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; case 41: -#line 376 "gram.y" +#line 466 "gram.y" { yyval.member = yyvsp[0].member; } break; case 42: -#line 379 "gram.y" +#line 469 "gram.y" { if (yyvsp[0].member->type != COMMAND) { sudoerserror(N_("a digest requires a path name")); @@ -1448,398 +1585,502 @@ } break; case 43: -#line 390 "gram.y" +#line 480 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; case 44: -#line 394 "gram.y" +#line 484 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; case 45: -#line 400 "gram.y" +#line 490 "gram.y" { yyval.string = yyvsp[0].string; } break; case 46: -#line 405 "gram.y" +#line 495 "gram.y" { yyval.string = yyvsp[0].string; } break; case 47: -#line 410 "gram.y" +#line 500 "gram.y" { yyval.seinfo.role = NULL; yyval.seinfo.type = NULL; } break; case 48: -#line 414 "gram.y" +#line 504 "gram.y" { yyval.seinfo.role = yyvsp[0].string; yyval.seinfo.type = NULL; } break; case 49: -#line 418 "gram.y" +#line 508 "gram.y" { yyval.seinfo.type = yyvsp[0].string; yyval.seinfo.role = NULL; } break; case 50: -#line 422 "gram.y" +#line 512 "gram.y" { yyval.seinfo.role = yyvsp[-1].string; yyval.seinfo.type = yyvsp[0].string; } break; case 51: -#line 426 "gram.y" +#line 516 "gram.y" { yyval.seinfo.type = yyvsp[-1].string; yyval.seinfo.role = yyvsp[0].string; } break; case 52: -#line 432 "gram.y" +#line 522 "gram.y" { yyval.string = yyvsp[0].string; } break; case 53: -#line 436 "gram.y" +#line 526 "gram.y" { yyval.string = yyvsp[0].string; } break; case 54: -#line 441 "gram.y" +#line 531 "gram.y" { yyval.privinfo.privs = NULL; yyval.privinfo.limitprivs = NULL; } break; case 55: -#line 445 "gram.y" +#line 535 "gram.y" { yyval.privinfo.privs = yyvsp[0].string; yyval.privinfo.limitprivs = NULL; } break; case 56: -#line 449 "gram.y" +#line 539 "gram.y" { yyval.privinfo.privs = NULL; yyval.privinfo.limitprivs = yyvsp[0].string; } break; case 57: -#line 453 "gram.y" +#line 543 "gram.y" { yyval.privinfo.privs = yyvsp[-1].string; yyval.privinfo.limitprivs = yyvsp[0].string; } break; case 58: -#line 457 "gram.y" +#line 547 "gram.y" { yyval.privinfo.limitprivs = yyvsp[-1].string; yyval.privinfo.privs = yyvsp[0].string; } break; case 59: -#line 463 "gram.y" +#line 553 "gram.y" { yyval.runas = NULL; } break; case 60: -#line 466 "gram.y" +#line 556 "gram.y" { yyval.runas = yyvsp[-1].runas; } break; case 61: -#line 471 "gram.y" +#line 561 "gram.y" { - yyval.runas = sudo_ecalloc(1, sizeof(struct runascontainer)); - yyval.runas->runasusers = new_member(NULL, MYSELF); - /* $$->runasgroups = NULL; */ + 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 == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; case 62: -#line 476 "gram.y" +#line 576 "gram.y" { - yyval.runas = sudo_ecalloc(1, sizeof(struct runascontainer)); + yyval.runas = calloc(1, sizeof(struct runascontainer)); + if (yyval.runas == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } yyval.runas->runasusers = yyvsp[0].member; /* $$->runasgroups = NULL; */ } break; case 63: -#line 481 "gram.y" +#line 585 "gram.y" { - yyval.runas = sudo_ecalloc(1, sizeof(struct runascontainer)); + 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; } break; case 64: -#line 486 "gram.y" +#line 594 "gram.y" { - yyval.runas = sudo_ecalloc(1, sizeof(struct runascontainer)); + 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; } break; case 65: -#line 491 "gram.y" +#line 603 "gram.y" { - yyval.runas = sudo_ecalloc(1, sizeof(struct runascontainer)); - yyval.runas->runasusers = new_member(NULL, MYSELF); - /* $$->runasgroups = NULL; */ + 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 == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; case 66: -#line 498 "gram.y" +#line 620 "gram.y" { - yyval.tag.nopasswd = yyval.tag.noexec = yyval.tag.setenv = - yyval.tag.log_input = yyval.tag.log_output = UNSPEC; + TAGS_INIT(yyval.tag); } break; case 67: -#line 502 "gram.y" +#line 623 "gram.y" { yyval.tag.nopasswd = true; } break; case 68: -#line 505 "gram.y" +#line 626 "gram.y" { yyval.tag.nopasswd = false; } break; case 69: -#line 508 "gram.y" +#line 629 "gram.y" { yyval.tag.noexec = true; } break; case 70: -#line 511 "gram.y" +#line 632 "gram.y" { yyval.tag.noexec = false; } break; case 71: -#line 514 "gram.y" +#line 635 "gram.y" { yyval.tag.setenv = true; } break; case 72: -#line 517 "gram.y" +#line 638 "gram.y" { yyval.tag.setenv = false; } break; case 73: -#line 520 "gram.y" +#line 641 "gram.y" { yyval.tag.log_input = true; } break; case 74: -#line 523 "gram.y" +#line 644 "gram.y" { yyval.tag.log_input = false; } break; case 75: -#line 526 "gram.y" +#line 647 "gram.y" { yyval.tag.log_output = true; } break; case 76: -#line 529 "gram.y" +#line 650 "gram.y" { yyval.tag.log_output = false; } break; case 77: -#line 534 "gram.y" +#line 653 "gram.y" { - yyval.member = new_member(NULL, ALL); + yyval.tag.follow = true; } break; case 78: -#line 537 "gram.y" +#line 656 "gram.y" { - yyval.member = new_member(yyvsp[0].string, ALIAS); + yyval.tag.follow = false; } break; case 79: -#line 540 "gram.y" +#line 659 "gram.y" +{ + yyval.tag.send_mail = true; + } +break; +case 80: +#line 662 "gram.y" { - struct sudo_command *c = sudo_ecalloc(1, sizeof(*c)); + yyval.tag.send_mail = false; + } +break; +case 81: +#line 667 "gram.y" +{ + yyval.member = new_member(NULL, ALL); + if (yyval.member == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } + } +break; +case 82: +#line 674 "gram.y" +{ + yyval.member = new_member(yyvsp[0].string, ALIAS); + if (yyval.member == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } + } +break; +case 83: +#line 681 "gram.y" +{ + struct sudo_command *c = calloc(1, sizeof(*c)); + if (c == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } c->cmnd = yyvsp[0].command.cmnd; c->args = yyvsp[0].command.args; yyval.member = new_member((char *)c, COMMAND); + if (yyval.member == NULL) { + free(c); + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; -case 82: -#line 552 "gram.y" +case 86: +#line 702 "gram.y" { - char *s; + const char *s; if ((s = alias_add(yyvsp[-2].string, HOSTALIAS, yyvsp[0].member)) != NULL) { sudoerserror(s); YYERROR; } } break; -case 84: -#line 562 "gram.y" +case 88: +#line 712 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 87: -#line 572 "gram.y" +case 91: +#line 722 "gram.y" { - char *s; + const char *s; if ((s = alias_add(yyvsp[-2].string, CMNDALIAS, yyvsp[0].member)) != NULL) { sudoerserror(s); YYERROR; } } break; -case 89: -#line 582 "gram.y" +case 93: +#line 732 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 92: -#line 592 "gram.y" +case 96: +#line 742 "gram.y" { - char *s; + const char *s; if ((s = alias_add(yyvsp[-2].string, RUNASALIAS, yyvsp[0].member)) != NULL) { sudoerserror(s); YYERROR; } } break; -case 95: -#line 605 "gram.y" +case 99: +#line 755 "gram.y" { - char *s; + const char *s; if ((s = alias_add(yyvsp[-2].string, USERALIAS, yyvsp[0].member)) != NULL) { sudoerserror(s); YYERROR; } } break; -case 97: -#line 615 "gram.y" +case 101: +#line 765 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 98: -#line 621 "gram.y" +case 102: +#line 771 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 99: -#line 625 "gram.y" +case 103: +#line 775 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 100: -#line 631 "gram.y" +case 104: +#line 781 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); + if (yyval.member == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; -case 101: -#line 634 "gram.y" +case 105: +#line 788 "gram.y" { yyval.member = new_member(NULL, ALL); + if (yyval.member == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; -case 102: -#line 637 "gram.y" +case 106: +#line 795 "gram.y" { yyval.member = new_member(yyvsp[0].string, NETGROUP); + if (yyval.member == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; -case 103: -#line 640 "gram.y" +case 107: +#line 802 "gram.y" { yyval.member = new_member(yyvsp[0].string, USERGROUP); + if (yyval.member == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; -case 104: -#line 643 "gram.y" +case 108: +#line 809 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); + if (yyval.member == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; -case 106: -#line 649 "gram.y" +case 110: +#line 819 "gram.y" { HLTQ_CONCAT(yyvsp[-2].member, yyvsp[0].member, entries); yyval.member = yyvsp[-2].member; } break; -case 107: -#line 655 "gram.y" +case 111: +#line 825 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = false; } break; -case 108: -#line 659 "gram.y" +case 112: +#line 829 "gram.y" { yyval.member = yyvsp[0].member; yyval.member->negated = true; } break; -case 109: -#line 665 "gram.y" +case 113: +#line 835 "gram.y" { yyval.member = new_member(yyvsp[0].string, ALIAS); + if (yyval.member == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; -case 110: -#line 668 "gram.y" +case 114: +#line 842 "gram.y" { yyval.member = new_member(NULL, ALL); + if (yyval.member == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; -case 111: -#line 671 "gram.y" +case 115: +#line 849 "gram.y" { yyval.member = new_member(yyvsp[0].string, WORD); + if (yyval.member == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } break; -#line 1790 "gram.c" +#line 2031 "gram.c" } yyssp -= yym; yystate = *yyssp; diff -Nru sudo-1.8.12/plugins/sudoers/gram.h sudo-1.8.16/plugins/sudoers/gram.h --- sudo-1.8.12/plugins/sudoers/gram.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/gram.h 2015-10-31 23:35:24.000000000 +0000 @@ -21,22 +21,26 @@ #define NOLOG_INPUT 277 #define LOG_OUTPUT 278 #define NOLOG_OUTPUT 279 -#define ALL 280 -#define COMMENT 281 -#define HOSTALIAS 282 -#define CMNDALIAS 283 -#define USERALIAS 284 -#define RUNASALIAS 285 -#define ERROR 286 -#define TYPE 287 -#define ROLE 288 -#define PRIVS 289 -#define LIMITPRIVS 290 -#define MYSELF 291 -#define SHA224_TOK 292 -#define SHA256_TOK 293 -#define SHA384_TOK 294 -#define SHA512_TOK 295 +#define MAIL 280 +#define NOMAIL 281 +#define FOLLOW 282 +#define NOFOLLOW 283 +#define ALL 284 +#define COMMENT 285 +#define HOSTALIAS 286 +#define CMNDALIAS 287 +#define USERALIAS 288 +#define RUNASALIAS 289 +#define ERROR 290 +#define TYPE 291 +#define ROLE 292 +#define PRIVS 293 +#define LIMITPRIVS 294 +#define MYSELF 295 +#define SHA224_TOK 296 +#define SHA256_TOK 297 +#define SHA384_TOK 298 +#define SHA512_TOK 299 #ifndef YYSTYPE_DEFINED #define YYSTYPE_DEFINED typedef union { diff -Nru sudo-1.8.12/plugins/sudoers/gram.y sudo-1.8.16/plugins/sudoers/gram.y --- sudo-1.8.12/plugins/sudoers/gram.y 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/gram.y 2015-10-31 23:35:24.000000000 +0000 @@ -26,23 +26,15 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #if defined(HAVE_STDINT_H) # include #elif defined(HAVE_INTTYPES_H) @@ -71,8 +63,8 @@ /* * Local protoypes */ -static void add_defaults(int, struct member *, struct defaults *); -static void add_userspec(struct member *, struct privilege *); +static bool add_defaults(int, struct member *, struct defaults *); +static bool add_userspec(struct member *, struct privilege *); static struct defaults *new_default(char *, char *, int); static struct member *new_member(char *, int); static struct sudo_digest *new_digest(int, const char *); @@ -117,6 +109,10 @@ %token NOLOG_INPUT /* don't log user's cmnd input */ %token LOG_OUTPUT /* log cmnd output */ %token NOLOG_OUTPUT /* don't log cmnd output */ +%token MAIL /* mail log message */ +%token NOMAIL /* don't mail log message */ +%token FOLLOW /* follow symbolic links */ +%token NOFOLLOW /* don't follow symbolic links */ %token ALL /* ALL keyword */ %token COMMENT /* comment and/or carriage return */ %token HOSTALIAS /* Host_Alias keyword */ @@ -183,7 +179,10 @@ yyerrok; } | userlist privileges { - add_userspec($1, $2); + if (!add_userspec($1, $2)) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } | USERALIAS useraliases { ; @@ -198,19 +197,34 @@ ; } | DEFAULTS defaults_list { - add_defaults(DEFAULTS, NULL, $2); + if (!add_defaults(DEFAULTS, NULL, $2)) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } | DEFAULTS_USER userlist defaults_list { - add_defaults(DEFAULTS_USER, $2, $3); + if (!add_defaults(DEFAULTS_USER, $2, $3)) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } | DEFAULTS_RUNAS userlist defaults_list { - add_defaults(DEFAULTS_RUNAS, $2, $3); + if (!add_defaults(DEFAULTS_RUNAS, $2, $3)) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } | DEFAULTS_HOST hostlist defaults_list { - add_defaults(DEFAULTS_HOST, $2, $3); + if (!add_defaults(DEFAULTS_HOST, $2, $3)) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } | DEFAULTS_CMND cmndlist defaults_list { - add_defaults(DEFAULTS_CMND, $2, $3); + if (!add_defaults(DEFAULTS_CMND, $2, $3)) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } ; @@ -223,18 +237,38 @@ defaults_entry : DEFVAR { $$ = new_default($1, NULL, true); + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } | '!' DEFVAR { $$ = new_default($2, NULL, false); + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } | DEFVAR '=' WORD { $$ = new_default($1, $3, true); + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } | DEFVAR '+' WORD { $$ = new_default($1, $3, '+'); + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } | DEFVAR '-' WORD { $$ = new_default($1, $3, '-'); + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } ; @@ -246,7 +280,11 @@ ; privilege : hostlist '=' cmndspeclist { - struct privilege *p = sudo_ecalloc(1, sizeof(*p)); + struct privilege *p = calloc(1, sizeof(*p)); + if (p == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } HLTQ_TO_TAILQ(&p->hostlist, $1, entries); HLTQ_TO_TAILQ(&p->cmndlist, $3, entries); HLTQ_INIT(p, entries); @@ -266,18 +304,38 @@ host : ALIAS { $$ = new_member($1, ALIAS); + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } | ALL { $$ = new_member(NULL, ALL); + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } | NETGROUP { $$ = new_member($1, NETGROUP); + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } | NTWKADDR { $$ = new_member($1, NTWKADDR); + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } | WORD { $$ = new_member($1, WORD); + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } ; @@ -312,6 +370,10 @@ $3->tags.log_input = prev->tags.log_input; if ($3->tags.log_output == UNSPEC) $3->tags.log_output = prev->tags.log_output; + if ($3->tags.send_mail == UNSPEC) + $3->tags.send_mail = prev->tags.send_mail; + if ($3->tags.follow == UNSPEC) + $3->tags.follow = prev->tags.follow; if (($3->runasuserlist == NULL && $3->runasgrouplist == NULL) && (prev->runasuserlist != NULL || @@ -324,21 +386,33 @@ ; cmndspec : runasspec selinux solarisprivs cmndtag digcmnd { - struct cmndspec *cs = sudo_ecalloc(1, sizeof(*cs)); + struct cmndspec *cs = calloc(1, sizeof(*cs)); + if (cs == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } if ($1 != NULL) { if ($1->runasusers != NULL) { cs->runasuserlist = - sudo_emalloc(sizeof(*cs->runasuserlist)); + malloc(sizeof(*cs->runasuserlist)); + if (cs->runasuserlist == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } HLTQ_TO_TAILQ(cs->runasuserlist, $1->runasusers, entries); } if ($1->runasgroups != NULL) { cs->runasgrouplist = - sudo_emalloc(sizeof(*cs->runasgrouplist)); + malloc(sizeof(*cs->runasgrouplist)); + if (cs->runasgrouplist == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } HLTQ_TO_TAILQ(cs->runasgrouplist, $1->runasgroups, entries); } - sudo_efree($1); + free($1); } #ifdef HAVE_SELINUX cs->role = $2.role; @@ -361,15 +435,31 @@ digest : SHA224_TOK ':' DIGEST { $$ = new_digest(SUDO_DIGEST_SHA224, $3); + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } | SHA256_TOK ':' DIGEST { $$ = new_digest(SUDO_DIGEST_SHA256, $3); + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } | SHA384_TOK ':' DIGEST { $$ = new_digest(SUDO_DIGEST_SHA384, $3); + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } | SHA512_TOK ':' DIGEST { $$ = new_digest(SUDO_DIGEST_SHA512, $3); + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } ; @@ -469,35 +559,66 @@ ; runaslist : /* empty */ { - $$ = sudo_ecalloc(1, sizeof(struct runascontainer)); - $$->runasusers = new_member(NULL, MYSELF); - /* $$->runasgroups = NULL; */ + $$ = calloc(1, sizeof(struct runascontainer)); + if ($$ != NULL) { + $$->runasusers = new_member(NULL, MYSELF); + /* $$->runasgroups = NULL; */ + if ($$->runasusers == NULL) { + free($$); + $$ = NULL; + } + } + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } | userlist { - $$ = sudo_ecalloc(1, sizeof(struct runascontainer)); + $$ = calloc(1, sizeof(struct runascontainer)); + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } $$->runasusers = $1; /* $$->runasgroups = NULL; */ } | userlist ':' grouplist { - $$ = sudo_ecalloc(1, sizeof(struct runascontainer)); + $$ = calloc(1, sizeof(struct runascontainer)); + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } $$->runasusers = $1; $$->runasgroups = $3; } | ':' grouplist { - $$ = sudo_ecalloc(1, sizeof(struct runascontainer)); + $$ = calloc(1, sizeof(struct runascontainer)); + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } /* $$->runasusers = NULL; */ $$->runasgroups = $2; } | ':' { - $$ = sudo_ecalloc(1, sizeof(struct runascontainer)); - $$->runasusers = new_member(NULL, MYSELF); - /* $$->runasgroups = NULL; */ + $$ = calloc(1, sizeof(struct runascontainer)); + if ($$ != NULL) { + $$->runasusers = new_member(NULL, MYSELF); + /* $$->runasgroups = NULL; */ + if ($$->runasusers == NULL) { + free($$); + $$ = NULL; + } + } + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } ; cmndtag : /* empty */ { - $$.nopasswd = $$.noexec = $$.setenv = - $$.log_input = $$.log_output = UNSPEC; + TAGS_INIT($$); } | cmndtag NOPASSWD { $$.nopasswd = true; @@ -529,19 +650,48 @@ | cmndtag NOLOG_OUTPUT { $$.log_output = false; } + | cmndtag FOLLOW { + $$.follow = true; + } + | cmndtag NOFOLLOW { + $$.follow = false; + } + | cmndtag MAIL { + $$.send_mail = true; + } + | cmndtag NOMAIL { + $$.send_mail = false; + } ; cmnd : ALL { $$ = new_member(NULL, ALL); + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } | ALIAS { $$ = new_member($1, ALIAS); + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } | COMMAND { - struct sudo_command *c = sudo_ecalloc(1, sizeof(*c)); + struct sudo_command *c = calloc(1, sizeof(*c)); + if (c == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } c->cmnd = $1.cmnd; c->args = $1.args; $$ = new_member((char *)c, COMMAND); + if ($$ == NULL) { + free(c); + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } ; @@ -550,7 +700,7 @@ ; hostalias : ALIAS '=' hostlist { - char *s; + const char *s; if ((s = alias_add($1, HOSTALIAS, $3)) != NULL) { sudoerserror(s); YYERROR; @@ -570,7 +720,7 @@ ; cmndalias : ALIAS '=' cmndlist { - char *s; + const char *s; if ((s = alias_add($1, CMNDALIAS, $3)) != NULL) { sudoerserror(s); YYERROR; @@ -590,7 +740,7 @@ ; runasalias : ALIAS '=' userlist { - char *s; + const char *s; if ((s = alias_add($1, RUNASALIAS, $3)) != NULL) { sudoerserror(s); YYERROR; @@ -603,7 +753,7 @@ ; useralias : ALIAS '=' userlist { - char *s; + const char *s; if ((s = alias_add($1, USERALIAS, $3)) != NULL) { sudoerserror(s); YYERROR; @@ -630,18 +780,38 @@ user : ALIAS { $$ = new_member($1, ALIAS); + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } | ALL { $$ = new_member(NULL, ALL); + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } | NETGROUP { $$ = new_member($1, NETGROUP); + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } | USERGROUP { $$ = new_member($1, USERGROUP); + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } | WORD { $$ = new_member($1, WORD); + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } ; @@ -664,12 +834,24 @@ group : ALIAS { $$ = new_member($1, ALIAS); + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } | ALL { $$ = new_member(NULL, ALL); + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } | WORD { $$ = new_member($1, WORD); + if ($$ == NULL) { + sudoerserror(N_("unable to allocate memory")); + YYERROR; + } } ; @@ -686,7 +868,7 @@ /* Save the line the first error occurred on. */ if (errorlineno == -1) { errorlineno = sudolineno; - errorfile = sudo_estrdup(sudoers); + errorfile = sudoers; } if (sudoers_warnings && s != NULL) { LEXTRACE("<*> "); @@ -712,7 +894,12 @@ struct defaults *d; debug_decl(new_default, SUDOERS_DEBUG_PARSER) - d = sudo_ecalloc(1, sizeof(struct defaults)); + 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); + } + d->var = var; d->val = val; /* d->type = 0; */ @@ -729,7 +916,12 @@ struct member *m; debug_decl(new_member, SUDOERS_DEBUG_PARSER) - m = sudo_ecalloc(1, sizeof(struct member)); + 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); @@ -743,9 +935,20 @@ struct sudo_digest *dig; debug_decl(new_digest, SUDOERS_DEBUG_PARSER) - dig = sudo_emalloc(sizeof(*dig)); + if ((dig = malloc(sizeof(*dig))) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + debug_return_ptr(NULL); + } + dig->digest_type = digest_type; - dig->digest_str = sudo_estrdup(digest_str); + dig->digest_str = strdup(digest_str); + if (dig->digest_str == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + free(dig); + dig = NULL; + } debug_return_ptr(dig); } @@ -755,7 +958,7 @@ * The binding, if non-NULL, specifies a list of hosts, users, or * runas users the entries apply to (specified by the type). */ -static void +static bool add_defaults(int type, struct member *bmem, struct defaults *defs) { struct defaults *d; @@ -766,7 +969,11 @@ /* * We use a single binding for each entry in defs. */ - binding = sudo_emalloc(sizeof(*binding)); + if ((binding = malloc(sizeof(*binding))) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + debug_return_bool(false); + } if (bmem != NULL) HLTQ_TO_TAILQ(binding, bmem, entries); else @@ -783,37 +990,42 @@ TAILQ_CONCAT_HLTQ(&defaults, defs, entries); } - debug_return; + debug_return_bool(true); } /* * Allocate a new struct userspec, populate it, and insert it at the * end of the userspecs list. */ -static void +static bool add_userspec(struct member *members, struct privilege *privs) { struct userspec *u; debug_decl(add_userspec, SUDOERS_DEBUG_PARSER) - u = sudo_ecalloc(1, sizeof(*u)); + if ((u = calloc(1, sizeof(*u))) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + debug_return_bool(false); + } HLTQ_TO_TAILQ(&u->users, members, entries); HLTQ_TO_TAILQ(&u->privileges, privs, entries); TAILQ_INSERT_TAIL(&userspecs, u, entries); - debug_return; + debug_return_bool(true); } /* * Free up space used by data structures from a previous parser run and sets * the current sudoers file to path. */ -void +bool init_parser(const char *path, bool quiet) { struct member_list *binding; struct defaults *d, *d_next; struct userspec *us, *us_next; + bool rval = true; debug_decl(init_parser, SUDOERS_DEBUG_PARSER) TAILQ_FOREACH_SAFE(us, &userspecs, entries, us_next) { @@ -821,8 +1033,8 @@ struct privilege *priv, *priv_next; TAILQ_FOREACH_SAFE(m, &us->users, entries, m_next) { - sudo_efree(m->name); - sudo_efree(m); + free(m->name); + free(m); } TAILQ_FOREACH_SAFE(priv, &us->privileges, entries, priv_next) { struct member_list *runasuserlist = NULL, *runasgrouplist = NULL; @@ -835,62 +1047,62 @@ #endif /* HAVE_PRIV_SET */ TAILQ_FOREACH_SAFE(m, &priv->hostlist, entries, m_next) { - sudo_efree(m->name); - sudo_efree(m); + free(m->name); + free(m); } TAILQ_FOREACH_SAFE(cs, &priv->cmndlist, entries, cs_next) { #ifdef HAVE_SELINUX /* Only free the first instance of a role/type. */ if (cs->role != role) { role = cs->role; - sudo_efree(cs->role); + free(cs->role); } if (cs->type != type) { type = cs->type; - sudo_efree(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; - sudo_efree(cs->privs); + free(cs->privs); } if (cs->limitprivs != limitprivs) { limitprivs = cs->limitprivs; - sudo_efree(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; TAILQ_FOREACH_SAFE(m, runasuserlist, entries, m_next) { - sudo_efree(m->name); - sudo_efree(m); + free(m->name); + free(m); } - sudo_efree(runasuserlist); + free(runasuserlist); } if (cs->runasgrouplist && cs->runasgrouplist != runasgrouplist) { runasgrouplist = cs->runasgrouplist; TAILQ_FOREACH_SAFE(m, runasgrouplist, entries, m_next) { - sudo_efree(m->name); - sudo_efree(m); + free(m->name); + free(m); } - sudo_efree(runasgrouplist); + free(runasgrouplist); } if (cs->cmnd->type == COMMAND) { struct sudo_command *c = (struct sudo_command *) cs->cmnd->name; - sudo_efree(c->cmnd); - sudo_efree(c->args); + free(c->cmnd); + free(c->args); } - sudo_efree(cs->cmnd->name); - sudo_efree(cs->cmnd); - sudo_efree(cs); + free(cs->cmnd->name); + free(cs->cmnd); + free(cs); } - sudo_efree(priv); + free(priv); } - sudo_efree(us); + free(us); } TAILQ_INIT(&userspecs); @@ -904,31 +1116,41 @@ if (m->type == COMMAND) { struct sudo_command *c = (struct sudo_command *) m->name; - sudo_efree(c->cmnd); - sudo_efree(c->args); + free(c->cmnd); + free(c->args); } - sudo_efree(m->name); - sudo_efree(m); + free(m->name); + free(m); } - sudo_efree(d->binding); + free(d->binding); } - sudo_efree(d->var); - sudo_efree(d->val); - sudo_efree(d); + free(d->var); + free(d->val); + free(d); } TAILQ_INIT(&defaults); - init_aliases(); - init_lexer(); - sudo_efree(sudoers); - sudoers = path ? sudo_estrdup(path) : NULL; + if (!init_aliases()) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + rval = false; + } + + free(sudoers); + if (path != NULL) { + if ((sudoers = strdup(path)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + rval = false; + } + } else { + sudoers = NULL; + } parse_error = false; errorlineno = -1; errorfile = sudoers; sudoers_warnings = !quiet; - debug_return; + debug_return_bool(rval); } diff -Nru sudo-1.8.12/plugins/sudoers/group_plugin.c sudo-1.8.16/plugins/sudoers/group_plugin.c --- sudo-1.8.12/plugins/sudoers/group_plugin.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/group_plugin.c 2016-03-17 16:13:10.000000000 +0000 @@ -20,23 +20,14 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #ifdef TIME_WITH_SYS_TIME # include #endif @@ -51,6 +42,7 @@ static void *group_handle; static struct sudoers_group_plugin *group_plugin; +const char *path_plugin_dir = _PATH_SUDO_PLUGIN_DIR; /* * Load the specified plugin and run its init function. @@ -71,17 +63,17 @@ */ if ((args = strpbrk(plugin_info, " \t")) != NULL) { len = snprintf(path, sizeof(path), "%s%.*s", - (*plugin_info != '/') ? _PATH_SUDO_PLUGIN_DIR : "", + (*plugin_info != '/') ? path_plugin_dir : "", (int)(args - plugin_info), plugin_info); args++; } else { len = snprintf(path, sizeof(path), "%s%s", - (*plugin_info != '/') ? _PATH_SUDO_PLUGIN_DIR : "", plugin_info); + (*plugin_info != '/') ? path_plugin_dir : "", plugin_info); } if (len <= 0 || (size_t)len >= sizeof(path)) { errno = ENAMETOOLONG; sudo_warn("%s%s", - (*plugin_info != '/') ? _PATH_SUDO_PLUGIN_DIR : "", plugin_info); + (*plugin_info != '/') ? path_plugin_dir : "", plugin_info); goto done; } @@ -102,7 +94,9 @@ /* Open plugin and map in symbol. */ group_handle = sudo_dso_load(path, SUDO_DSO_LAZY|SUDO_DSO_GLOBAL); if (!group_handle) { - sudo_warnx(U_("unable to load %s: %s"), path, sudo_dso_strerror()); + const char *errstr = sudo_dso_strerror(); + sudo_warnx(U_("unable to load %s: %s"), path, + errstr ? errstr : "unknown error"); goto done; } group_plugin = sudo_dso_findsym(group_handle, "group_plugin"); @@ -111,9 +105,9 @@ goto done; } - if (GROUP_API_VERSION_GET_MAJOR(group_plugin->version) != GROUP_API_VERSION_MAJOR) { + if (SUDO_API_VERSION_GET_MAJOR(group_plugin->version) != GROUP_API_VERSION_MAJOR) { sudo_warnx(U_("%s: incompatible group plugin major version %d, expected %d"), - path, GROUP_API_VERSION_GET_MAJOR(group_plugin->version), + path, SUDO_API_VERSION_GET_MAJOR(group_plugin->version), GROUP_API_VERSION_MAJOR); goto done; } @@ -124,7 +118,7 @@ if (args != NULL) { int ac = 0; bool wasblank = true; - char *cp; + char *cp, *last; for (cp = args; *cp != '\0'; cp++) { if (isblank((unsigned char)*cp)) { @@ -134,10 +128,14 @@ ac++; } } - if (ac != 0) { - argv = sudo_emallocarray(ac, sizeof(char *)); + if (ac != 0) { + argv = reallocarray(NULL, ac, sizeof(char *)); + if (argv == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto done; + } ac = 0; - for ((cp = strtok(args, " \t")); cp; (cp = strtok(NULL, " \t"))) + for ((cp = strtok_r(args, " \t", &last)); cp != NULL; (cp = strtok_r(NULL, " \t", &last))) argv[ac++] = cp; } } @@ -145,7 +143,7 @@ rc = (group_plugin->init)(GROUP_API_VERSION, sudo_printf, argv); done: - sudo_efree(argv); + free(argv); if (rc != true) { if (group_handle != NULL) { @@ -155,7 +153,7 @@ } } - debug_return_bool(rc); + debug_return_int(rc); } void @@ -181,8 +179,8 @@ debug_decl(group_plugin_query, SUDOERS_DEBUG_UTIL) if (group_plugin == NULL) - debug_return_bool(false); - debug_return_bool((group_plugin->query)(user, group, pwd)); + debug_return_int(false); + debug_return_int((group_plugin->query)(user, group, pwd)); } #else /* !HAVE_DLOPEN && !HAVE_SHL_LOAD */ @@ -195,7 +193,7 @@ group_plugin_load(char *plugin_info) { debug_decl(group_plugin_load, SUDOERS_DEBUG_UTIL) - debug_return_bool(false); + debug_return_int(false); } void @@ -210,7 +208,7 @@ const struct passwd *pwd) { debug_decl(group_plugin_query, SUDOERS_DEBUG_UTIL) - debug_return_bool(false); + debug_return_int(false); } #endif /* HAVE_DLOPEN || HAVE_SHL_LOAD */ diff -Nru sudo-1.8.12/plugins/sudoers/ins_2001.h sudo-1.8.16/plugins/sudoers/ins_2001.h --- sudo-1.8.12/plugins/sudoers/ins_2001.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/ins_2001.h 2015-10-31 23:35:00.000000000 +0000 @@ -14,8 +14,8 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _SUDOERS_INS_2001_H -#define _SUDOERS_INS_2001_H +#ifndef SUDOERS_INS_2001_H +#define SUDOERS_INS_2001_H /* * HAL insults (paraphrased) from 2001. @@ -30,4 +30,4 @@ "This mission is too important for me to allow you to jeopardize it.", "I feel much better now.", -#endif /* _SUDOERS_INS_2001_H */ +#endif /* SUDOERS_INS_2001_H */ diff -Nru sudo-1.8.12/plugins/sudoers/ins_classic.h sudo-1.8.16/plugins/sudoers/ins_classic.h --- sudo-1.8.12/plugins/sudoers/ins_classic.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/ins_classic.h 2015-10-31 23:35:00.000000000 +0000 @@ -14,8 +14,8 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _SUDOERS_INS_CLASSIC_H -#define _SUDOERS_INS_CLASSIC_H +#ifndef SUDOERS_INS_CLASSIC_H +#define SUDOERS_INS_CLASSIC_H /* * Insults from the original sudo(8). @@ -34,4 +34,4 @@ "Do you think like you type?", "Your mind just hasn't been the same since the electro-shock, has it?", -#endif /* _SUDOERS_INS_CLASSIC_H */ +#endif /* SUDOERS_INS_CLASSIC_H */ diff -Nru sudo-1.8.12/plugins/sudoers/ins_csops.h sudo-1.8.16/plugins/sudoers/ins_csops.h --- sudo-1.8.12/plugins/sudoers/ins_csops.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/ins_csops.h 2015-10-31 23:35:00.000000000 +0000 @@ -15,8 +15,8 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _SUDOERS_INS_CSOPS_H -#define _SUDOERS_INS_CSOPS_H +#ifndef SUDOERS_INS_CSOPS_H +#define SUDOERS_INS_CSOPS_H /* * CSOps insults (may be site dependent). @@ -36,4 +36,4 @@ "Have you considered trying to match wits with a rutabaga?", "You speak an infinite deal of nothing", -#endif /* _SUDOERS_INS_CSOPS_H */ +#endif /* SUDOERS_INS_CSOPS_H */ diff -Nru sudo-1.8.12/plugins/sudoers/ins_goons.h sudo-1.8.16/plugins/sudoers/ins_goons.h --- sudo-1.8.12/plugins/sudoers/ins_goons.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/ins_goons.h 2015-10-31 23:35:00.000000000 +0000 @@ -14,8 +14,8 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _SUDOERS_INS_GOONS_H -#define _SUDOERS_INS_GOONS_H +#ifndef SUDOERS_INS_GOONS_H +#define SUDOERS_INS_GOONS_H /* * Insults from the "Goon Show." @@ -45,4 +45,4 @@ "It's only your word against mine.", "I think ... err ... I think ... I think I'll go home", -#endif /* _SUDOERS_INS_GOONS_H */ +#endif /* SUDOERS_INS_GOONS_H */ diff -Nru sudo-1.8.12/plugins/sudoers/insults.h sudo-1.8.16/plugins/sudoers/insults.h --- sudo-1.8.12/plugins/sudoers/insults.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/insults.h 2015-10-31 23:35:00.000000000 +0000 @@ -15,8 +15,8 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _SUDOERS_INSULTS_H -#define _SUDOERS_INSULTS_H +#ifndef SUDOERS_INSULTS_H +#define SUDOERS_INSULTS_H #if defined(HAL_INSULTS) || defined(GOONS_INSULTS) || defined(CLASSIC_INSULTS) || defined(CSOPS_INSULTS) @@ -58,4 +58,4 @@ #endif /* HAL_INSULTS || GOONS_INSULTS || CLASSIC_INSULTS || CSOPS_INSULTS */ -#endif /* _SUDOERS_INSULTS_H */ +#endif /* SUDOERS_INSULTS_H */ diff -Nru sudo-1.8.12/plugins/sudoers/interfaces.c sudo-1.8.16/plugins/sudoers/interfaces.c --- sudo-1.8.12/plugins/sudoers/interfaces.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/interfaces.c 2015-10-31 23:35:00.000000000 +0000 @@ -19,28 +19,20 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include +#ifdef NEED_RESOLV_H +# include +# include +#endif /* NEED_RESOLV_H */ #include #include @@ -57,22 +49,28 @@ * Parse a space-delimited list of IP address/netmask pairs and * store in a list of interface structures. */ -void +bool set_interfaces(const char *ai) { - char *addrinfo, *addr, *mask; + char *addrinfo, *addr, *mask, *last; struct interface *ifp; + bool rval = false; debug_decl(set_interfaces, SUDOERS_DEBUG_NETIF) - addrinfo = sudo_estrdup(ai); - for (addr = strtok(addrinfo, " \t"); addr != NULL; addr = strtok(NULL, " \t")) { + if ((addrinfo = strdup(ai)) == NULL) + debug_return_bool(false); + for (addr = strtok_r(addrinfo, " \t", &last); addr != NULL; addr = strtok_r(NULL, " \t", &last)) { /* Separate addr and mask. */ if ((mask = strchr(addr, '/')) == NULL) continue; *mask++ = '\0'; /* Parse addr and store in list. */ - ifp = sudo_ecalloc(1, sizeof(*ifp)); + if ((ifp = calloc(1, sizeof(*ifp))) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + goto done; + } if (strchr(addr, ':')) { /* IPv6 */ #ifdef HAVE_STRUCT_IN6_ADDR @@ -81,7 +79,7 @@ inet_pton(AF_INET6, mask, &ifp->netmask.ip6) != 1) #endif { - sudo_efree(ifp); + free(ifp); continue; } } else { @@ -89,14 +87,17 @@ ifp->family = AF_INET; if (inet_pton(AF_INET, addr, &ifp->addr.ip4) != 1 || inet_pton(AF_INET, mask, &ifp->netmask.ip4) != 1) { - sudo_efree(ifp); + free(ifp); continue; } } SLIST_INSERT_HEAD(&interfaces, ifp, entries); } - sudo_efree(addrinfo); - debug_return; + rval = true; + +done: + free(addrinfo); + debug_return_bool(rval); } struct interface_list * @@ -108,15 +109,17 @@ void dump_interfaces(const char *ai) { - char *cp, *addrinfo; + const char *cp, *ep; + const char *ai_end = ai + strlen(ai); debug_decl(set_interfaces, SUDOERS_DEBUG_NETIF) - addrinfo = sudo_estrdup(ai); - - sudo_printf(SUDO_CONV_INFO_MSG, _("Local IP address and netmask pairs:\n")); - for (cp = strtok(addrinfo, " \t"); cp != NULL; cp = strtok(NULL, " \t")) - sudo_printf(SUDO_CONV_INFO_MSG, "\t%s\n", cp); + sudo_printf(SUDO_CONV_INFO_MSG, + _("Local IP address and netmask pairs:\n")); + cp = sudo_strsplit(ai, ai_end, " \t", &ep); + while (cp != NULL) { + sudo_printf(SUDO_CONV_INFO_MSG, "\t%.*s\n", (int)(ep - cp), cp); + cp = sudo_strsplit(NULL, ai_end, " \t", &ep); + } - sudo_efree(addrinfo); debug_return; } diff -Nru sudo-1.8.12/plugins/sudoers/interfaces.h sudo-1.8.16/plugins/sudoers/interfaces.h --- sudo-1.8.12/plugins/sudoers/interfaces.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/interfaces.h 2015-10-31 23:35:00.000000000 +0000 @@ -19,8 +19,8 @@ * Materiel Command, USAF, under agreement number F39502-99-1-0512. */ -#ifndef _SUDOERS_INTERFACES_H -#define _SUDOERS_INTERFACES_H +#ifndef SUDOERS_INTERFACES_H +#define SUDOERS_INTERFACES_H /* * Union to hold either strucr in_addr or in6_add @@ -49,7 +49,7 @@ */ int get_net_ifs(char **addrinfo); void dump_interfaces(const char *); -void set_interfaces(const char *); +bool set_interfaces(const char *); struct interface_list *get_interfaces(void); -#endif /* _SUDOERS_INTERFACES_H */ +#endif /* SUDOERS_INTERFACES_H */ diff -Nru sudo-1.8.12/plugins/sudoers/iolog.c sudo-1.8.16/plugins/sudoers/iolog.c --- sudo-1.8.12/plugins/sudoers/iolog.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/iolog.c 2016-03-17 16:13:11.000000000 +0000 @@ -20,23 +20,14 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #ifdef TIME_WITH_SYS_TIME # include #endif @@ -74,7 +65,7 @@ int cols; }; -static int iolog_compress; +static bool iolog_compress = false; static struct timeval last_time; static unsigned int sessid_max = SESSID_MAX; @@ -278,7 +269,11 @@ sessid[6] = '\0'; /* Rewind and overwrite old seq file, including the NUL byte. */ - if (lseek(fd, (off_t)0, SEEK_SET) == (off_t)-1 || write(fd, buf, 7) != 7) { +#ifdef HAVE_PWRITE + if (pwrite(fd, buf, 7, 0) != 7) { +#else + if (lseek(fd, 0, SEEK_SET) == -1 || write(fd, buf, 7) != 7) { +#endif log_warning(SLOG_SEND_MAIL, N_("unable to write to %s"), pathbuf); debug_return_bool(false); } @@ -571,7 +566,7 @@ char pathbuf[PATH_MAX], sessid[7]; char *tofree = NULL; char * const *cur; - const char *plugin_path = NULL; + const char *cp, *plugin_path = NULL; size_t len; int i, rval = -1; debug_decl(sudoers_io_open, SUDOERS_DEBUG_PLUGIN) @@ -581,20 +576,23 @@ /* If we have no command (because -V was specified) just return. */ if (argc == 0) - debug_return_bool(true); + debug_return_int(true); memset(&details, 0, sizeof(details)); bindtextdomain("sudoers", LOCALEDIR); - sudo_setpwent(); - sudo_setgrent(); + if (sudo_setpwent() == -1 || sudo_setgrent() == -1) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_int(-1); + } /* Initialize the debug subsystem. */ - for (cur = settings; *cur != NULL; cur++) { - if (strncmp(*cur, "debug_flags=", sizeof("debug_flags=") - 1) == 0) { - sudoers_debug_parse_flags(&debug_files, - *cur + sizeof("debug_flags=") - 1); + for (cur = settings; (cp = *cur) != NULL; cur++) { + if (strncmp(cp, "debug_flags=", sizeof("debug_flags=") - 1) == 0) { + cp += sizeof("debug_flags=") - 1; + if (!sudoers_debug_parse_flags(&debug_files, cp)) + debug_return_int(-1); continue; } if (strncmp(*cur, "plugin_path=", sizeof("plugin_path=") - 1) == 0) { @@ -615,7 +613,11 @@ /* If no I/O log path defined we need to figure it out ourselves. */ if (details.iolog_path == NULL) { /* Get next session ID and convert it into a path. */ - tofree = sudo_emalloc(sizeof(_PATH_SUDO_IO_LOGDIR) + sizeof(sessid) + 2); + tofree = malloc(sizeof(_PATH_SUDO_IO_LOGDIR) + sizeof(sessid) + 2); + if (tofree == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto done; + } memcpy(tofree, _PATH_SUDO_IO_LOGDIR, sizeof(_PATH_SUDO_IO_LOGDIR)); if (!io_nextid(tofree, NULL, sessid)) { rval = false; @@ -636,7 +638,8 @@ goto done; /* Write log file with user and command details. */ - gettimeofday(&last_time, NULL); + if (gettimeofday(&last_time, NULL) == -1) + goto done; write_info_log(pathbuf, len, &details, argv, &last_time); /* Create the timing and I/O log files. */ @@ -662,7 +665,7 @@ rval = true; done: - sudo_efree(tofree); + free(tofree); if (details.runas_pw) sudo_pw_delref(details.runas_pw); sudo_endpwent(); @@ -670,7 +673,7 @@ sudo_gr_delref(details.runas_gr); sudo_endgrent(); - debug_return_bool(rval); + debug_return_int(rval); } static void @@ -703,7 +706,7 @@ sudo_printf(SUDO_CONV_INFO_MSG, "Sudoers I/O plugin version %s\n", PACKAGE_VERSION); - debug_return_bool(true); + debug_return_int(true); } /* @@ -716,6 +719,12 @@ int rval = true; debug_decl(sudoers_io_version, SUDOERS_DEBUG_PLUGIN) + if (io_log_files[idx].fd.v == NULL) { + sudo_warnx(U_("%s: internal error, file index %d not open"), + __func__, idx); + debug_return_int(-1); + } + gettimeofday(&now, NULL); #ifdef HAVE_ZLIB_H @@ -744,7 +753,7 @@ last_time.tv_sec = now.tv_sec; last_time.tv_usec = now.tv_usec; - debug_return_bool(rval); + debug_return_int(rval); } static int diff -Nru sudo-1.8.12/plugins/sudoers/iolog.h sudo-1.8.16/plugins/sudoers/iolog.h --- sudo-1.8.12/plugins/sudoers/iolog.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/iolog.h 2015-10-31 23:35:00.000000000 +0000 @@ -14,8 +14,8 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _SUDOERS_IOLOG_H -#define _SUDOERS_IOLOG_H +#ifndef SUDOERS_IOLOG_H +#define SUDOERS_IOLOG_H /* * I/O log fd numbers as stored in the timing file. @@ -56,4 +56,4 @@ { false, NULL } /* IOFD_MAX */ }; -#endif /* _SUDOERS_IOLOG_H */ +#endif /* SUDOERS_IOLOG_H */ diff -Nru sudo-1.8.12/plugins/sudoers/iolog_path.c sudo-1.8.16/plugins/sudoers/iolog_path.c --- sudo-1.8.12/plugins/sudoers/iolog_path.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/iolog_path.c 2015-10-31 23:35:00.000000000 +0000 @@ -18,18 +18,8 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H @@ -172,7 +162,11 @@ /* Expanded path must be <= PATH_MAX */ if (prefix != NULL) prelen = strlen(prefix); - dst = path = sudo_emalloc(prelen + PATH_MAX); + dst = path = malloc(prelen + PATH_MAX); + if (path == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto bad; + } *path = '\0'; pathend = path + prelen + PATH_MAX; @@ -282,6 +276,6 @@ debug_return_str(path); bad: - sudo_efree(path); + free(path); debug_return_str(NULL); } diff -Nru sudo-1.8.12/plugins/sudoers/ldap.c sudo-1.8.16/plugins/sudoers/ldap.c --- sudo-1.8.12/plugins/sudoers/ldap.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/ldap.c 2016-03-17 16:13:10.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003-2015 Todd C. Miller + * Copyright (c) 2003-2016 Todd C. Miller * * This code is derived from software contributed by Aaron Spangler. * @@ -22,27 +22,20 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #ifdef TIME_WITH_SYS_TIME # include #endif #include +#include #include #include #include @@ -113,25 +106,25 @@ #if defined(__GNUC__) && __GNUC__ == 2 # define DPRINTF1(fmt...) do { \ - if (ldap_conf.debug >= 1) \ - sudo_warnx(__VA_ARGS__); \ sudo_debug_printf(SUDO_DEBUG_DIAG, fmt); \ + if (ldap_conf.debug >= 1) \ + sudo_warnx_nodebug(fmt); \ } while (0) # define DPRINTF2(fmt...) do { \ - if (ldap_conf.debug >= 2) \ - sudo_warnx(__VA_ARGS__); \ sudo_debug_printf(SUDO_DEBUG_INFO, fmt); \ + if (ldap_conf.debug >= 2) \ + sudo_warnx_nodebug(fmt); \ } while (0) #else # define DPRINTF1(...) do { \ - if (ldap_conf.debug >= 1) \ - sudo_warnx(__VA_ARGS__); \ sudo_debug_printf(SUDO_DEBUG_DIAG, __VA_ARGS__); \ + if (ldap_conf.debug >= 1) \ + sudo_warnx_nodebug(__VA_ARGS__); \ } while (0) # define DPRINTF2(...) do { \ - if (ldap_conf.debug >= 2) \ - sudo_warnx(__VA_ARGS__); \ sudo_debug_printf(SUDO_DEBUG_INFO, __VA_ARGS__); \ + if (ldap_conf.debug >= 2) \ + sudo_warnx_nodebug(__VA_ARGS__); \ } while (0) #endif @@ -139,15 +132,15 @@ #define CHECK_STRLCPY(d, s, l) do { \ if (strlcpy((d), (s), (l)) >= (l)) \ goto overflow; \ -} while (0); +} while (0) #define CHECK_STRLCAT(d, s, l) do { \ if (strlcat((d), (s), (l)) >= (l)) \ goto overflow; \ -} while (0); +} while (0) #define CHECK_LDAP_VCAT(d, s, l) do { \ if (sudo_ldap_value_cat((d), (s), (l)) >= (l)) \ goto overflow; \ -} while (0); +} while (0) #define CONF_BOOL 0 #define CONF_INT 1 @@ -203,10 +196,10 @@ struct ldap_result { struct ldap_search_list searches; struct ldap_entry_wrapper *entries; - int allocated_entries; - int nentries; - int user_matches; - int host_matches; + unsigned int allocated_entries; + unsigned int nentries; + bool user_matches; + bool host_matches; }; #define ALLOCATION_INCREMENT 100 @@ -398,7 +391,7 @@ struct sudo_ldap_handle { LDAP *ld; struct ldap_result *result; - char *username; + const char *username; struct group_list *grlist; }; @@ -424,7 +417,7 @@ static bool sudo_ldap_conf_add_ports(void) { - char *host, *port, defport[13]; + char *host, *last, *port, defport[13]; char hostbuf[LINE_MAX * 2]; int len; debug_decl(sudo_ldap_conf_add_ports, SUDOERS_DEBUG_LDAP) @@ -436,7 +429,7 @@ debug_return_bool(false); } - for ((host = strtok(ldap_conf.host, " \t")); host; (host = strtok(NULL, " \t"))) { + for ((host = strtok_r(ldap_conf.host, " \t", &last)); host; (host = strtok_r(NULL, " \t", &last))) { if (hostbuf[0] != '\0') CHECK_STRLCAT(hostbuf, " ", sizeof(hostbuf)); CHECK_STRLCAT(hostbuf, host, sizeof(hostbuf)); @@ -448,9 +441,10 @@ } } - sudo_efree(ldap_conf.host); - ldap_conf.host = sudo_estrdup(hostbuf); - debug_return_bool(true); + free(ldap_conf.host); + if ((ldap_conf.host = strdup(hostbuf)) == NULL) + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_bool(ldap_conf.host != NULL); overflow: sudo_warnx(U_("internal error, %s overflow"), __func__); @@ -469,16 +463,21 @@ sudo_ldap_parse_uri(const struct ldap_config_str_list *uri_list) { const struct ldap_config_str *entry; - char *buf, *uri, *host, *cp, *port; - char hostbuf[LINE_MAX]; + char *buf, hostbuf[LINE_MAX]; int nldap = 0, nldaps = 0; int rc = -1; debug_decl(sudo_ldap_parse_uri, SUDOERS_DEBUG_LDAP) hostbuf[0] = '\0'; STAILQ_FOREACH(entry, uri_list, entries) { - buf = sudo_estrdup(entry->val); - for ((uri = strtok(buf, " \t")); uri != NULL; (uri = strtok(NULL, " \t"))) { + char *cp, *host, *last, *port, *uri; + + buf = strdup(entry->val); + if (buf == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto done; + } + for ((uri = strtok_r(buf, " \t", &last)); uri != NULL; (uri = strtok_r(NULL, " \t", &last))) { if (strncasecmp(uri, "ldap://", 7) == 0) { nldap++; host = uri + 7; @@ -520,18 +519,21 @@ sudo_warnx(U_("starttls not supported when using ldaps")); ldap_conf.ssl_mode = SUDO_LDAP_SSL; } - sudo_efree(buf); + free(buf); } buf = NULL; /* Store parsed URI(s) in host for ldap_create() or ldap_init(). */ - sudo_efree(ldap_conf.host); - ldap_conf.host = sudo_estrdup(hostbuf); + free(ldap_conf.host); + if ((ldap_conf.host = strdup(hostbuf)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto done; + } rc = LDAP_SUCCESS; done: - sudo_efree(buf); + free(buf); debug_return_int(rc); overflow: @@ -544,7 +546,7 @@ { struct ldap_config_str *uri; size_t len = 0; - char *buf, *cp; + char *buf = NULL; debug_decl(sudo_ldap_join_uri, SUDOERS_DEBUG_LDAP) STAILQ_FOREACH(uri, uri_list, entries) { @@ -556,13 +558,17 @@ } len += strlen(uri->val) + 1; } - buf = cp = sudo_emalloc(len); - buf[0] = '\0'; - STAILQ_FOREACH(uri, uri_list, entries) { - cp += strlcpy(cp, uri->val, len - (cp - buf)); - *cp++ = ' '; + if (len == 0 || (buf = malloc(len)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + } else { + char *cp = buf; + + STAILQ_FOREACH(uri, uri_list, entries) { + cp += strlcpy(cp, uri->val, len - (cp - buf)); + *cp++ = ' '; + } + cp[-1] = '\0'; } - cp[-1] = '\0'; debug_return_str(buf); } #endif /* HAVE_LDAP_INITIALIZE */ @@ -609,7 +615,7 @@ } } if (retry) { - DPRINTF2("ldapssl_clientauth_init(%s, %s)", + DPRINTF2("retry ldapssl_clientauth_init(%s, %s)", ldap_conf.tls_certfile ? ldap_conf.tls_certfile : "NULL", ldap_conf.tls_keyfile ? ldap_conf.tls_keyfile : "NULL"); rc = ldapssl_clientauth_init(ldap_conf.tls_certfile, NULL, @@ -673,7 +679,7 @@ { struct berval **bv, **p; char *val; - int ret = false; + bool ret = false; debug_decl(sudo_ldap_check_non_unix_group, SUDOERS_DEBUG_LDAP) if (!entry) @@ -688,7 +694,8 @@ for (p = bv; *p != NULL && !ret; p++) { val = (*p)->bv_val; if (*val == '+') { - if (netgr_matches(val, NULL, NULL, pw->pw_name)) + if (netgr_matches(val, def_netgroup_tuple ? user_runhost : NULL, + def_netgroup_tuple ? user_srunhost : NULL, pw->pw_name)) ret = true; DPRINTF2("ldap sudoUser netgroup '%s' ... %s", val, ret ? "MATCH!" : "not"); @@ -710,7 +717,7 @@ * host match, else false. */ static bool -sudo_ldap_check_host(LDAP *ld, LDAPMessage *entry) +sudo_ldap_check_host(LDAP *ld, LDAPMessage *entry, struct passwd *pw) { struct berval **bv, **p; char *val; @@ -730,8 +737,9 @@ val = (*p)->bv_val; /* match any or address or netgroup or hostname */ if (!strcmp(val, "ALL") || addr_matches(val) || - netgr_matches(val, user_host, user_shost, NULL) || - hostname_matches(user_shost, user_host, val)) + netgr_matches(val, user_runhost, user_srunhost, + def_netgroup_tuple ? pw->pw_name : NULL) || + hostname_matches(user_srunhost, user_runhost, val)) ret = true; DPRINTF2("ldap sudoHost '%s' ... %s", val, ret ? "MATCH!" : "not"); } @@ -750,7 +758,7 @@ debug_decl(sudo_ldap_check_runas_user, SUDOERS_DEBUG_LDAP) if (!runas_pw) - debug_return_bool(UNSPEC); + debug_return_int(UNSPEC); /* get the runas user from the entry */ bv = ldap_get_values_len(ld, entry, "sudoRunAsUser"); @@ -779,14 +787,15 @@ * what the user specified on the command line. */ if (bv == NULL) - debug_return_bool(!strcasecmp(runas_pw->pw_name, def_runas_default)); + debug_return_int(!strcasecmp(runas_pw->pw_name, def_runas_default)); /* walk through values returned, looking for a match */ for (p = bv; *p != NULL && !ret; p++) { val = (*p)->bv_val; switch (val[0]) { case '+': - if (netgr_matches(val, NULL, NULL, runas_pw->pw_name)) + if (netgr_matches(val, def_netgroup_tuple ? user_runhost : NULL, + def_netgroup_tuple ? user_srunhost : NULL, runas_pw->pw_name)) ret = true; break; case '%': @@ -809,7 +818,7 @@ ldap_value_free_len(bv); /* cleanup */ - debug_return_bool(ret); + debug_return_int(ret); } static int @@ -822,12 +831,12 @@ /* runas_gr is only set if the user specified the -g flag */ if (!runas_gr) - debug_return_bool(UNSPEC); + debug_return_int(UNSPEC); /* get the values from the entry */ bv = ldap_get_values_len(ld, entry, "sudoRunAsGroup"); if (bv == NULL) - debug_return_bool(ret); + debug_return_int(ret); /* walk through values returned, looking for a match */ for (p = bv; *p != NULL && !ret; p++) { @@ -840,7 +849,7 @@ ldap_value_free_len(bv); /* cleanup */ - debug_return_bool(ret); + debug_return_int(ret); } /* @@ -867,7 +876,7 @@ { char *ep, *cp = *cmnd; int digest_type = SUDO_DIGEST_INVALID; - debug_decl(sudo_ldap_check_command, SUDOERS_DEBUG_LDAP) + debug_decl(sudo_ldap_extract_digest, SUDOERS_DEBUG_LDAP) /* * Check for and extract a digest prefix, e.g. @@ -903,7 +912,11 @@ ep++; if (*ep != '\0') { digest->digest_type = digest_type; - digest->digest_str = sudo_estrndup(cp, (size_t)(ep - cp)); + digest->digest_str = strndup(cp, (size_t)(ep - cp)); + if (digest->digest_str == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_ptr(NULL); + } cp = ep + 1; while (isblank((unsigned char)*cp)) cp++; @@ -936,11 +949,11 @@ debug_decl(sudo_ldap_check_command, SUDOERS_DEBUG_LDAP) if (!entry) - debug_return_bool(ret); + debug_return_int(ret); bv = ldap_get_values_len(ld, entry, "sudoCommand"); if (bv == NULL) - debug_return_bool(ret); + debug_return_int(ret); for (p = bv; *p != NULL && ret != false; p++) { val = (*p)->bv_val; @@ -959,10 +972,10 @@ /* check for !command */ if (*val == '!') { foundbang = true; - allowed_cmnd = sudo_estrdup(1 + val); /* !command */ + allowed_cmnd = val + 1; /* !command */ } else { foundbang = false; - allowed_cmnd = sudo_estrdup(val); /* command */ + allowed_cmnd = val; /* command */ } /* split optional args away from command */ @@ -978,17 +991,19 @@ */ ret = foundbang ? false : true; } + if (allowed_args != NULL) + allowed_args[-1] = ' '; /* restore val */ + DPRINTF2("ldap sudoCommand '%s' ... %s", val, ret == true ? "MATCH!" : "not"); - sudo_efree(allowed_cmnd); /* cleanup */ if (allowed_digest != NULL) - sudo_efree(allowed_digest->digest_str); + free(allowed_digest->digest_str); } ldap_value_free_len(bv); /* more cleanup */ - debug_return_bool(ret); + debug_return_int(ret); } /* @@ -1004,11 +1019,11 @@ debug_decl(sudo_ldap_check_bool, SUDOERS_DEBUG_LDAP) if (entry == NULL) - debug_return_bool(ret); + debug_return_int(ret); bv = ldap_get_values_len(ld, entry, "sudoOption"); if (bv == NULL) - debug_return_bool(ret); + debug_return_int(ret); /* walk through options */ for (p = bv; *p != NULL; p++) { @@ -1023,58 +1038,81 @@ ldap_value_free_len(bv); - debug_return_bool(ret); + debug_return_int(ret); } /* * Read sudoOption and modify the defaults as we go. This is used once * from the cn=defaults entry and also once when a final sudoRole is matched. */ -static void +static bool sudo_ldap_parse_options(LDAP *ld, LDAPMessage *entry) { struct berval **bv, **p; - char op, *var, *val; + char *copy, *cp, *var; + int op; + bool rc = false; debug_decl(sudo_ldap_parse_options, SUDOERS_DEBUG_LDAP) - if (entry == NULL) - debug_return; - bv = ldap_get_values_len(ld, entry, "sudoOption"); if (bv == NULL) - debug_return; + debug_return_bool(true); /* walk through options */ for (p = bv; *p != NULL; p++) { - var = sudo_estrdup((*p)->bv_val); + if ((copy = var = strdup((*p)->bv_val)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto done; + } DPRINTF2("ldap sudoOption: '%s'", var); /* check for equals sign past first char */ - val = strchr(var, '='); - if (val > var) { - *val++ = '\0'; /* split on = and truncate var */ - op = *(val - 2); /* peek for += or -= cases */ + cp = strchr(var, '='); + if (cp > var) { + char *val = cp + 1; + op = cp[-1]; /* peek for += or -= cases */ if (op == '+' || op == '-') { - *(val - 2) = '\0'; /* found, remove extra char */ /* case var+=val or var-=val */ - set_default(var, val, (int) op); + cp--; } else { /* case var=val */ - set_default(var, val, true); + op = true; + } + /* Trim whitespace between var and operator. */ + while (cp > var && isblank((unsigned char)cp[-1])) + cp--; + /* Truncate variable name. */ + *cp = '\0'; + /* Trim leading whitespace from val. */ + while (isblank((unsigned char)*val)) + val++; + /* Strip double quotes if present. */ + if (*val == '"') { + char *ep = val + strlen(val); + if (ep != val && ep[-1] == '"') { + val++; + ep[-1] = '\0'; + } } + set_default(var, val, op); } else if (*var == '!') { /* case !var Boolean False */ - set_default(var + 1, NULL, false); + do { + var++; + } while (isblank((unsigned char)*var)); + set_default(var, NULL, false); } else { /* case var Boolean True */ set_default(var, NULL, true); } - sudo_efree(var); + free(copy); } + rc = true; +done: ldap_value_free_len(bv); - debug_return; + debug_return_bool(rc); } /* @@ -1099,13 +1137,13 @@ * If either the sudoNotAfter or sudoNotBefore attributes are missing, * no time restriction shall be imposed. */ -static int +static bool sudo_ldap_timefilter(char *buffer, size_t buffersize) { struct tm *tp; time_t now; char timebuffer[sizeof("20120727121554.0Z")]; - int bytes = 0; + int len = -1; debug_decl(sudo_ldap_timefilter, SUDOERS_DEBUG_LDAP) /* Make sure we have a formatted timestamp for __now__. */ @@ -1122,15 +1160,15 @@ } /* Build filter. */ - bytes = snprintf(buffer, buffersize, "(&(|(!(sudoNotAfter=*))(sudoNotAfter>=%s))(|(!(sudoNotBefore=*))(sudoNotBefore<=%s)))", + len = snprintf(buffer, buffersize, "(&(|(!(sudoNotAfter=*))(sudoNotAfter>=%s))(|(!(sudoNotBefore=*))(sudoNotBefore<=%s)))", timebuffer, timebuffer); - if (bytes <= 0 || (size_t)bytes >= buffersize) { - sudo_warn(U_("unable to build time filter")); - bytes = 0; + if (len <= 0 || (size_t)len >= buffersize) { + sudo_warnx(U_("internal error, %s overflow"), __func__); + len = -1; } done: - debug_return_int(bytes); + debug_return_bool(len != -1); } /* @@ -1142,10 +1180,12 @@ char *filt; debug_decl(sudo_ldap_build_default_filter, SUDOERS_DEBUG_LDAP) - if (ldap_conf.search_filter) - sudo_easprintf(&filt, "(&%s(cn=defaults))", ldap_conf.search_filter); - else - filt = sudo_estrdup("cn=defaults"); + if (!ldap_conf.search_filter) + debug_return_str(strdup("cn=defaults")); + + if (asprintf(&filt, "(&%s(cn=defaults))", ldap_conf.search_filter) == -1) + debug_return_str(NULL); + debug_return_str(filt); } @@ -1243,6 +1283,29 @@ } /* + * Like strdup() but escapes characters as per RFC 4515. + */ +static char * +sudo_ldap_value_dup(const char *src) +{ + char *dst; + size_t size; + + size = sudo_ldap_value_len(src) + 1; + dst = malloc(size); + if (dst == NULL) + return NULL; + + *dst = '\0'; + if (sudo_ldap_value_cat(dst, src, size) >= size) { + /* Should not be possible... */ + free(dst); + dst = NULL; + } + return dst; +} + +/* * Check the netgroups list beginning at "start" for nesting. * Parent nodes with a memberNisNetgroup that match one of the * netgroups are added to the list and checked for further nesting. @@ -1252,7 +1315,6 @@ sudo_netgroup_lookup_nested(LDAP *ld, char *base, struct timeval *timeout, struct ldap_netgroup_list *netgroups, struct ldap_netgroup *start) { - struct ldap_netgroup *ng, *old_tail; LDAPMessage *entry, *result; size_t filt_len; char *filt; @@ -1261,12 +1323,16 @@ DPRINTF1("Checking for nested netgroups from netgroup_base '%s'", base); do { + struct ldap_netgroup *ng, *old_tail; + + result = NULL; old_tail = STAILQ_LAST(netgroups, ldap_netgroup, entries); filt_len = strlen(ldap_conf.netgroup_search_filter) + 7; for (ng = start; ng != NULL; ng = STAILQ_NEXT(ng, entries)) { filt_len += sudo_ldap_value_len(ng->name) + 20; } - filt = sudo_emalloc(filt_len); + if ((filt = malloc(filt_len)) == NULL) + goto oom; CHECK_STRLCPY(filt, "(&", filt_len); CHECK_STRLCAT(filt, ldap_conf.netgroup_search_filter, filt_len); CHECK_STRLCAT(filt, "(|", filt_len); @@ -1277,9 +1343,9 @@ } CHECK_STRLCAT(filt, "))", filt_len); DPRINTF1("ldap netgroup search filter: '%s'", filt); - result = NULL; rc = ldap_search_ext_s(ld, base, LDAP_SCOPE_SUBTREE, filt, NULL, 0, NULL, NULL, timeout, 0, &result); + free(filt); if (rc == LDAP_SUCCESS) { LDAP_FOREACH(entry, ld, result) { struct berval **bv; @@ -1293,8 +1359,13 @@ break; } if (ng == NULL) { - ng = sudo_emalloc(sizeof(*ng)); - ng->name = sudo_estrdup((*bv)->bv_val); + ng = malloc(sizeof(*ng)); + if (ng == NULL || + (ng->name = strdup((*bv)->bv_val)) == NULL) { + free(ng); + ldap_value_free_len(bv); + goto oom; + } STAILQ_INSERT_TAIL(netgroups, ng, entries); DPRINTF1("Found new netgroup %s for %s", ng->name, base); } @@ -1302,17 +1373,20 @@ } } } - if (result) - ldap_msgfree(result); - sudo_efree(filt); + ldap_msgfree(result); /* Check for nested netgroups in what we added. */ start = old_tail ? STAILQ_NEXT(old_tail, entries) : STAILQ_FIRST(netgroups); } while (start != NULL); debug_return_bool(true); +oom: + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + ldap_msgfree(result); + debug_return_bool(false); overflow: sudo_warnx(U_("internal error, %s overflow"), __func__); + free(filt); debug_return_bool(false); } @@ -1328,11 +1402,11 @@ struct ldap_config_str *base; struct ldap_netgroup *ng, *old_tail; struct timeval tv, *tvp = NULL; - LDAPMessage *entry, *result; + LDAPMessage *entry, *result = NULL; const char *domain; - size_t filt_len; - char *filt; - int rc; + char *escaped_domain = NULL, *escaped_user = NULL; + char *escaped_host = NULL, *escaped_shost = NULL, *filt = NULL; + int filt_len, rc; debug_decl(sudo_netgroup_lookup, SUDOERS_DEBUG_LDAP); if (ldap_conf.timeout > 0) { @@ -1344,99 +1418,86 @@ /* Use NIS domain if set, else wildcard match. */ domain = sudo_getdomainname(); - STAILQ_FOREACH(base, &ldap_conf.netgroup_base, entries) { - DPRINTF1("searching from netgroup_base '%s'", base->val); - - /* Build query, using NIS domain if it is set. */ - if (domain != NULL) { - filt_len = sizeof("(nisNetgroupTriple=\\(,,\\))") - 1 + - sudo_ldap_value_len(pw->pw_name); - if (user_host == user_shost) { - filt_len *= 4; - filt_len += 2 * sudo_ldap_value_len(user_shost); - filt_len += 2 * sudo_ldap_value_len(domain); - } else { - filt_len *= 6; - filt_len += 2 * sudo_ldap_value_len(user_shost); - filt_len += 2 * sudo_ldap_value_len(user_host); - filt_len += 3 * sudo_ldap_value_len(domain); - } - filt_len += 7 + strlen(ldap_conf.netgroup_search_filter); - filt = sudo_emalloc(filt_len); - CHECK_STRLCPY(filt, "(&", filt_len); - CHECK_STRLCAT(filt, ldap_conf.netgroup_search_filter, filt_len); - CHECK_STRLCAT(filt, "(|(nisNetgroupTriple=\\(,", filt_len); - CHECK_LDAP_VCAT(filt, pw->pw_name, filt_len); - CHECK_STRLCAT(filt, ",", filt_len); - CHECK_LDAP_VCAT(filt, domain, filt_len); - CHECK_STRLCAT(filt, "\\))(nisNetgroupTriple=\\(", filt_len); - CHECK_LDAP_VCAT(filt, user_shost, filt_len); - CHECK_STRLCAT(filt, ",", filt_len); - CHECK_LDAP_VCAT(filt, pw->pw_name, filt_len); - if (user_host != user_shost) { - CHECK_STRLCAT(filt, ",", filt_len); - CHECK_LDAP_VCAT(filt, domain, filt_len); - CHECK_STRLCAT(filt, "\\))(nisNetgroupTriple=\\(", filt_len); - CHECK_LDAP_VCAT(filt, user_host, filt_len); - CHECK_STRLCAT(filt, ",", filt_len); - CHECK_LDAP_VCAT(filt, pw->pw_name, filt_len); - } - CHECK_STRLCAT(filt, ",", filt_len); - CHECK_LDAP_VCAT(filt, domain, filt_len); - CHECK_STRLCAT(filt, "\\))(nisNetgroupTriple=\\(,", filt_len); - CHECK_LDAP_VCAT(filt, pw->pw_name, filt_len); - CHECK_STRLCAT(filt, ",\\))(nisNetgroupTriple=\\(", filt_len); - CHECK_LDAP_VCAT(filt, user_shost, filt_len); - CHECK_STRLCAT(filt, ",", filt_len); - CHECK_LDAP_VCAT(filt, pw->pw_name, filt_len); - if (user_host != user_shost) { - CHECK_STRLCAT(filt, ",\\))(nisNetgroupTriple=\\(", filt_len); - CHECK_LDAP_VCAT(filt, user_host, filt_len); - CHECK_STRLCAT(filt, ",", filt_len); - CHECK_LDAP_VCAT(filt, pw->pw_name, filt_len); - } - CHECK_STRLCAT(filt, ",\\))))", filt_len); + /* Escape the domain, host names, and user name per RFC 4515. */ + if (domain != NULL) { + if ((escaped_domain = sudo_ldap_value_dup(domain)) == NULL) + goto oom; + } + if ((escaped_user = sudo_ldap_value_dup(pw->pw_name)) == NULL) + goto oom; + if (def_netgroup_tuple) { + escaped_host = sudo_ldap_value_dup(user_runhost); + if (user_runhost == user_srunhost) + escaped_shost = escaped_host; + else + escaped_shost = sudo_ldap_value_dup(user_srunhost); + if (escaped_host == NULL || escaped_shost == NULL) + goto oom; + } + + /* Build query, using NIS domain if it is set. */ + if (domain != NULL) { + if (escaped_host != escaped_shost) { + filt_len = asprintf(&filt, "(&%s(|" + "(nisNetgroupTriple=\\28,%s,%s\\29)" + "(nisNetgroupTriple=\\28%s,%s,%s\\29)" + "(nisNetgroupTriple=\\28%s,%s,%s\\29)" + "(nisNetgroupTriple=\\28,%s,\\29)" + "(nisNetgroupTriple=\\28%s,%s,\\29)" + "(nisNetgroupTriple=\\28%s,%s,\\29)))", + ldap_conf.netgroup_search_filter, escaped_user, escaped_domain, + escaped_shost, escaped_user, escaped_domain, + escaped_host, escaped_user, escaped_domain, escaped_user, + escaped_shost, escaped_user, escaped_host, escaped_user); + } else if (escaped_shost != NULL) { + filt_len = asprintf(&filt, "(&%s(|" + "(nisNetgroupTriple=\\28,%s,%s\\29)" + "(nisNetgroupTriple=\\28%s,%s,%s\\29)" + "(nisNetgroupTriple=\\28,%s,\\29)" + "(nisNetgroupTriple=\\28%s,%s,\\29)))", + ldap_conf.netgroup_search_filter, escaped_user, escaped_domain, + escaped_shost, escaped_user, escaped_domain, + escaped_user, escaped_shost, escaped_user); } else { - filt_len = sizeof("(nisNetgroupTriple=\\(,,*\\))") - 1 + - sudo_ldap_value_len(pw->pw_name); - if (user_host == user_shost) { - filt_len *= 2; - filt_len += sudo_ldap_value_len(user_shost); - } else { - filt_len *= 3; - filt_len += sudo_ldap_value_len(user_shost); - filt_len += sudo_ldap_value_len(user_host); - } - filt_len += 7 + strlen(ldap_conf.netgroup_search_filter); - filt = sudo_emalloc(filt_len); - CHECK_STRLCPY(filt, "(&", filt_len); - CHECK_STRLCAT(filt, ldap_conf.netgroup_search_filter, filt_len); - CHECK_STRLCAT(filt, "(|(nisNetgroupTriple=\\(,", filt_len); - CHECK_LDAP_VCAT(filt, pw->pw_name, filt_len); - CHECK_STRLCAT(filt, ",*\\))(nisNetgroupTriple=\\(", filt_len); - CHECK_LDAP_VCAT(filt, user_shost, filt_len); - CHECK_STRLCAT(filt, ",", filt_len); - CHECK_LDAP_VCAT(filt, pw->pw_name, filt_len); - if (user_host != user_shost) { - CHECK_STRLCAT(filt, ",*\\))(nisNetgroupTriple=\\(", filt_len); - CHECK_LDAP_VCAT(filt, user_host, filt_len); - CHECK_STRLCAT(filt, ",", filt_len); - CHECK_LDAP_VCAT(filt, pw->pw_name, filt_len); - } - CHECK_STRLCAT(filt, ",*\\))))", filt_len); + filt_len = asprintf(&filt, "(&%s(|" + "(nisNetgroupTriple=\\28*,%s,%s\\29)" + "(nisNetgroupTriple=\\28*,%s,\\29)))", + ldap_conf.netgroup_search_filter, escaped_user, escaped_domain, + escaped_user); } - DPRINTF1("ldap netgroup search filter: '%s'", filt); - result = NULL; + } else { + if (escaped_host != escaped_shost) { + filt_len = asprintf(&filt, "(&%s(|" + "(nisNetgroupTriple=\\28,%s,*\\29)" + "(nisNetgroupTriple=\\28%s,%s,*\\29)" + "(nisNetgroupTriple=\\28%s,%s,*\\29)))", + ldap_conf.netgroup_search_filter, escaped_user, + escaped_shost, escaped_user, escaped_host, escaped_user); + } else if (escaped_shost != NULL) { + filt_len = asprintf(&filt, "(&%s(|" + "(nisNetgroupTriple=\\28,%s,*\\29)" + "(nisNetgroupTriple=\\28%s,%s,*\\29)))", + ldap_conf.netgroup_search_filter, escaped_user, + escaped_shost, escaped_user); + } else { + filt_len = asprintf(&filt, + "(&%s(|(nisNetgroupTriple=\\28*,%s,*\\29)))", + ldap_conf.netgroup_search_filter, escaped_user); + } + } + if (filt_len == -1) + goto oom; + DPRINTF1("ldap netgroup search filter: '%s'", filt); + + STAILQ_FOREACH(base, &ldap_conf.netgroup_base, entries) { + DPRINTF1("searching from netgroup_base '%s'", base->val); rc = ldap_search_ext_s(ld, base->val, LDAP_SCOPE_SUBTREE, filt, NULL, 0, NULL, NULL, tvp, 0, &result); if (rc != LDAP_SUCCESS) { - DPRINTF1("nothing found for '%s'", filt); - if (result) - ldap_msgfree(result); - sudo_efree(filt); + DPRINTF1("ldap netgroup search failed: %s", ldap_err2string(rc)); + ldap_msgfree(result); continue; } - sudo_efree(filt); old_tail = STAILQ_LAST(netgroups, ldap_netgroup, entries); LDAP_FOREACH(entry, ld, result) { @@ -1451,8 +1512,13 @@ break; } if (ng == NULL) { - ng = sudo_emalloc(sizeof(*ng)); - ng->name = sudo_estrdup((*bv)->bv_val); + ng = malloc(sizeof(*ng)); + if (ng == NULL || + (ng->name = strdup((*bv)->bv_val)) == NULL) { + free(ng); + ldap_value_free_len(bv); + goto oom; + } STAILQ_INSERT_TAIL(netgroups, ng, entries); DPRINTF1("Found new netgroup %s for %s", ng->name, base->val); @@ -1461,6 +1527,7 @@ } } ldap_msgfree(result); + result = NULL; /* Check for nested netgroups in what we added. */ ng = old_tail ? STAILQ_NEXT(old_tail, entries) : STAILQ_FIRST(netgroups); @@ -1469,9 +1536,17 @@ debug_return_bool(false); } } + free(filt); debug_return_bool(true); -overflow: - sudo_warnx(U_("internal error, %s overflow"), __func__); +oom: + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + free(escaped_domain); + free(escaped_user); + free(escaped_host); + if (escaped_host != escaped_shost) + free(escaped_shost); + free(filt); + ldap_msgfree(result); debug_return_bool(false); } @@ -1531,8 +1606,8 @@ } else { /* sudo_netgroup_lookup() failed, clean up. */ STAILQ_FOREACH_SAFE(ng, &netgroups, entries, nextng) { - sudo_efree(ng->name); - sudo_efree(ng); + free(ng->name); + free(ng); } STAILQ_INIT(&netgroups); } @@ -1541,7 +1616,10 @@ /* If timed, add space for time limits. */ if (ldap_conf.timed) sz += TIMEFILTER_LENGTH; - buf = sudo_emalloc(sz); + if ((buf = malloc(sz)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_str(NULL); + } *buf = '\0'; /* @@ -1601,8 +1679,8 @@ CHECK_STRLCAT(buf, "(sudoUser=+", sz); CHECK_LDAP_VCAT(buf, ng->name, sz); CHECK_STRLCAT(buf, ")", sz); - sudo_efree(ng->name); - sudo_efree(ng); + free(ng->name); + free(ng); } /* Add ALL to list and end the global OR. */ @@ -1611,7 +1689,10 @@ /* Add the time restriction, or simply end the global OR. */ if (ldap_conf.timed) { CHECK_STRLCAT(buf, ")", sz); /* closes the global OR */ - sudo_ldap_timefilter(timebuffer, sizeof(timebuffer)); + if (!sudo_ldap_timefilter(timebuffer, sizeof(timebuffer))) { + free(buf); + debug_return_str(NULL); + } CHECK_STRLCAT(buf, timebuffer, sz); } else if (ldap_conf.search_filter) { CHECK_STRLCAT(buf, ")", sz); /* closes the global OR */ @@ -1621,6 +1702,7 @@ debug_return_str(buf); overflow: sudo_warnx(U_("internal error, %s overflow"), __func__); + free(buf); debug_return_str(NULL); } @@ -1633,6 +1715,7 @@ { char *filt, timebuffer[TIMEFILTER_LENGTH + 1]; bool query_netgroups = def_use_netgroups; + int len; debug_decl(sudo_ldap_build_pass2, SUDOERS_DEBUG_LDAP) /* No need to query netgroups if using netgroup_base. */ @@ -1640,11 +1723,15 @@ query_netgroups = false; /* Short circuit if no netgroups and no non-Unix groups. */ - if (!query_netgroups && !def_group_plugin) + if (!query_netgroups && !def_group_plugin) { + errno = ENOENT; debug_return_str(NULL); + } - if (ldap_conf.timed) - sudo_ldap_timefilter(timebuffer, sizeof(timebuffer)); + if (ldap_conf.timed) { + if (!sudo_ldap_timefilter(timebuffer, sizeof(timebuffer))) + debug_return_str(NULL); + } /* * Match all sudoUsers beginning with '+' or '%:'. @@ -1652,19 +1739,21 @@ * those get ANDed in to the expression. */ if (query_netgroups && def_group_plugin) { - sudo_easprintf(&filt, "%s%s(|(sudoUser=+*)(sudoUser=%%:*))%s%s", + len = asprintf(&filt, "%s%s(|(sudoUser=+*)(sudoUser=%%:*))%s%s", (ldap_conf.timed || ldap_conf.search_filter) ? "(&" : "", ldap_conf.search_filter ? ldap_conf.search_filter : "", ldap_conf.timed ? timebuffer : "", (ldap_conf.timed || ldap_conf.search_filter) ? ")" : ""); } else { - sudo_easprintf(&filt, "%s%s(sudoUser=*)(sudoUser=%s*)%s%s", + len = asprintf(&filt, "%s%s(sudoUser=*)(sudoUser=%s*)%s%s", (ldap_conf.timed || ldap_conf.search_filter) ? "(&" : "", ldap_conf.search_filter ? ldap_conf.search_filter : "", query_netgroups ? "+" : "%:", ldap_conf.timed ? timebuffer : "", (ldap_conf.timed || ldap_conf.search_filter) ? ")" : ""); } + if (len == -1) + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); debug_return_str(filt); } @@ -1686,13 +1775,17 @@ */ secret += sizeof("base64:") - 1; reslen = ((strlen(secret) + 3) / 4 * 3); - result = sudo_emalloc(reslen + 1); - len = base64_decode(secret, result, reslen); - if (len == (size_t)-1) { - free(result); - result = NULL; + result = malloc(reslen + 1); + if (result == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); } else { - result[len] = '\0'; + len = base64_decode(secret, result, reslen); + if (len == (size_t)-1) { + free(result); + result = NULL; + } else { + result[len] = '\0'; + } } } debug_return_str((char *)result); @@ -1705,15 +1798,18 @@ char buf[LINE_MAX]; debug_decl(sudo_ldap_read_secret, SUDOERS_DEBUG_LDAP) + /* XXX - getline */ if ((fp = fopen(path_ldap_secret, "r")) != NULL) { if (fgets(buf, sizeof(buf), fp) != NULL) { buf[strcspn(buf, "\n")] = '\0'; /* copy to bindpw and binddn */ - sudo_efree(ldap_conf.bindpw); + free(ldap_conf.bindpw); ldap_conf.bindpw = sudo_ldap_decode_secret(buf); - if (ldap_conf.bindpw == NULL) - ldap_conf.bindpw = sudo_estrdup(buf); - sudo_efree(ldap_conf.binddn); + if (ldap_conf.bindpw == NULL) { + if ((ldap_conf.bindpw = strdup(buf)) == NULL) + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + } + free(ldap_conf.binddn); ldap_conf.binddn = ldap_conf.rootbinddn; ldap_conf.rootbinddn = NULL; } @@ -1759,9 +1855,17 @@ } break; case CONF_STR: - sudo_efree(*(char **)(cur->valp)); - *(char **)(cur->valp) = *value ? sudo_estrdup(value) : NULL; - break; + { + char *cp = NULL; + + free(*(char **)(cur->valp)); + if (*value && (cp = strdup(value)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_bool(false); + } + *(char **)(cur->valp) = cp; + break; + } case CONF_LIST_STR: { struct ldap_config_str_list *head; @@ -1770,7 +1874,10 @@ if (len > 0) { head = (struct ldap_config_str_list *)cur->valp; - str = sudo_emalloc(sizeof(*str) + len); + if ((str = malloc(sizeof(*str) + len)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_bool(false); + } memcpy(str->val, value, len + 1); STAILQ_INSERT_TAIL(head, str, entries); } @@ -1857,12 +1964,17 @@ ldap_conf.use_sasl = -1; ldap_conf.rootuse_sasl = -1; ldap_conf.deref = -1; - ldap_conf.search_filter = sudo_estrdup(DEFAULT_SEARCH_FILTER); - ldap_conf.netgroup_search_filter = sudo_estrdup(DEFAULT_NETGROUP_SEARCH_FILTER); + ldap_conf.search_filter = strdup(DEFAULT_SEARCH_FILTER); + ldap_conf.netgroup_search_filter = strdup(DEFAULT_NETGROUP_SEARCH_FILTER); STAILQ_INIT(&ldap_conf.uri); STAILQ_INIT(&ldap_conf.base); STAILQ_INIT(&ldap_conf.netgroup_base); + if (ldap_conf.search_filter == NULL || ldap_conf.netgroup_search_filter == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_bool(false); + } + if ((fp = fopen(path_ldap_conf, "r")) == NULL) debug_return_bool(false); @@ -1889,8 +2001,13 @@ free(line); fclose(fp); - if (!ldap_conf.host) - ldap_conf.host = sudo_estrdup("localhost"); + if (!ldap_conf.host) { + ldap_conf.host = strdup("localhost"); + if (ldap_conf.host == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_bool(false); + } + } DPRINTF1("LDAP Config Summary"); DPRINTF1("==================="); @@ -2010,7 +2127,7 @@ debug_return_bool(false); while ((uri = STAILQ_FIRST(&ldap_conf.uri)) != NULL) { STAILQ_REMOVE_HEAD(&ldap_conf.uri, entries); - sudo_efree(uri); + free(uri); } ldap_conf.port = LDAP_PORT; } @@ -2038,12 +2155,16 @@ if (ldap_conf.search_filter && ldap_conf.search_filter[0] != '(') { size_t len = strlen(ldap_conf.search_filter); cp = ldap_conf.search_filter; - ldap_conf.search_filter = sudo_emalloc(len + 3); + ldap_conf.search_filter = malloc(len + 3); + if (ldap_conf.search_filter == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_bool(false); + } ldap_conf.search_filter[0] = '('; memcpy(ldap_conf.search_filter + 1, cp, len); ldap_conf.search_filter[len + 1] = ')'; ldap_conf.search_filter[len + 2] = '\0'; - sudo_efree(cp); + free(cp); } @@ -2053,7 +2174,7 @@ } else if (ldap_conf.bindpw) { cp = sudo_ldap_decode_secret(ldap_conf.bindpw); if (cp != NULL) { - sudo_efree(ldap_conf.bindpw); + free(ldap_conf.bindpw); ldap_conf.bindpw = cp; } } @@ -2061,7 +2182,7 @@ if (ldap_conf.tls_keypw) { cp = sudo_ldap_decode_secret(ldap_conf.tls_keypw); if (cp != NULL) { - sudo_efree(ldap_conf.tls_keypw); + free(ldap_conf.tls_keypw); ldap_conf.tls_keypw = cp; } } @@ -2132,6 +2253,11 @@ ld = handle->ld; filt = sudo_ldap_build_default_filter(); + if (filt == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + count = -1; + goto done; + } STAILQ_FOREACH(base, &ldap_conf.base, entries) { if (ldap_conf.timeout > 0) { tv.tv_sec = ldap_conf.timeout; @@ -2156,11 +2282,12 @@ ldap_value_free_len(bv); } } - if (result) - ldap_msgfree(result); + ldap_msgfree(result); } - sudo_efree(filt); + free(filt); done: + if (sudo_lbuf_error(lbuf)) + debug_return_int(-1); debug_return_int(count); } @@ -2220,12 +2347,18 @@ if (strcmp(cp, "authenticate") == 0) sudo_lbuf_append(lbuf, (*p)->bv_val[0] == '!' ? "NOPASSWD: " : "PASSWD: "); + else if (strcmp(cp, "sudoedit_follow") == 0) + sudo_lbuf_append(lbuf, (*p)->bv_val[0] == '!' ? + "FOLLOW: " : "NOFOLLOW: "); else if (strcmp(cp, "noexec") == 0) sudo_lbuf_append(lbuf, (*p)->bv_val[0] == '!' ? "EXEC: " : "NOEXEC: "); else if (strcmp(cp, "setenv") == 0) sudo_lbuf_append(lbuf, (*p)->bv_val[0] == '!' ? "NOSETENV: " : "SETENV: "); + else if (strcmp(cp, "mail_all_cmnds") == 0 || strcmp(cp, "mail_always") == 0) + sudo_lbuf_append(lbuf, (*p)->bv_val[0] == '!' ? + "NOMAIL: " : "MAIL: "); } ldap_value_free_len(bv); } @@ -2337,7 +2470,7 @@ LDAP *ld; struct ldap_result *lres; LDAPMessage *entry; - int i, count = 0; + unsigned int i, count = 0; debug_decl(sudo_ldap_display_privs, SUDOERS_DEBUG_LDAP) if (handle == NULL || handle->ld == NULL) @@ -2346,6 +2479,8 @@ DPRINTF1("ldap search for command list"); lres = sudo_ldap_result_get(nss, pw); + if (lres == NULL) + goto done; /* Display all matching entries. */ for (i = 0; i < lres->nentries; i++) { @@ -2357,6 +2492,8 @@ } done: + if (sudo_lbuf_error(lbuf)) + debug_return_int(-1); debug_return_int(count); } @@ -2368,7 +2505,7 @@ struct ldap_result *lres; LDAPMessage *entry; bool found = false; - int i; + unsigned int i; debug_decl(sudo_ldap_display_cmnd, SUDOERS_DEBUG_LDAP) if (handle == NULL || handle->ld == NULL) @@ -2381,6 +2518,8 @@ */ DPRINTF1("ldap search for command list"); lres = sudo_ldap_result_get(nss, pw); + if (lres == NULL) + goto done; for (i = 0; i < lres->nentries; i++) { entry = lres->entries[i].entry; if (sudo_ldap_check_command(ld, entry, NULL) && @@ -2394,7 +2533,7 @@ if (found) printf("%s%s%s\n", safe_cmnd ? safe_cmnd : user_cmnd, user_args ? " " : "", user_args ? user_args : ""); - debug_return_bool(!found); + debug_return_int(!found); } #ifdef HAVE_LDAP_SASL_INTERACTIVE_BIND_S @@ -2682,8 +2821,9 @@ struct ldap_result *result; debug_decl(sudo_ldap_result_alloc, SUDOERS_DEBUG_LDAP) - result = sudo_ecalloc(1, sizeof(*result)); - STAILQ_INIT(&result->searches); + result = calloc(1, sizeof(*result)); + if (result != NULL) + STAILQ_INIT(&result->searches); debug_return_ptr(result); } @@ -2699,15 +2839,15 @@ if (lres != NULL) { if (lres->nentries) { - sudo_efree(lres->entries); + free(lres->entries); lres->entries = NULL; } while ((s = STAILQ_FIRST(&lres->searches)) != NULL) { STAILQ_REMOVE_HEAD(&lres->searches, entries); ldap_msgfree(s->searchresult); - sudo_efree(s); + free(s); } - sudo_efree(lres); + free(lres); } debug_return; } @@ -2723,10 +2863,12 @@ debug_decl(sudo_ldap_result_add_search, SUDOERS_DEBUG_LDAP) /* Create new entry and add it to the end of the chain. */ - news = sudo_ecalloc(1, sizeof(*news)); - news->ldap = ldap; - news->searchresult = searchresult; - STAILQ_INSERT_TAIL(&lres->searches, news, entries); + news = calloc(1, sizeof(*news)); + if (news != NULL) { + news->ldap = ldap; + news->searchresult = searchresult; + STAILQ_INSERT_TAIL(&lres->searches, news, entries); + } debug_return_ptr(news); } @@ -2754,6 +2896,7 @@ if (ldap_conf.krb5_ccname == NULL && user_ccname != NULL) { new_ccname = tmp_ccname = sudo_krb5_copy_cc_file(user_ccname); if (tmp_ccname == NULL) { + /* XXX - fatal error */ sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "unable to copy user ccache %s", user_ccname); } @@ -2860,20 +3003,18 @@ #ifdef HAVE_LDAP_INITIALIZE if (!STAILQ_EMPTY(&ldap_conf.uri)) { char *buf = sudo_ldap_join_uri(&ldap_conf.uri); - if (buf != NULL) { - DPRINTF2("ldap_initialize(ld, %s)", buf); - rc = ldap_initialize(&ld, buf); - sudo_efree(buf); - if (rc != LDAP_SUCCESS) { - sudo_warnx(U_("unable to initialize LDAP: %s"), - ldap_err2string(rc)); - } - } + if (buf == NULL) + goto done; + DPRINTF2("ldap_initialize(ld, %s)", buf); + rc = ldap_initialize(&ld, buf); + free(buf); } else #endif rc = sudo_ldap_init(&ld, ldap_conf.host, ldap_conf.port); - if (rc != LDAP_SUCCESS) + if (rc != LDAP_SUCCESS) { + sudo_warnx(U_("unable to initialize LDAP: %s"), ldap_err2string(rc)); goto done; + } /* Set LDAP per-connection options */ rc = sudo_ldap_set_options_conn(ld); @@ -2917,7 +3058,12 @@ goto done; /* Create a handle container. */ - handle = sudo_ecalloc(1, sizeof(struct sudo_ldap_handle)); + handle = calloc(1, sizeof(struct sudo_ldap_handle)); + if (handle == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + rc = -1; + goto done; + } handle->ld = ld; /* handle->result = NULL; */ /* handle->username = NULL; */ @@ -2936,7 +3082,7 @@ struct sudo_ldap_handle *handle = nss->handle; struct timeval tv, *tvp = NULL; LDAP *ld; - LDAPMessage *entry, *result; + LDAPMessage *entry, *result = NULL; char *filt; int rc; debug_decl(sudo_ldap_setdefs, SUDOERS_DEBUG_LDAP) @@ -2946,6 +3092,10 @@ ld = handle->ld; filt = sudo_ldap_build_default_filter(); + if (filt == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_int(-1); + } DPRINTF1("Looking for cn=defaults: %s", filt); STAILQ_FOREACH(base, &ldap_conf.base, entries) { @@ -2954,21 +3104,27 @@ tv.tv_usec = 0; tvp = &tv; } + ldap_msgfree(result); result = NULL; rc = ldap_search_ext_s(ld, base->val, LDAP_SCOPE_SUBTREE, filt, NULL, 0, NULL, NULL, tvp, 0, &result); if (rc == LDAP_SUCCESS && (entry = ldap_first_entry(ld, result))) { DPRINTF1("found:%s", ldap_get_dn(ld, entry)); - sudo_ldap_parse_options(ld, entry); + if (!sudo_ldap_parse_options(ld, entry)) { + rc = -1; + goto done; + } } else { DPRINTF1("no default options found in %s", base->val); } - if (result) - ldap_msgfree(result); } - sudo_efree(filt); + rc = 0; - debug_return_int(0); +done: + ldap_msgfree(result); + free(filt); + + debug_return_int(rc); } /* @@ -2980,7 +3136,8 @@ struct sudo_ldap_handle *handle = nss->handle; LDAP *ld; LDAPMessage *entry; - int i, rc, setenv_implied; + int rc, setenv_implied; + unsigned int i; struct ldap_result *lres = NULL; debug_decl(sudo_ldap_lookup, SUDOERS_DEBUG_LDAP) @@ -2990,10 +3147,12 @@ /* Fetch list of sudoRole entries that match user and host. */ lres = sudo_ldap_result_get(nss, sudo_user.pw); + if (lres == NULL) + debug_return_int(ret); /* - * The following queries are only determine whether or not a - * password is required, so the order of the entries doesn't matter. + * The following queries only determine whether or not a password + * is required, so the order of the entries doesn't matter. */ if (pwflag) { int doauth = UNSPEC; @@ -3005,18 +3164,18 @@ for (i = 0; i < lres->nentries; i++) { entry = lres->entries[i].entry; if ((pwcheck == any && doauth != false) || - (pwcheck == all && doauth == false)) { - doauth = sudo_ldap_check_bool(ld, entry, "authenticate"); + (pwcheck == all && doauth != true)) { + doauth = !!sudo_ldap_check_bool(ld, entry, "authenticate"); } /* Only check the command when listing another user. */ if (user_uid == 0 || list_pw == NULL || user_uid == list_pw->pw_uid || - sudo_ldap_check_command(ld, entry, NULL)) { + sudo_ldap_check_command(ld, entry, NULL) == true) { matched = true; break; } } - if (matched || user_uid == 0) { + if (matched == true || user_uid == 0) { SET(ret, VALIDATE_SUCCESS); CLR(ret, VALIDATE_FAILURE); if (def_authenticate) { @@ -3056,16 +3215,19 @@ /* Apply entry-specific options. */ if (setenv_implied) def_setenv = true; - sudo_ldap_parse_options(ld, entry); + if (sudo_ldap_parse_options(ld, entry)) { #ifdef HAVE_SELINUX - /* Set role and type if not specified on command line. */ - if (user_role == NULL) - user_role = def_role; - if (user_type == NULL) - user_type = def_type; + /* Set role and type if not specified on command line. */ + if (user_role == NULL) + user_role = def_role; + if (user_type == NULL) + user_type = def_type; #endif /* HAVE_SELINUX */ - SET(ret, VALIDATE_SUCCESS); - CLR(ret, VALIDATE_FAILURE); + SET(ret, VALIDATE_SUCCESS); + CLR(ret, VALIDATE_FAILURE); + } else { + SET(ret, VALIDATE_ERROR); + } } else { SET(ret, VALIDATE_FAILURE); CLR(ret, VALIDATE_SUCCESS); @@ -3076,17 +3238,17 @@ done: DPRINTF1("done with LDAP searches"); - DPRINTF1("user_matches=%d", lres->user_matches); - DPRINTF1("host_matches=%d", lres->host_matches); + DPRINTF1("user_matches=%s", lres->user_matches ? "true" : "false"); + DPRINTF1("host_matches=%s", lres->host_matches ? "true" : "false"); if (!ISSET(ret, VALIDATE_SUCCESS)) { /* No matching entries. */ if (pwflag && list_pw == NULL) SET(ret, FLAG_NO_CHECK); } - if (lres->user_matches) + if (pwflag || lres->user_matches) CLR(ret, FLAG_NO_USER); - if (lres->host_matches) + if (pwflag || lres->host_matches) CLR(ret, FLAG_NO_HOST); DPRINTF1("sudo_ldap_lookup(%d)=0x%02x", pwflag, ret); @@ -3153,9 +3315,13 @@ * of 100 entries to save on allocation time. */ if (++lres->nentries > lres->allocated_entries) { - lres->allocated_entries += ALLOCATION_INCREMENT; - lres->entries = sudo_ereallocarray(lres->entries, lres->allocated_entries, - sizeof(lres->entries[0])); + int allocated_entries = lres->allocated_entries + ALLOCATION_INCREMENT; + struct ldap_entry_wrapper *entries = reallocarray(lres->entries, + allocated_entries, sizeof(lres->entries[0])); + if (entries == NULL) + debug_return_ptr(NULL); + lres->allocated_entries = allocated_entries; + lres->entries = entries; } /* Fill in the new entry and return it. */ @@ -3177,10 +3343,7 @@ if (handle->result != NULL) { DPRINTF1("removing reusable search result"); sudo_ldap_result_free(handle->result); - if (handle->username) { - sudo_efree(handle->username); - handle->username = NULL; - } + handle->username = NULL; handle->grlist = NULL; handle->result = NULL; } @@ -3240,6 +3403,10 @@ * an ldap_result object. The results are then sorted by sudoOrder. */ lres = sudo_ldap_result_alloc(); + if (lres == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_ptr(NULL); + } for (pass = 0; pass < 2; pass++) { filt = pass ? sudo_ldap_build_pass2() : sudo_ldap_build_pass1(ld, pw); if (filt != NULL) { @@ -3256,36 +3423,58 @@ rc = ldap_search_ext_s(ld, base->val, LDAP_SCOPE_SUBTREE, filt, NULL, 0, NULL, NULL, tvp, 0, &result); if (rc != LDAP_SUCCESS) { - DPRINTF1("nothing found for '%s'", filt); + DPRINTF1("ldap search pass %d failed: %s", pass + 1, + ldap_err2string(rc)); continue; } - lres->user_matches = true; - /* Add the seach result to list of search results. */ + /* Add the search result to list of search results. */ DPRINTF1("adding search result"); - sudo_ldap_result_add_search(lres, ld, result); + if (sudo_ldap_result_add_search(lres, ld, result) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, + U_("unable to allocate memory")); + free(filt); + sudo_ldap_result_free(lres); + debug_return_ptr(NULL); + } LDAP_FOREACH(entry, ld, result) { - if ((!pass || - sudo_ldap_check_non_unix_group(ld, entry, pw)) && - sudo_ldap_check_host(ld, entry)) { - lres->host_matches = true; - sudo_ldap_result_add_entry(lres, entry); + /* Check user or non-unix group. */ + if (pass && !sudo_ldap_check_non_unix_group(ld, entry, pw)) + continue; + lres->user_matches = true; + /* Check host. */ + if (!sudo_ldap_check_host(ld, entry, pw)) + continue; + lres->host_matches = true; + if (sudo_ldap_result_add_entry(lres, entry) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, + U_("unable to allocate memory")); + free(filt); + sudo_ldap_result_free(lres); + debug_return_ptr(NULL); } } DPRINTF1("result now has %d entries", lres->nentries); } - sudo_efree(filt); + free(filt); + } else if (errno != ENOENT) { + /* Out of memory? */ + sudo_ldap_result_free(lres); + debug_return_ptr(NULL); } } /* Sort the entries by the sudoOrder attribute. */ - DPRINTF1("sorting remaining %d entries", lres->nentries); - qsort(lres->entries, lres->nentries, sizeof(lres->entries[0]), - ldap_entry_compare); + if (lres->nentries != 0) { + DPRINTF1("sorting remaining %d entries", lres->nentries); + qsort(lres->entries, lres->nentries, sizeof(lres->entries[0]), + ldap_entry_compare); + } /* Store everything in the sudo_nss handle. */ + /* XXX - store pw and take a reference to it. */ handle->result = lres; - handle->username = sudo_estrdup(pw->pw_name); + handle->username = pw->pw_name; handle->grlist = user_group_list; debug_return_ptr(lres); @@ -3311,7 +3500,7 @@ } /* Free the handle container. */ - sudo_efree(nss->handle); + free(nss->handle); nss->handle = NULL; } debug_return_int(0); @@ -3336,30 +3525,42 @@ static struct ldap_result * sudo_ldap_result_from_search(LDAP *ldap, LDAPMessage *searchresult) { + struct ldap_search_result *last; + struct ldap_result *result; + LDAPMessage *entry; + /* * An ldap_result is built from several search results, which are * organized in a list. The head of the list is maintained in the * ldap_result structure, together with the wrappers that point * to individual entries, this has to be initialized first. */ - struct ldap_result *result = sudo_ldap_result_alloc(); + result = sudo_ldap_result_alloc(); + if (result == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_ptr(NULL); + } /* * Build a new list node for the search result, this creates the * list node. */ - struct ldap_search_result *last = sudo_ldap_result_add_search(result, - ldap, searchresult); + last = sudo_ldap_result_add_search(result, ldap, searchresult); /* * Now add each entry in the search result to the array of of entries * in the ldap_result object. */ - LDAPMessage *entry; LDAP_FOREACH(entry, last->ldap, last->searchresult) { - sudo_ldap_result_add_entry(result, entry); + if (sudo_ldap_result_add_entry(result, entry) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + sudo_ldap_result_free(result); + result = NULL; + break; + } } - DPRINTF1("sudo_ldap_result_from_search: %d entries found", result->nentries); + DPRINTF1("sudo_ldap_result_from_search: %d entries found", + result ? result->nentries : -1); return result; } #endif diff -Nru sudo-1.8.12/plugins/sudoers/linux_audit.c sudo-1.8.16/plugins/sudoers/linux_audit.c --- sudo-1.8.12/plugins/sudoers/linux_audit.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/linux_audit.c 2015-10-31 23:35:00.000000000 +0000 @@ -16,16 +16,11 @@ #include +#ifdef HAVE_LINUX_AUDIT + #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #include #include #include @@ -76,7 +71,11 @@ /* Convert argv to a flat string. */ for (size = 0, av = argv; *av != NULL; av++) size += strlen(*av) + 1; - command = cp = sudo_emalloc(size); + command = cp = malloc(size); + if (command == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto done; + } for (av = argv; *av != NULL; av++) { n = strlcpy(cp, *av, size - (cp - command)); if (n >= size - (cp - command)) { @@ -99,7 +98,9 @@ rc = 0; done: - sudo_efree(command); + free(command); debug_return_int(rc); } + +#endif /* HAVE_LINUX_AUDIT */ diff -Nru sudo-1.8.12/plugins/sudoers/linux_audit.h sudo-1.8.16/plugins/sudoers/linux_audit.h --- sudo-1.8.12/plugins/sudoers/linux_audit.h 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/linux_audit.h 2015-10-31 23:35:00.000000000 +0000 @@ -14,9 +14,9 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _SUDOERS_LINUX_AUDIT_H -#define _SUDOERS_LINUX_AUDIT_H +#ifndef SUDOERS_LINUX_AUDIT_H +#define SUDOERS_LINUX_AUDIT_H int linux_audit_command(char *argv[], int result); -#endif /* _SUDOERS_LINUX_AUDIT_H */ +#endif /* SUDOERS_LINUX_AUDIT_H */ diff -Nru sudo-1.8.12/plugins/sudoers/locale.c sudo-1.8.16/plugins/sudoers/locale.c --- sudo-1.8.12/plugins/sudoers/locale.c 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/locale.c 2015-10-31 23:35:00.000000000 +0000 @@ -18,14 +18,7 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ @@ -43,7 +36,6 @@ #include "sudo_compat.h" #include "sudo_fatal.h" -#include "sudo_alloc.h" #include "logging.h" static int current_locale = SUDOERS_LOCALE_USER; @@ -56,17 +48,20 @@ return current_locale; } -void +bool sudoers_initlocale(const char *ulocale, const char *slocale) { if (ulocale != NULL) { - sudo_efree(user_locale); - user_locale = sudo_estrdup(ulocale); + free(user_locale); + if ((user_locale = strdup(ulocale)) == NULL) + return false; } if (slocale != NULL) { - sudo_efree(sudoers_locale); - sudoers_locale = sudo_estrdup(slocale); + free(sudoers_locale); + if ((sudoers_locale = strdup(slocale)) == NULL) + return false; } + return true; } /* @@ -87,8 +82,13 @@ if (current_locale != SUDOERS_LOCALE_USER) { current_locale = SUDOERS_LOCALE_USER; res = setlocale(LC_ALL, user_locale ? user_locale : ""); - if (res != NULL && user_locale == NULL) - user_locale = sudo_estrdup(setlocale(LC_ALL, NULL)); + if (res != NULL && user_locale == NULL) { + user_locale = setlocale(LC_ALL, NULL); + if (user_locale != NULL) + user_locale = strdup(user_locale); + if (user_locale == NULL) + res = NULL; + } } break; case SUDOERS_LOCALE_SUDOERS: @@ -99,9 +99,10 @@ res = setlocale(LC_ALL, sudoers_locale ? sudoers_locale : "C"); if (res == NULL && sudoers_locale != NULL) { if (strcmp(sudoers_locale, "C") != 0) { - sudo_efree(sudoers_locale); - sudoers_locale = sudo_estrdup("C"); - res = setlocale(LC_ALL, "C"); + free(sudoers_locale); + sudoers_locale = strdup("C"); + if (sudoers_locale != NULL) + res = setlocale(LC_ALL, "C"); } } } @@ -110,30 +111,10 @@ return res ? true : false; } -#ifdef HAVE_LIBINTL_H -char * -sudo_warn_gettext_v1(const char *msgid) -{ - int warning_locale; - char *msg; - - sudoers_setlocale(SUDOERS_LOCALE_USER, &warning_locale); - msg = gettext(msgid); - sudoers_setlocale(warning_locale, NULL); - - return msg; -} -#endif /* HAVE_LIBINTL_H */ - -char * -sudo_warn_strerror_v1(int errnum) +bool +sudoers_warn_setlocale(bool restore, int *cookie) { - int warning_locale; - char *errmsg; - - sudoers_setlocale(SUDOERS_LOCALE_USER, &warning_locale); - errmsg = strerror(errnum); - sudoers_setlocale(warning_locale, NULL); - - return errmsg; + if (restore) + return sudoers_setlocale(*cookie, NULL); + return sudoers_setlocale(SUDOERS_LOCALE_USER, cookie); } diff -Nru sudo-1.8.12/plugins/sudoers/logging.c sudo-1.8.16/plugins/sudoers/logging.c --- sudo-1.8.12/plugins/sudoers/logging.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/logging.c 2015-10-31 23:35:25.000000000 +0000 @@ -29,23 +29,14 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #ifdef HAVE_NL_LANGINFO # include #endif /* HAVE_NL_LANGINFO */ @@ -63,7 +54,7 @@ #define INCORRECT_PASSWORD_ATTEMPT ((char *)0x01) static void do_syslog(int, char *); -static void do_logfile(char *); +static bool do_logfile(const char *); static bool send_mail(const char *fmt, ...); static bool should_mail(int); static void mysyslog(int, const char *, ...); @@ -77,37 +68,18 @@ * own nefarious purposes and may call openlog(3) and closelog(3). * Note that because we don't want to assume that all systems have * vsyslog(3) (HP-UX doesn't) "%m" will not be expanded. - * Sadly this is a maze of #ifdefs. */ static void mysyslog(int pri, const char *fmt, ...) { -#ifdef BROKEN_SYSLOG - int i; -#endif char buf[MAXSYSLOGLEN+1]; va_list ap; debug_decl(mysyslog, SUDOERS_DEBUG_LOGGING) va_start(ap, fmt); -#ifdef LOG_NFACILITIES openlog("sudo", 0, def_syslog); -#else - openlog("sudo", 0); -#endif vsnprintf(buf, sizeof(buf), fmt, ap); -#ifdef BROKEN_SYSLOG - /* - * Some versions of syslog(3) don't guarantee success and return - * an int (notably HP-UX < 10.0). So, if at first we don't succeed, - * try, try again... - */ - for (i = 0; i < MAXSYSLOGTRIES; i++) - if (syslog(pri, "%s", buf) == 0) - break; -#else syslog(pri, "%s", buf); -#endif /* BROKEN_SYSLOG */ va_end(ap); closelog(); debug_return; @@ -168,13 +140,13 @@ debug_return; } -static void -do_logfile(char *msg) +static bool +do_logfile(const char *msg) { char *full_line; - size_t len; mode_t oldmask; - int oldlocale; + bool rval = false; + int len, oldlocale; FILE *fp; debug_decl(do_logfile, SUDOERS_DEBUG_LOGGING) @@ -193,48 +165,45 @@ const char *timestr = get_timestr(time(NULL), def_log_year); if (timestr == NULL) timestr = "invalid date"; - if ((size_t)def_loglinelen < sizeof(LOG_INDENT)) { - /* Don't pretty-print long log file lines (hard to grep) */ - if (def_log_host) { - (void) fprintf(fp, "%s : %s : HOST=%s : %s\n", - timestr, user_name, user_srunhost, msg); - } else { - (void) fprintf(fp, "%s : %s : %s\n", timestr, user_name, msg); - } + if (def_log_host) { + len = asprintf(&full_line, "%s : %s : HOST=%s : %s", + timestr, user_name, user_srunhost, msg); } else { - if (def_log_host) { - len = sudo_easprintf(&full_line, "%s : %s : HOST=%s : %s", - timestr, user_name, user_srunhost, msg); + len = asprintf(&full_line, "%s : %s : %s", + timestr, user_name, msg); + } + if (len != -1) { + if ((size_t)def_loglinelen < sizeof(LOG_INDENT)) { + /* Don't pretty-print long log file lines (hard to grep). */ + (void) fputs(full_line, fp); } else { - len = sudo_easprintf(&full_line, "%s : %s : %s", - timestr, user_name, msg); + /* Write line with word wrap around def_loglinelen chars. */ + writeln_wrap(fp, full_line, len, def_loglinelen); } - - /* - * Print out full_line with word wrap around def_loglinelen chars. - */ - writeln_wrap(fp, full_line, len, def_loglinelen); - sudo_efree(full_line); + free(full_line); + (void) fflush(fp); + if (!ferror(fp)) + rval = true; + } else { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); } - (void) fflush(fp); - (void) sudo_lock_file(fileno(fp), SUDO_UNLOCK); (void) fclose(fp); } sudoers_setlocale(oldlocale, NULL); - debug_return; + debug_return_bool(rval); } /* * Log, audit and mail the denial message, optionally informing the user. */ -void +bool log_denial(int status, bool inform_user) { const char *message; char *logline; int oldlocale; - bool uid_changed; + bool uid_changed, rval = true; debug_decl(log_denial, SUDOERS_DEBUG_LOGGING) /* Handle auditing first (audit_failure() handles the locale itself). */ @@ -256,7 +225,7 @@ logline = new_logline(message, 0); if (logline == NULL) - debug_return; + debug_return_bool(false); /* Become root if we are not already. */ uid_changed = set_perms(PERM_ROOT); @@ -269,13 +238,15 @@ */ if (def_syslog) do_syslog(def_syslog_badpri, logline); - if (def_logfile) - do_logfile(logline); + if (def_logfile && !do_logfile(logline)) + rval = false; - if (uid_changed) - restore_perms(); + if (uid_changed) { + if (!restore_perms()) + rval = false; /* XXX - return -1 instead? */ + } - sudo_efree(logline); + free(logline); /* Restore locale. */ sudoers_setlocale(oldlocale, NULL); @@ -305,23 +276,23 @@ } sudoers_setlocale(oldlocale, NULL); } - debug_return; + debug_return_bool(rval); } /* * Log and audit that user was not allowed to run the command. */ -void +bool log_failure(int status, int flags) { - bool inform_user = true; + bool rval, inform_user = true; debug_decl(log_failure, SUDOERS_DEBUG_LOGGING) /* The user doesn't always get to see the log message (path info). */ if (!ISSET(status, FLAG_NO_USER | FLAG_NO_HOST) && def_path_info && (flags == NOT_FOUND_DOT || flags == NOT_FOUND)) inform_user = false; - log_denial(status, inform_user); + rval = log_denial(status, inform_user); if (!inform_user) { /* @@ -337,16 +308,17 @@ sudo_warnx(U_("ignoring `%s' found in '.'\nUse `sudo ./%s' if this is the `%s' you wish to run."), user_cmnd, user_cmnd, user_cmnd); } - debug_return; + debug_return_bool(rval); } /* * Log and audit that user was not able to authenticate themselves. */ -void +bool log_auth_failure(int status, unsigned int tries) { int flags = 0; + bool rval = true; debug_decl(log_auth_failure, SUDOERS_DEBUG_LOGGING) /* Handle auditing first. */ @@ -364,7 +336,7 @@ SET(flags, SLOG_SEND_MAIL); } else { /* Command denied, auth failed; make sure we don't send mail twice. */ - if ((def_mail_badpass || def_mail_always) && !should_mail(status)) + if (def_mail_badpass && !should_mail(status)) SET(flags, SLOG_SEND_MAIL); /* Don't log the bad password message, we'll log a denial instead. */ SET(flags, SLOG_NO_LOG); @@ -374,32 +346,34 @@ * If sudoers denied the command we'll log that separately. */ if (ISSET(status, FLAG_BAD_PASSWORD)) - log_warningx(flags, INCORRECT_PASSWORD_ATTEMPT, tries); + rval = log_warningx(flags, INCORRECT_PASSWORD_ATTEMPT, tries); else if (ISSET(status, FLAG_NON_INTERACTIVE)) - log_warningx(flags, N_("a password is required")); + rval = log_warningx(flags, N_("a password is required")); - debug_return; + debug_return_bool(rval); } /* * Log and potentially mail the allowed command. */ -void +bool log_allowed(int status) { char *logline; int oldlocale; - bool uid_changed; + bool uid_changed, rval = true; debug_decl(log_allowed, SUDOERS_DEBUG_LOGGING) /* Log and mail messages should be in the sudoers locale. */ sudoers_setlocale(SUDOERS_LOCALE_SUDOERS, &oldlocale); - logline = new_logline(NULL, 0); + if ((logline = new_logline(NULL, 0)) == NULL) + debug_return_bool(false); /* Become root if we are not already. */ uid_changed = set_perms(PERM_ROOT); + /* XXX - return value */ if (should_mail(status)) send_mail("%s", logline); /* send mail based on status */ @@ -408,34 +382,36 @@ */ if (def_syslog) do_syslog(def_syslog_goodpri, logline); - if (def_logfile) - do_logfile(logline); + if (def_logfile && !do_logfile(logline)) + rval = false; - if (uid_changed) - restore_perms(); + if (uid_changed) { + if (!restore_perms()) + rval = false; /* XXX - return -1 instead? */ + } - sudo_efree(logline); + free(logline); sudoers_setlocale(oldlocale, NULL); - debug_return; + debug_return_bool(rval); } /* * Perform logging for log_warning()/log_warningx(). */ -static void +static bool vlog_warning(int flags, const char *fmt, va_list ap) { int oldlocale, serrno = errno; char *logline, *message; - bool uid_changed; + bool uid_changed, rval = true; va_list ap2; + int len; debug_decl(vlog_error, SUDOERS_DEBUG_LOGGING) /* Need extra copy of ap for sudo_vwarn()/sudo_vwarnx() below. */ - if (!ISSET(flags, SLOG_NO_STDERR)) - va_copy(ap2, ap); + va_copy(ap2, ap); /* Log messages should be in the sudoers locale. */ sudoers_setlocale(SUDOERS_LOCALE_SUDOERS, &oldlocale); @@ -443,10 +419,14 @@ /* Expand printf-style format + args (with a special case). */ if (fmt == INCORRECT_PASSWORD_ATTEMPT) { unsigned int tries = va_arg(ap, unsigned int); - sudo_easprintf(&message, ngettext("%u incorrect password attempt", + len = asprintf(&message, ngettext("%u incorrect password attempt", "%u incorrect password attempts", tries), tries); } else { - sudo_evasprintf(&message, _(fmt), ap); + len = vasprintf(&message, _(fmt), ap); + } + if (len == -1) { + rval = false; + goto done; } /* Log to debug file. */ @@ -462,7 +442,11 @@ logline = message; } else { logline = new_logline(message, ISSET(flags, SLOG_USE_ERRNO) ? serrno : 0); - sudo_efree(message); + free(message); + if (logline == NULL) { + rval = false; + goto done; + } } /* Become root if we are not already. */ @@ -470,6 +454,7 @@ /* * Send a copy of the error via mail. + * XXX - return value */ if (ISSET(flags, SLOG_SEND_MAIL)) send_mail("%s", logline); @@ -480,65 +465,68 @@ if (!ISSET(flags, SLOG_NO_LOG)) { if (def_syslog) do_syslog(def_syslog_badpri, logline); - if (def_logfile) - do_logfile(logline); + if (def_logfile && !do_logfile(logline)) + rval = false; } if (uid_changed) restore_perms(); - sudo_efree(logline); - - sudoers_setlocale(oldlocale, NULL); + free(logline); /* * Tell the user (in their locale). */ if (!ISSET(flags, SLOG_NO_STDERR)) { - sudoers_setlocale(SUDOERS_LOCALE_USER, &oldlocale); + sudoers_setlocale(SUDOERS_LOCALE_USER, NULL); if (fmt == INCORRECT_PASSWORD_ATTEMPT) { unsigned int tries = va_arg(ap2, unsigned int); sudo_warnx_nodebug(ngettext("%u incorrect password attempt", "%u incorrect password attempts", tries), tries); } else { + errno = serrno; if (ISSET(flags, SLOG_USE_ERRNO)) sudo_vwarn_nodebug(_(fmt), ap2); else sudo_vwarnx_nodebug(_(fmt), ap2); } - sudoers_setlocale(oldlocale, NULL); - va_end(ap2); } - debug_return; +done: + va_end(ap2); + sudoers_setlocale(oldlocale, NULL); + + debug_return_bool(rval); } -void +bool log_warning(int flags, const char *fmt, ...) { va_list ap; + bool rval; debug_decl(log_error, SUDOERS_DEBUG_LOGGING) /* Log the error. */ va_start(ap, fmt); - vlog_warning(flags|SLOG_USE_ERRNO, fmt, ap); + rval = vlog_warning(flags|SLOG_USE_ERRNO, fmt, ap); va_end(ap); - debug_return; + debug_return_bool(rval); } -void +bool log_warningx(int flags, const char *fmt, ...) { va_list ap; + bool rval; debug_decl(log_error, SUDOERS_DEBUG_LOGGING) /* Log the error. */ va_start(ap, fmt); - vlog_warning(flags, fmt, ap); + rval = vlog_warning(flags, fmt, ap); va_end(ap); - debug_return; + debug_return_bool(rval); } #define MAX_MAILFLAGS 63 @@ -575,14 +563,14 @@ /* Make sure the mailer exists and is a regular file. */ if (stat(def_mailerpath, &sb) != 0 || !S_ISREG(sb.st_mode)) - debug_return_int(false); + debug_return_bool(false); /* Fork and return, child will daemonize. */ switch (pid = sudo_debug_fork()) { case -1: /* Error. */ sudo_warn(U_("unable to fork")); - debug_return_int(false); + debug_return_bool(false); break; case 0: /* Child. */ @@ -603,9 +591,13 @@ break; default: /* Parent. */ - do { + for (;;) { rv = waitpid(pid, &status, 0); - } while (rv == -1 && errno == EINTR); + if (rv == -1 && errno != EINTR) + break; + if (rv != -1 && !WIFSTOPPED(status)) + break; + } return true; /* not debug */ } @@ -653,7 +645,7 @@ break; case 0: { - char *argv[MAX_MAILFLAGS + 1]; + char *last, *argv[MAX_MAILFLAGS + 1]; char *mflags, *mpath = def_mailerpath; int i; @@ -670,17 +662,20 @@ (void) close(pfd[1]); /* Build up an argv based on the mailer path and flags */ - mflags = sudo_estrdup(def_mailerflags); + if ((mflags = strdup(def_mailerflags)) == NULL) { + mysyslog(LOG_ERR, _("unable to allocate memory")); + _exit(127); + } if ((argv[0] = strrchr(mpath, '/'))) argv[0]++; else argv[0] = mpath; i = 1; - if ((p = strtok(mflags, " \t"))) { + if ((p = strtok_r(mflags, " \t", &last))) { do { argv[i] = p; - } while (++i < MAX_MAILFLAGS && (p = strtok(NULL, " \t"))); + } while (++i < MAX_MAILFLAGS && (p = strtok_r(NULL, " \t", &last))); } argv[i] = NULL; @@ -741,9 +736,13 @@ fputs("\n\n", mail); fclose(mail); - do { - rv = waitpid(pid, &status, 0); - } while (rv == -1 && errno == EINTR); + for (;;) { + rv = waitpid(pid, &status, 0); + if (rv == -1 && errno != EINTR) + break; + if (rv != -1 && !WIFSTOPPED(status)) + break; + } sudo_debug_exit(__func__, __FILE__, __LINE__, sudo_debug_subsys); _exit(0); } @@ -756,11 +755,8 @@ { debug_decl(should_mail, SUDOERS_DEBUG_LOGGING) - /* Never send mail about the "sudo -l" and "sudo -v" pseudo-commands. */ - if (ISSET(sudo_mode, (MODE_VALIDATE|MODE_CHECK|MODE_LIST))) - debug_return_bool(false); - - debug_return_bool(def_mail_always || + debug_return_bool(def_mail_always || ISSET(status, VALIDATE_ERROR) || + (def_mail_all_cmnds && ISSET(sudo_mode, (MODE_RUN|MODE_EDIT))) || (def_mail_no_user && ISSET(status, FLAG_NO_USER)) || (def_mail_no_host && ISSET(status, FLAG_NO_HOST)) || (def_mail_no_perms && !ISSET(status, VALIDATE_SUCCESS))); @@ -788,7 +784,7 @@ static char * new_logline(const char *message, int serrno) { - char *line, *errstr = NULL, *evstr = NULL; + char *line = NULL, *errstr = NULL, *evstr = NULL; #ifndef SUDOERS_NO_SEQ char sessid[7]; #endif @@ -837,13 +833,16 @@ for (ep = sudo_user.env_vars; *ep != NULL; ep++) evlen += strlen(*ep) + 1; - evstr = sudo_emalloc(evlen); - evstr[0] = '\0'; - for (ep = sudo_user.env_vars; *ep != NULL; ep++) { - strlcat(evstr, *ep, evlen); - strlcat(evstr, " ", evlen); /* NOTE: last one will fail */ + if (evlen != 0) { + if ((evstr = malloc(evlen)) == NULL) + goto oom; + evstr[0] = '\0'; + for (ep = sudo_user.env_vars; *ep != NULL; ep++) { + strlcat(evstr, *ep, evlen); + strlcat(evstr, " ", evlen); /* NOTE: last one will fail */ + } + len += sizeof(LL_ENV_STR) + 2 + evlen; } - len += sizeof(LL_ENV_STR) + 2 + evlen; } if (user_cmnd != NULL) { /* Note: we log "sudo -l command arg ..." as "list command arg ..." */ @@ -857,7 +856,8 @@ /* * Allocate and build up the line. */ - line = sudo_emalloc(++len); + if ((line = malloc(++len)) == NULL) + goto oom; line[0] = '\0'; if (message != NULL) { @@ -901,7 +901,8 @@ strlcat(line, evstr, len) >= len || strlcat(line, " ; ", len) >= len) goto toobig; - sudo_efree(evstr); + free(evstr); + evstr = NULL; } if (user_cmnd != NULL) { if (strlcat(line, LL_CMND_STR, len) >= len) @@ -918,7 +919,13 @@ } debug_return_str(line); +oom: + free(evstr); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_str(NULL); toobig: + free(evstr); + free(line); sudo_warnx(U_("internal error, %s overflow"), __func__); debug_return_str(NULL); } diff -Nru sudo-1.8.12/plugins/sudoers/logging.h sudo-1.8.16/plugins/sudoers/logging.h --- sudo-1.8.12/plugins/sudoers/logging.h 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/logging.h 2015-10-31 23:35:00.000000000 +0000 @@ -15,8 +15,8 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _SUDOERS_LOGGING_H -#define _SUDOERS_LOGGING_H +#ifndef SUDOERS_LOGGING_H +#define SUDOERS_LOGGING_H #include #ifdef __STDC__ @@ -58,23 +58,22 @@ */ #define LOG_INDENT " " -#ifndef _SUDO_MAIN /* XXX - needed for auditing */ extern int NewArgc; extern char **NewArgv; -#endif +bool sudoers_warn_setlocale(bool restore, int *cookie); bool sudoers_setlocale(int newlocale, int *prevlocale); int sudoers_getlocale(void); int audit_success(int argc, char *argv[]); int audit_failure(int argc, char *argv[], char const *const fmt, ...) __printflike(3, 4); -void log_allowed(int status); -void log_auth_failure(int status, unsigned int tries); -void log_denial(int status, bool inform_user); -void log_failure(int status, int flags); -void log_warning(int flags, const char *fmt, ...) __printflike(2, 3); -void log_warningx(int flags, const char *fmt, ...) __printflike(2, 3); -void sudoers_initlocale(const char *ulocale, const char *slocale); +bool log_allowed(int status); +bool log_auth_failure(int status, unsigned int tries); +bool log_denial(int status, bool inform_user); +bool log_failure(int status, int flags); +bool log_warning(int flags, const char *fmt, ...) __printflike(2, 3); +bool log_warningx(int flags, const char *fmt, ...) __printflike(2, 3); +bool sudoers_initlocale(const char *ulocale, const char *slocale); void writeln_wrap(FILE *fp, char *line, size_t len, size_t maxlen); -#endif /* _SUDOERS_LOGGING_H */ +#endif /* SUDOERS_LOGGING_H */ diff -Nru sudo-1.8.12/plugins/sudoers/logwrap.c sudo-1.8.16/plugins/sudoers/logwrap.c --- sudo-1.8.12/plugins/sudoers/logwrap.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/logwrap.c 2015-10-31 23:35:00.000000000 +0000 @@ -18,14 +18,7 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ diff -Nru sudo-1.8.12/plugins/sudoers/Makefile.in sudo-1.8.16/plugins/sudoers/Makefile.in --- sudo-1.8.12/plugins/sudoers/Makefile.in 2015-01-30 19:53:59.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/Makefile.in 2016-03-17 16:13:11.000000000 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 1996, 1998-2005, 2007-2014 +# Copyright (c) 1996, 1998-2005, 2007-2015 # Todd C. Miller # # Permission to use, copy, modify, and distribute this software for any @@ -51,15 +51,22 @@ # Libraries LT_LIBS = $(top_builddir)/lib/util/libsudo_util.la -LIBS = $(LT_LIBS) @LIBINTL@ +LIBS = $(LT_LIBS) NET_LIBS = @NET_LIBS@ SUDOERS_LIBS = @SUDOERS_LIBS@ @AFS_LIBS@ @GETGROUPS_LIB@ $(LIBS) $(NET_LIBS) @ZLIB@ @LIBMD@ REPLAY_LIBS = @REPLAY_LIBS@ @ZLIB@ VISUDO_LIBS = $(NET_LIBS) @LIBMD@ TESTSUDOERS_LIBS = $(NET_LIBS) @LIBMD@ +# C preprocessor defines +CPPDEFS = -DLIBDIR=\"$(libdir)\" -DLOCALEDIR=\"$(localedir)\" \ + -D_PATH_SUDOERS=\"$(sudoersdir)/sudoers\" \ + -DSUDOERS_UID=$(sudoers_uid) -DSUDOERS_GID=$(sudoers_gid) \ + -DSUDOERS_MODE=$(sudoers_mode) + # C preprocessor flags -CPPFLAGS = -I$(incdir) -I$(top_builddir) -I$(devdir) -I$(srcdir) -I$(top_srcdir) -DLIBDIR=\"$(libdir)\" @CPPFLAGS@ +CPPFLAGS = -I$(incdir) -I$(top_builddir) -I$(devdir) -I$(srcdir) \ + -I$(top_srcdir) $(CPPDEFS) @CPPFLAGS@ # Usually -O and/or -g CFLAGS = @CFLAGS@ @@ -68,6 +75,9 @@ LDFLAGS = @LDFLAGS@ LT_LDFLAGS = @SUDOERS_LDFLAGS@ @LT_LDFLAGS@ @LT_LDEXPORTS@ +# Flags to pass to libtool +LTFLAGS = + # PIE flags PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ @@ -79,6 +89,9 @@ # cppcheck options, usually set in the top-level Makefile CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +# splint options, usually set in the top-level Makefile +SPLINT_OPTS = -D__restrict= -checks + # Where to install things... prefix = @prefix@ exec_prefix = @exec_prefix@ @@ -118,11 +131,6 @@ sudoers_gid = @SUDOERS_GID@ sudoers_mode = @SUDOERS_MODE@ -# Pass in paths and uid/gid + OS dependent defines -DEFS = @OSDEFS@ -D_PATH_SUDOERS=\"$(sudoersdir)/sudoers\" \ - -DSUDOERS_UID=$(sudoers_uid) -DSUDOERS_GID=$(sudoers_gid) \ - -DSUDOERS_MODE=$(sudoers_mode) -DLOCALEDIR=\"$(localedir)\" - # Set to non-empty for development mode DEVEL = @DEVEL@ @@ -142,13 +150,13 @@ redblack.lo sudoers_debug.lo timestr.lo toke.lo \ toke_util.lo -SUDOERS_OBJS = $(AUTH_OBJS) boottime.lo check.lo env.lo find_path.lo \ - goodpath.lo group_plugin.lo interfaces.lo iolog.lo \ +SUDOERS_OBJS = $(AUTH_OBJS) boottime.lo check.lo editor.lo env.lo find_path.lo \ + gc.lo goodpath.lo group_plugin.lo interfaces.lo iolog.lo \ iolog_path.lo locale.lo logging.lo logwrap.lo parse.lo \ policy.lo prompt.lo set_perms.lo sudo_nss.lo sudoers.lo \ timestamp.lo @SUDOERS_OBJS@ -VISUDO_OBJS = find_path.o goodpath.o locale.o sudo_printf.o visudo.o \ +VISUDO_OBJS = editor.o find_path.o goodpath.o locale.o sudo_printf.o visudo.o \ visudo_json.o REPLAY_OBJS = getdate.o locale.o sudoreplay.o @@ -182,10 +190,10 @@ .SUFFIXES: .o .c .h .l .y .lo .c.o: - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $< + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $< .c.lo: - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $< + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $< $(shlib_map): $(shlib_exp) @$(AWK) 'BEGIN { print "{\n\tglobal:" } { print "\t\t"$$0";" } END { print "\tlocal:\n\t\t*;\n};" }' $(shlib_exp) > $@ @@ -202,49 +210,49 @@ (cd $(top_builddir) && ./config.status --file plugins/sudoers/Makefile) libparsesudoers.la: $(LIBPARSESUDOERS_OBJS) - $(LIBTOOL) --mode=link $(CC) -o $@ $(LIBPARSESUDOERS_OBJS) -no-install + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(LIBPARSESUDOERS_OBJS) -no-install sudoers.la: $(SUDOERS_OBJS) $(LT_LIBS) libparsesudoers.la @LT_LDDEP@ case "$(LT_LDFLAGS)" in \ *-no-install*) \ - $(LIBTOOL) @LT_STATIC@ --mode=link $(CC) $(LDFLAGS) $(LT_LDFLAGS) -o $@ $(SUDOERS_OBJS) libparsesudoers.la $(SUDOERS_LIBS) -module;; \ + $(LIBTOOL) $(LTFLAGS) @LT_STATIC@ --mode=link $(CC) $(LDFLAGS) $(LT_LDFLAGS) -o $@ $(SUDOERS_OBJS) libparsesudoers.la $(SUDOERS_LIBS) -module;; \ *) \ - $(LIBTOOL) @LT_STATIC@ --mode=link $(CC) $(LDFLAGS) $(SSP_LDFLAGS) $(LT_LDFLAGS) -o $@ $(SUDOERS_OBJS) libparsesudoers.la $(SUDOERS_LIBS) -module -avoid-version -rpath $(plugindir) -shrext .so;; \ + $(LIBTOOL) $(LTFLAGS) @LT_STATIC@ --mode=link $(CC) $(LDFLAGS) $(SSP_LDFLAGS) $(LT_LDFLAGS) -o $@ $(SUDOERS_OBJS) libparsesudoers.la $(SUDOERS_LIBS) -module -avoid-version -rpath $(plugindir) -shrext .so;; \ esac visudo: libparsesudoers.la $(VISUDO_OBJS) $(LT_LIBS) - $(LIBTOOL) --mode=link $(CC) -o $@ $(VISUDO_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) libparsesudoers.la $(LIBS) $(VISUDO_LIBS) + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(VISUDO_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) libparsesudoers.la $(LIBS) $(VISUDO_LIBS) sudoreplay: timestr.lo $(REPLAY_OBJS) $(LT_LIBS) - $(LIBTOOL) --mode=link $(CC) -o $@ $(REPLAY_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) timestr.lo $(LIBS) $(REPLAY_LIBS) + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(REPLAY_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) timestr.lo $(LIBS) $(REPLAY_LIBS) testsudoers: libparsesudoers.la $(TEST_OBJS) $(LT_LIBS) - $(LIBTOOL) --mode=link $(CC) -o $@ $(TEST_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) libparsesudoers.la $(LIBS) $(TESTSUDOERS_LIBS) + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(TEST_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) libparsesudoers.la $(LIBS) $(TESTSUDOERS_LIBS) check_addr: $(CHECK_ADDR_OBJS) $(LT_LIBS) - $(LIBTOOL) --mode=link $(CC) -o $@ $(CHECK_ADDR_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) $(NET_LIBS) + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(CHECK_ADDR_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) $(NET_LIBS) check_base64: $(CHECK_BASE64_OBJS) $(LT_LIBS) - $(LIBTOOL) --mode=link $(CC) -o $@ $(CHECK_BASE64_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(CHECK_BASE64_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) check_digest: $(CHECK_DIGEST_OBJS) $(LT_LIBS) - $(LIBTOOL) --mode=link $(CC) -o $@ $(CHECK_DIGEST_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) @LIBMD@ + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(CHECK_DIGEST_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) @LIBMD@ check_fill: $(CHECK_FILL_OBJS) $(LT_LIBS) - $(LIBTOOL) --mode=link $(CC) -o $@ $(CHECK_FILL_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(CHECK_FILL_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) check_hexchar: $(CHECK_HEXCHAR_OBJS) $(LT_LIBS) - $(LIBTOOL) --mode=link $(CC) -o $@ $(CHECK_HEXCHAR_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(CHECK_HEXCHAR_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) check_iolog_path: $(CHECK_IOLOG_PATH_OBJS) $(LT_LIBS) - $(LIBTOOL) --mode=link $(CC) -o $@ $(CHECK_IOLOG_PATH_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(CHECK_IOLOG_PATH_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) # We need to link check_symbols with -lpthread on HP-UX since LDAP uses threads check_symbols: $(CHECK_SYMBOLS_OBJS) $(LT_LIBS) - $(LIBTOOL) --mode=link $(CC) -o $@ $(CHECK_SYMBOLS_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) @SUDO_LIBS@ + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(CHECK_SYMBOLS_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) @SUDO_LIBS@ check_wrap: $(CHECK_WRAP_OBJS) $(LT_LIBS) - $(LIBTOOL) --mode=link $(CC) -o $@ $(CHECK_WRAP_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(CHECK_WRAP_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) GENERATED = gram.h gram.c toke.c def_data.c def_data.h getdate.c @@ -307,10 +315,11 @@ `echo $(DESTDIR)$(vardir)|$(SED) 's,/[^/]*$$,,'` $(INSTALL) -d $(INSTALL_OWNER) -m 0711 $(DESTDIR)$(rundir) $(INSTALL) -d $(INSTALL_OWNER) -m 0711 $(DESTDIR)$(vardir) + $(INSTALL) -d $(INSTALL_OWNER) -m 0700 $(DESTDIR)$(vardir)/lectured install-binaries: visudo sudoreplay install-dirs - INSTALL_BACKUP='~' $(LIBTOOL) --mode=install $(INSTALL) $(INSTALL_OWNER) -m 0755 sudoreplay $(DESTDIR)$(replaydir)/sudoreplay - INSTALL_BACKUP='~' $(LIBTOOL) --mode=install $(INSTALL) $(INSTALL_OWNER) -m 0755 visudo $(DESTDIR)$(visudodir)/visudo + INSTALL_BACKUP='~' $(LIBTOOL) $(LTFLAGS) --mode=install $(INSTALL) $(INSTALL_OWNER) -m 0755 sudoreplay $(DESTDIR)$(replaydir)/sudoreplay + INSTALL_BACKUP='~' $(LIBTOOL) $(LTFLAGS) --mode=install $(INSTALL) $(INSTALL_OWNER) -m 0755 visudo $(DESTDIR)$(visudodir)/visudo install-includes: @@ -321,7 +330,7 @@ case "$(LT_LDFLAGS)" in \ *-no-install*) ;; \ *) if [ X"$(shlib_enable)" = X"yes" ]; then \ - INSTALL_BACKUP='~' $(LIBTOOL) --mode=install $(INSTALL) $(INSTALL_OWNER) -m $(shlib_mode) sudoers.la $(DESTDIR)$(plugindir); \ + INSTALL_BACKUP='~' $(LIBTOOL) $(LTFLAGS) --mode=install $(INSTALL) $(INSTALL_OWNER) -m $(shlib_mode) sudoers.la $(DESTDIR)$(plugindir); \ fi;; \ esac @@ -331,7 +340,7 @@ $(INSTALL) $(INSTALL_OWNER) -m $(sudoers_mode) sudoers $(DESTDIR)$(sudoersdir)/sudoers uninstall: - -$(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(plugindir)/sudoers.la + -$(LIBTOOL) $(LTFLAGS) --mode=uninstall rm -f $(DESTDIR)$(plugindir)/sudoers.la -rm -f $(DESTDIR)$(replaydir)/sudoreplay \ $(DESTDIR)$(replaydir)/sudoreplay~ \ $(DESTDIR)$(visudodir)/visudo \ @@ -340,6 +349,9 @@ -cmp $(DESTDIR)$(sudoersdir)/sudoers $(srcdir)/sudoers >/dev/null && \ rm -f $(DESTDIR)$(sudoersdir)/sudoers +splint: + splint $(SPLINT_OPTS) -I$(incdir) -I$(top_builddir) -I$(devdir) -I$(srcdir) -I$(top_srcdir) $(srcdir)/*.c $(srcdir)/auth/*.c + cppcheck: cppcheck $(CPPCHECK_OPTS) -I$(incdir) -I$(top_builddir) -I$(devdir) -I$(srcdir) -I$(top_srcdir) $(srcdir)/*.c $(srcdir)/auth/*.c @@ -369,6 +381,7 @@ base=`basename $$t .in`; \ out="regress/sudoers/$${base}.out"; \ toke="regress/sudoers/$${base}.toke"; \ + json="regress/sudoers/$${base}.json"; \ ./testsudoers -dt <$$t >$$out 2>$$toke || true; \ if cmp $$out $(srcdir)/$$out.ok >/dev/null; then \ passed=`expr $$passed + 1`; \ @@ -388,6 +401,16 @@ diff $$toke $(srcdir)/$$toke.ok || true; \ fi; \ total=`expr $$total + 1`; \ + ./visudo -f $$t -x - >$$json 2>/dev/null || true; \ + total=`expr $$total + 1`; \ + if cmp $$json $(srcdir)/$$json.ok >/dev/null; then \ + passed=`expr $$passed + 1`; \ + echo "$$dir/$$base (parse): OK"; \ + else \ + failed=`expr $$failed + 1`; \ + echo "$$dir/$$base: FAIL"; \ + diff $$json $(srcdir)/$$json.ok || true; \ + fi; \ done; \ echo "$$dir: $$passed/$$total tests passed; $$failed/$$total tests failed"; \ if test $$failed -ne 0; then \ @@ -436,7 +459,7 @@ fi clean: - -$(LIBTOOL) --mode=clean rm -f $(PROGS) $(TEST_PROGS) *.lo *.o *.la \ + -$(LIBTOOL) $(LTFLAGS) --mode=clean rm -f $(PROGS) $(TEST_PROGS) *.lo *.o *.la \ *.a stamp-* core *.core core.* regress/*/*.out regress/*/*.toke \ regress/*/*.err @@ -458,584 +481,575 @@ # Autogenerated dependencies, do not modify afs.lo: $(authdir)/afs.c $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ - $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.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)/sudo_nss.h \ $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/afs.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(authdir)/afs.c aix_auth.lo: $(authdir)/aix_auth.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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)/sudo_nss.h $(srcdir)/sudoers.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)/sudo_nss.h $(srcdir)/sudoers.h \ $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/aix_auth.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(authdir)/aix_auth.c alias.lo: $(srcdir)/alias.c $(devdir)/def_data.h $(devdir)/gram.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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)/redblack.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) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/alias.c +audit.lo: $(srcdir)/audit.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)/redblack.h $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ - $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ - $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/alias.c -audit.lo: $(srcdir)/audit.c $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.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)/bsm_audit.h \ - $(srcdir)/defaults.h $(srcdir)/linux_audit.h $(srcdir)/logging.h \ - $(srcdir)/solaris_audit.h $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ - $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ - $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/audit.c + $(srcdir)/bsm_audit.h $(srcdir)/defaults.h $(srcdir)/linux_audit.h \ + $(srcdir)/logging.h $(srcdir)/solaris_audit.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) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/audit.c base64.lo: $(srcdir)/base64.c $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.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)/sudo_nss.h $(srcdir)/sudoers.h \ $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/base64.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/base64.c base64.o: base64.lo boottime.lo: $(srcdir)/boottime.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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)/sudo_nss.h $(srcdir)/sudoers.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)/sudo_nss.h $(srcdir)/sudoers.h \ $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/boottime.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/boottime.c bsdauth.lo: $(authdir)/bsdauth.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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)/sudo_nss.h $(srcdir)/sudoers.h \ - $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ - $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/bsdauth.c + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/defaults.h $(srcdir)/logging.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) $(PIE_CFLAGS) $(SSP_CFLAGS) $(authdir)/bsdauth.c bsm_audit.lo: $(srcdir)/bsm_audit.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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)/bsm_audit.h $(srcdir)/defaults.h $(srcdir)/logging.h \ - $(srcdir)/sudo_nss.h $(srcdir)/sudoers.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)/bsm_audit.h $(srcdir)/defaults.h \ + $(srcdir)/logging.h $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/bsm_audit.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/bsm_audit.c check.lo: $(srcdir)/check.c $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.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)/check.h \ - $(srcdir)/defaults.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ - $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.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)/check.h $(srcdir)/defaults.h $(srcdir)/logging.h \ + $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/check.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/check.c check_addr.o: $(srcdir)/regress/parser/check_addr.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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)/interfaces.h $(srcdir)/logging.h \ - $(srcdir)/parse.h $(srcdir)/sudo_nss.h $(srcdir)/sudoers.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)/interfaces.h $(srcdir)/logging.h $(srcdir)/parse.h \ + $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/parser/check_addr.c + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/parser/check_addr.c check_base64.o: $(srcdir)/regress/parser/check_base64.c \ $(incdir)/sudo_compat.h $(top_builddir)/config.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/parser/check_base64.c + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/parser/check_base64.c check_digest.o: $(srcdir)/regress/parser/check_digest.c \ $(incdir)/compat/sha2.h $(incdir)/sudo_compat.h \ $(top_builddir)/config.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/parser/check_digest.c + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/parser/check_digest.c 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 \ $(incdir)/sudo_util.h $(srcdir)/parse.h $(srcdir)/toke.h \ $(top_builddir)/config.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/parser/check_fill.c + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/parser/check_fill.c check_hexchar.o: $(srcdir)/regress/parser/check_hexchar.c \ $(incdir)/sudo_compat.h $(top_builddir)/config.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/parser/check_hexchar.c + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/parser/check_hexchar.c check_iolog_path.o: $(srcdir)/regress/iolog_path/check_iolog_path.c \ $(devdir)/def_data.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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)/sudo_nss.h $(srcdir)/sudoers.h \ - $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ - $(top_builddir)/pathnames.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/iolog_path/check_iolog_path.c + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/defaults.h \ + $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ + $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ + $(top_builddir)/config.h $(top_builddir)/pathnames.h + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/iolog_path/check_iolog_path.c check_symbols.o: $(srcdir)/regress/check_symbols/check_symbols.c \ $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ $(incdir)/sudo_dso.h $(incdir)/sudo_fatal.h \ $(incdir)/sudo_util.h $(top_builddir)/config.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/check_symbols/check_symbols.c + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/check_symbols/check_symbols.c check_wrap.o: $(srcdir)/regress/logging/check_wrap.c \ $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ $(incdir)/sudo_fatal.h $(incdir)/sudo_plugin.h \ $(incdir)/sudo_util.h $(top_builddir)/config.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/logging/check_wrap.c + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/logging/check_wrap.c dce.lo: $(authdir)/dce.c $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ - $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.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)/sudo_nss.h \ $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/dce.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(authdir)/dce.c defaults.lo: $(srcdir)/defaults.c $(devdir)/def_data.c $(devdir)/def_data.h \ $(devdir)/gram.h $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.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 - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/defaults.c + $(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 + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/defaults.c +editor.lo: $(srcdir)/editor.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)/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) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/editor.c +editor.o: editor.lo env.lo: $(srcdir)/env.c $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ - $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.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)/sudo_nss.h \ $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/env.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/env.c find_path.lo: $(srcdir)/find_path.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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)/sudo_nss.h \ - $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ - $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/find_path.c + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/defaults.h $(srcdir)/logging.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) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/find_path.c find_path.o: find_path.lo fwtk.lo: $(authdir)/fwtk.c $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.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)/sudo_nss.h $(srcdir)/sudoers.h \ - $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ - $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/fwtk.c + $(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)/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) $(PIE_CFLAGS) $(SSP_CFLAGS) $(authdir)/fwtk.c +gc.lo: $(srcdir)/gc.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)/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) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/gc.c getdate.o: $(devdir)/getdate.c $(incdir)/sudo_compat.h $(top_builddir)/config.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(devdir)/getdate.c + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(devdir)/getdate.c getspwuid.lo: $(srcdir)/getspwuid.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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)/sudo_nss.h \ - $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ - $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/getspwuid.c + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/defaults.h $(srcdir)/logging.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) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/getspwuid.c goodpath.lo: $(srcdir)/goodpath.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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)/sudo_nss.h $(srcdir)/sudoers.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)/sudo_nss.h $(srcdir)/sudoers.h \ $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/goodpath.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/goodpath.c goodpath.o: goodpath.lo gram.lo: $(devdir)/gram.c $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.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 $(srcdir)/toke.h \ - $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(devdir)/gram.c + $(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 \ + $(srcdir)/toke.h $(top_builddir)/config.h $(top_builddir)/pathnames.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(devdir)/gram.c group_plugin.lo: $(srcdir)/group_plugin.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.h \ - $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ - $(incdir)/sudo_debug.h $(incdir)/sudo_dso.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)/sudo_nss.h $(srcdir)/sudoers.h \ - $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ - $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/group_plugin.c + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_dso.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)/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) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/group_plugin.c group_plugin.o: group_plugin.lo hexchar.lo: $(srcdir)/hexchar.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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)/sudo_nss.h $(srcdir)/sudoers.h \ - $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ - $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/hexchar.c + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/defaults.h $(srcdir)/logging.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) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/hexchar.c hexchar.o: hexchar.lo interfaces.lo: $(srcdir)/interfaces.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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)/interfaces.h $(srcdir)/logging.h \ - $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ - $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ - $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/interfaces.c + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/defaults.h \ + $(srcdir)/interfaces.h $(srcdir)/logging.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) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/interfaces.c interfaces.o: interfaces.lo iolog.lo: $(srcdir)/iolog.c $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.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)/iolog.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ - $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.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)/iolog.h $(srcdir)/logging.h \ + $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/iolog.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/iolog.c iolog_path.lo: $(srcdir)/iolog_path.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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)/sudo_nss.h \ - $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ - $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/iolog_path.c + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/defaults.h $(srcdir)/logging.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) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/iolog_path.c iolog_path.o: iolog_path.lo kerb5.lo: $(authdir)/kerb5.c $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.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)/sudo_nss.h $(srcdir)/sudoers.h \ - $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ - $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/kerb5.c + $(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)/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) $(PIE_CFLAGS) $(SSP_CFLAGS) $(authdir)/kerb5.c ldap.lo: $(srcdir)/ldap.c $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ - $(incdir)/sudo_debug.h $(incdir)/sudo_dso.h $(incdir)/sudo_fatal.h \ - $(incdir)/sudo_gettext.h $(incdir)/sudo_lbuf.h \ - $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ - $(srcdir)/defaults.h $(srcdir)/logging.h $(srcdir)/parse.h \ - $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ - $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/ldap.c + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_dso.h $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_lbuf.h $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/defaults.h $(srcdir)/logging.h \ + $(srcdir)/parse.h $(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) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/ldap.c linux_audit.lo: $(srcdir)/linux_audit.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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)/linux_audit.h \ - $(srcdir)/logging.h $(srcdir)/sudo_nss.h $(srcdir)/sudoers.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)/linux_audit.h $(srcdir)/logging.h \ + $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/linux_audit.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/linux_audit.c locale.lo: $(srcdir)/locale.c $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h $(srcdir)/logging.h \ - $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/locale.c + $(incdir)/sudo_compat.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(srcdir)/logging.h $(top_builddir)/config.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/locale.c locale.o: locale.lo logging.lo: $(srcdir)/logging.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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)/sudo_nss.h $(srcdir)/sudoers.h \ - $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ - $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/logging.c + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/defaults.h $(srcdir)/logging.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) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/logging.c logwrap.lo: $(srcdir)/logwrap.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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)/sudo_nss.h $(srcdir)/sudoers.h \ - $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ - $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/logwrap.c + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/defaults.h $(srcdir)/logging.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) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/logwrap.c logwrap.o: logwrap.lo match.lo: $(srcdir)/match.c $(devdir)/def_data.h $(devdir)/gram.h \ $(incdir)/compat/fnmatch.h $(incdir)/compat/glob.h \ $(incdir)/compat/sha2.h $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.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 \ + $(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 - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/match.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/match.c match_addr.lo: $(srcdir)/match_addr.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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)/interfaces.h $(srcdir)/logging.h \ - $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ - $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ - $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/match_addr.c + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/defaults.h \ + $(srcdir)/interfaces.h $(srcdir)/logging.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) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/match_addr.c match_addr.o: match_addr.lo net_ifs.o: $(top_srcdir)/src/net_ifs.c $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ $(incdir)/sudo_gettext.h $(incdir)/sudo_queue.h \ $(top_builddir)/config.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(top_srcdir)/src/net_ifs.c + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(top_srcdir)/src/net_ifs.c pam.lo: $(authdir)/pam.c $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ - $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.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)/sudo_nss.h \ $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/pam.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(authdir)/pam.c parse.lo: $(srcdir)/parse.c $(devdir)/def_data.h $(devdir)/gram.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.h \ - $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ - $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ - $(incdir)/sudo_lbuf.h $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ - $(incdir)/sudo_util.h $(srcdir)/defaults.h $(srcdir)/logging.h \ - $(srcdir)/parse.h $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ - $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ - $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/parse.c + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_lbuf.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(srcdir)/defaults.h $(srcdir)/logging.h $(srcdir)/parse.h \ + $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ + $(top_builddir)/config.h $(top_builddir)/pathnames.h + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/parse.c passwd.lo: $(authdir)/passwd.c $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.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)/sudo_nss.h $(srcdir)/sudoers.h \ $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/passwd.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(authdir)/passwd.c policy.lo: $(srcdir)/policy.c $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.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)/interfaces.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ $(srcdir)/sudoers_version.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/policy.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/policy.c prompt.lo: $(srcdir)/prompt.c $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.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)/sudo_nss.h $(srcdir)/sudoers.h \ $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/prompt.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/prompt.c pwutil.lo: $(srcdir)/pwutil.c $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.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)/pwutil.h $(srcdir)/redblack.h \ $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/pwutil.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/pwutil.c pwutil.o: pwutil.lo pwutil_impl.lo: $(srcdir)/pwutil_impl.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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)/pwutil.h \ - $(srcdir)/sudo_nss.h $(srcdir)/sudoers.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)/pwutil.h $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/pwutil_impl.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/pwutil_impl.c pwutil_impl.o: pwutil_impl.lo redblack.lo: $(srcdir)/redblack.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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)/redblack.h $(srcdir)/sudo_nss.h \ - $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ - $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/redblack.c + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/defaults.h $(srcdir)/logging.h \ + $(srcdir)/redblack.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) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/redblack.c redblack.o: redblack.lo rfc1938.lo: $(authdir)/rfc1938.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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)/sudo_nss.h $(srcdir)/sudoers.h \ - $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ - $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/rfc1938.c + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/defaults.h $(srcdir)/logging.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) $(PIE_CFLAGS) $(SSP_CFLAGS) $(authdir)/rfc1938.c secureware.lo: $(authdir)/secureware.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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)/sudo_nss.h \ - $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ - $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/secureware.c + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/defaults.h $(srcdir)/logging.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) $(PIE_CFLAGS) $(SSP_CFLAGS) $(authdir)/secureware.c securid5.lo: $(authdir)/securid5.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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)/sudo_nss.h $(srcdir)/sudoers.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)/sudo_nss.h $(srcdir)/sudoers.h \ $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/securid5.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(authdir)/securid5.c set_perms.lo: $(srcdir)/set_perms.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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)/sudo_nss.h \ - $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ - $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/set_perms.c + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/defaults.h $(srcdir)/logging.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) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/set_perms.c sia.lo: $(authdir)/sia.c $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ - $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.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)/sudo_nss.h \ $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/sia.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(authdir)/sia.c solaris_audit.lo: $(srcdir)/solaris_audit.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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)/solaris_audit.h $(srcdir)/sudo_nss.h \ - $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ - $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/solaris_audit.c + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/defaults.h \ + $(srcdir)/logging.h $(srcdir)/solaris_audit.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) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/solaris_audit.c sssd.lo: $(srcdir)/sssd.c $(devdir)/def_data.h $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ - $(incdir)/sudo_debug.h $(incdir)/sudo_dso.h $(incdir)/sudo_fatal.h \ - $(incdir)/sudo_gettext.h $(incdir)/sudo_lbuf.h \ - $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ - $(srcdir)/defaults.h $(srcdir)/logging.h $(srcdir)/parse.h \ - $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ - $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sssd.c + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_dso.h $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_lbuf.h $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/defaults.h $(srcdir)/logging.h \ + $(srcdir)/parse.h $(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) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/sssd.c sudo_auth.lo: $(authdir)/sudo_auth.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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)/ins_2001.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)/ins_2001.h \ $(srcdir)/ins_classic.h $(srcdir)/ins_csops.h \ $(srcdir)/ins_goons.h $(srcdir)/insults.h $(srcdir)/logging.h \ $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(authdir)/sudo_auth.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(authdir)/sudo_auth.c sudo_nss.lo: $(srcdir)/sudo_nss.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.h \ - $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ - $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ - $(incdir)/sudo_gettext.h $(incdir)/sudo_lbuf.h \ - $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ - $(incdir)/sudo_util.h $(srcdir)/defaults.h $(srcdir)/logging.h \ - $(srcdir)/sudo_nss.h $(srcdir)/sudoers.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_lbuf.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/defaults.h \ + $(srcdir)/logging.h $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sudo_nss.c -sudo_printf.o: $(srcdir)/sudo_printf.c $(incdir)/sudo_compat.h \ - $(incdir)/sudo_debug.h $(incdir)/sudo_plugin.h \ - $(incdir)/sudo_queue.h $(top_builddir)/config.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sudo_printf.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/sudo_nss.c +sudo_printf.o: $(srcdir)/sudo_printf.c $(incdir)/compat/stdbool.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(top_builddir)/config.h + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/sudo_printf.c sudoers.lo: $(srcdir)/sudoers.c $(devdir)/def_data.h \ $(incdir)/compat/getaddrinfo.h $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.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)/auth/sudo_auth.h \ - $(srcdir)/defaults.h $(srcdir)/logging.h $(srcdir)/sudo_nss.h \ - $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ - $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sudoers.c + $(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)/auth/sudo_auth.h $(srcdir)/defaults.h \ + $(srcdir)/logging.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) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/sudoers.c sudoers_debug.lo: $(srcdir)/sudoers_debug.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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)/sudo_nss.h $(srcdir)/sudoers.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)/sudo_nss.h $(srcdir)/sudoers.h \ $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sudoers_debug.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/sudoers_debug.c sudoers_debug.o: sudoers_debug.lo sudoreplay.o: $(srcdir)/sudoreplay.c $(incdir)/compat/getopt.h \ - $(incdir)/compat/stdbool.h $(incdir)/compat/timespec.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h \ + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_event.h $(incdir)/sudo_fatal.h \ $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/iolog.h \ $(srcdir)/logging.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sudoreplay.c + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/sudoreplay.c testsudoers.o: $(srcdir)/testsudoers.c $(devdir)/def_data.h $(devdir)/gram.h \ $(incdir)/compat/fnmatch.h $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.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)/interfaces.h $(srcdir)/logging.h $(srcdir)/parse.h \ - $(srcdir)/sudo_nss.h $(srcdir)/sudoers.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)/interfaces.h $(srcdir)/logging.h \ + $(srcdir)/parse.h $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ $(srcdir)/sudoers_debug.h $(srcdir)/tsgetgrpw.h \ $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/testsudoers.c + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/testsudoers.c timestamp.lo: $(srcdir)/timestamp.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/compat/timespec.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.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 \ @@ -1043,60 +1057,56 @@ $(srcdir)/logging.h $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ $(srcdir)/sudoers_debug.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/timestamp.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/timestamp.c timestr.lo: $(srcdir)/timestr.c $(incdir)/sudo_compat.h $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/timestr.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/timestr.c toke.lo: $(devdir)/toke.c $(devdir)/def_data.h $(devdir)/gram.h \ $(incdir)/compat/sha2.h $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ - $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ - $(incdir)/sudo_gettext.h $(incdir)/sudo_lbuf.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h $(incdir)/sudo_lbuf.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ $(srcdir)/defaults.h $(srcdir)/logging.h $(srcdir)/parse.h \ $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ $(srcdir)/toke.h $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(devdir)/toke.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(devdir)/toke.c toke_util.lo: $(srcdir)/toke_util.c $(devdir)/def_data.h $(devdir)/gram.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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 \ + $(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 $(srcdir)/toke.h \ $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/toke_util.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/toke_util.c toke_util.o: toke_util.lo tsgetgrpw.o: $(srcdir)/tsgetgrpw.c $(devdir)/def_data.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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)/sudo_nss.h $(srcdir)/sudoers.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)/sudo_nss.h $(srcdir)/sudoers.h \ $(srcdir)/sudoers_debug.h $(srcdir)/tsgetgrpw.h \ $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/tsgetgrpw.c + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/tsgetgrpw.c visudo.o: $(srcdir)/visudo.c $(devdir)/def_data.h $(devdir)/gram.h \ $(incdir)/compat/getopt.h $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.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)/redblack.h \ - $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h $(srcdir)/sudoers_debug.h \ - $(srcdir)/sudoers_version.h $(top_builddir)/config.h \ - $(top_builddir)/pathnames.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/visudo.c + $(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)/redblack.h $(srcdir)/sudo_nss.h $(srcdir)/sudoers.h \ + $(srcdir)/sudoers_debug.h $(srcdir)/sudoers_version.h \ + $(top_builddir)/config.h $(top_builddir)/pathnames.h + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/visudo.c visudo_json.o: $(srcdir)/visudo_json.c $(devdir)/def_data.h $(devdir)/gram.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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 \ + $(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) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/visudo_json.c + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/visudo_json.c diff -Nru sudo-1.8.12/plugins/sudoers/match_addr.c sudo-1.8.16/plugins/sudoers/match_addr.c --- sudo-1.8.12/plugins/sudoers/match_addr.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/match_addr.c 2015-10-31 23:34:59.000000000 +0000 @@ -26,25 +26,20 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include +#ifdef NEED_RESOLV_H +# include +# include +#endif /* NEED_RESOLV_H */ #include "sudoers.h" #include "interfaces.h" diff -Nru sudo-1.8.12/plugins/sudoers/match.c sudo-1.8.16/plugins/sudoers/match.c --- sudo-1.8.12/plugins/sudoers/match.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/match.c 2016-03-17 16:13:11.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 1998-2005, 2007-2015 + * Copyright (c) 1996, 1998-2005, 2007-2016 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -29,14 +29,7 @@ # include #endif #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ @@ -48,9 +41,7 @@ #elif defined(HAVE_INTTYPES_H) # include #endif -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #ifndef SUDOERS_NAME_MATCH # ifdef HAVE_GLOB # include @@ -63,22 +54,8 @@ #else # include #endif /* HAVE_NETGROUP_H */ -#ifdef HAVE_DIRENT_H -# include -# define NAMLEN(dirent) strlen((dirent)->d_name) -#else -# define dirent direct -# define NAMLEN(dirent) (dirent)->d_namlen -# ifdef HAVE_SYS_NDIR_H -# include -# endif -# ifdef HAVE_SYS_DIR_H -# include -# endif -# ifdef HAVE_NDIR_H -# include -# endif -#endif +#include +#include #include #include #include @@ -130,7 +107,9 @@ matched = !m->negated; break; case NETGROUP: - if (netgr_matches(m->name, NULL, NULL, pw->pw_name)) + if (netgr_matches(m->name, + def_netgroup_tuple ? user_runhost : NULL, + def_netgroup_tuple ? user_srunhost : NULL, pw->pw_name)) matched = !m->negated; break; case USERGROUP: @@ -154,7 +133,7 @@ if (matched != UNSPEC) break; } - debug_return_bool(matched); + debug_return_int(matched); } /* @@ -186,7 +165,10 @@ user_matched = !m->negated; break; case NETGROUP: - if (netgr_matches(m->name, NULL, NULL, runas_pw->pw_name)) + if (netgr_matches(m->name, + def_netgroup_tuple ? user_runhost : NULL, + def_netgroup_tuple ? user_srunhost : NULL, + runas_pw->pw_name)) user_matched = !m->negated; break; case USERGROUP: @@ -273,7 +255,7 @@ * Returns ALLOW, DENY or UNSPEC. */ int -hostlist_matches(const struct member_list *list) +hostlist_matches(const struct passwd *pw, const struct member_list *list) { struct member *m; struct alias *a; @@ -286,7 +268,8 @@ matched = !m->negated; break; case NETGROUP: - if (netgr_matches(m->name, user_runhost, user_srunhost, NULL)) + if (netgr_matches(m->name, user_runhost, user_srunhost, + pw->pw_name)) matched = !m->negated; break; case NTWKADDR: @@ -295,7 +278,7 @@ break; case ALIAS: if ((a = alias_get(m->name, HOSTALIAS)) != NULL) { - rval = hostlist_matches(&a->members); + rval = hostlist_matches(pw, &a->members); if (rval != UNSPEC) matched = m->negated ? !rval : rval; alias_put(a); @@ -310,7 +293,7 @@ if (matched != UNSPEC) break; } - debug_return_bool(matched); + debug_return_int(matched); } /* @@ -329,7 +312,7 @@ if (matched != UNSPEC) break; } - debug_return_bool(matched); + debug_return_int(matched); } /* @@ -362,7 +345,7 @@ matched = !m->negated; break; } - debug_return_bool(matched); + debug_return_int(matched); } static bool @@ -413,8 +396,7 @@ if (strcmp(sudoers_cmnd, "sudoedit") == 0 && strcmp(user_cmnd, "sudoedit") == 0 && command_args_match(sudoers_cmnd, sudoers_args)) { - sudo_efree(safe_cmnd); - safe_cmnd = sudo_estrdup(sudoers_cmnd); + /* No need to set safe_cmnd since user_cmnd matches sudoers_cmnd */ rc = true; } goto done; @@ -460,9 +442,7 @@ if (fnmatch(sudoers_cmnd, user_cmnd, FNM_PATHNAME) != 0) debug_return_bool(false); if (command_args_match(sudoers_cmnd, sudoers_args)) { - if (safe_cmnd) - free(safe_cmnd); - safe_cmnd = sudo_estrdup(user_cmnd); + /* No need to set safe_cmnd since user_cmnd matches sudoers_cmnd */ debug_return_bool(true); } debug_return_bool(false); @@ -523,8 +503,11 @@ if (user_stat == NULL || (user_stat->st_dev == sudoers_stat.st_dev && user_stat->st_ino == sudoers_stat.st_ino)) { - sudo_efree(safe_cmnd); - safe_cmnd = sudo_estrdup(cp); + free(safe_cmnd); + if ((safe_cmnd = strdup(cp)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + cp = NULL; /* fail closed */ + } break; } } @@ -533,8 +516,7 @@ debug_return_bool(false); if (command_args_match(sudoers_cmnd, sudoers_args)) { - sudo_efree(safe_cmnd); - safe_cmnd = sudo_estrdup(user_cmnd); + /* safe_cmnd was set above. */ debug_return_bool(true); } debug_return_bool(false); @@ -556,9 +538,10 @@ if (strcmp(user_cmnd, sudoers_cmnd) == 0) { if (command_args_match(sudoers_cmnd, sudoers_args)) { - sudo_efree(safe_cmnd); - safe_cmnd = sudo_estrdup(sudoers_cmnd); - debug_return_bool(true); + free(safe_cmnd); + if ((safe_cmnd = strdup(sudoers_cmnd)) != NULL) + debug_return_bool(true); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); } } debug_return_bool(false); @@ -607,17 +590,20 @@ }; static bool -digest_matches(const char *file, const struct sudo_digest *sd) +digest_matches(const char *file, const struct sudo_digest *sd, int *fd) { unsigned char file_digest[SHA512_DIGEST_LENGTH]; unsigned char sudoers_digest[SHA512_DIGEST_LENGTH]; unsigned char buf[32 * 1024]; struct digest_function *func = NULL; +#ifdef HAVE_FEXECVE + bool first = true; + bool is_script = false; +#endif /* HAVE_FEXECVE */ size_t nread; SHA2_CTX ctx; FILE *fp; unsigned int i; - int h; debug_decl(digest_matches, SUDOERS_DEBUG_MATCH) for (i = 0; digest_functions[i].digest_name != NULL; i++) { @@ -633,7 +619,7 @@ if (strlen(sd->digest_str) == func->digest_len * 2) { /* Convert the command digest from ascii hex to binary. */ for (i = 0; i < func->digest_len; i++) { - h = hexchar(&sd->digest_str[i + i]); + const int h = hexchar(&sd->digest_str[i + i]); if (h == -1) goto bad_format; sudoers_digest[i] = (unsigned char)h; @@ -641,8 +627,12 @@ } else { size_t len = base64_decode(sd->digest_str, sudoers_digest, sizeof(sudoers_digest)); - if (len != func->digest_len) + if (len != func->digest_len) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "incorrect length for digest, expected %u, got %zu", + func->digest_len, len); goto bad_format; + } } if ((fp = fopen(file, "r")) == NULL) { @@ -653,6 +643,14 @@ func->init(&ctx); while ((nread = fread(buf, 1, sizeof(buf), fp)) != 0) { +#ifdef HAVE_FEXECVE + /* Check for #! cookie and set is_script. */ + if (first) { + first = false; + if (nread >= 2 && buf[0] == '#' && buf[1] == '!') + is_script = true; + } +#endif /* HAVE_FEXECVE */ func->update(&ctx, buf, nread); } if (ferror(fp)) { @@ -660,15 +658,36 @@ fclose(fp); debug_return_bool(false); } - fclose(fp); func->final(file_digest, &ctx); - if (memcmp(file_digest, sudoers_digest, func->digest_len) == 0) - debug_return_bool(true); - sudo_debug_printf(SUDO_DEBUG_DIAG|SUDO_DEBUG_LINENO, - "%s digest mismatch for %s, expecting %s", - func->digest_name, file, sd->digest_str); - debug_return_bool(false); + if (memcmp(file_digest, sudoers_digest, func->digest_len) != 0) { + fclose(fp); + sudo_debug_printf(SUDO_DEBUG_DIAG|SUDO_DEBUG_LINENO, + "%s digest mismatch for %s, expecting %s", + func->digest_name, file, sd->digest_str); + debug_return_bool(false); + } + +#ifdef HAVE_FEXECVE + /* + * On systems with fexecve(2) we can use that to execute the + * matching command even when the directory is writable. + */ + if ((*fd = dup(fileno(fp))) == -1) { + sudo_debug_printf(SUDO_DEBUG_INFO, "unable to dup %s: %s", + file, strerror(errno)); + fclose(fp); + debug_return_bool(false); + } + /* + * Shell scripts go through namei twice and so we can't set the close + * on exec flag on the fd for fexecve(2). + */ + if (!is_script) + fcntl(*fd, F_SETFD, FD_CLOEXEC); +#endif /* HAVE_FEXECVE */ + fclose(fp); + debug_return_bool(true); bad_format: sudo_warnx(U_("digest for %s (%s) is not in %s form"), file, sd->digest_str, func->digest_name); @@ -710,12 +729,19 @@ debug_return_bool(false); if (!command_args_match(sudoers_cmnd, sudoers_args)) debug_return_bool(false); - if (digest != NULL && !digest_matches(sudoers_cmnd, digest)) { + if (cmnd_fd != -1) { + close(cmnd_fd); + cmnd_fd = -1; + } + if (digest != NULL && !digest_matches(sudoers_cmnd, digest, &cmnd_fd)) { /* XXX - log functions not available but we should log very loudly */ debug_return_bool(false); } - sudo_efree(safe_cmnd); - safe_cmnd = sudo_estrdup(sudoers_cmnd); + free(safe_cmnd); + if ((safe_cmnd = strdup(sudoers_cmnd)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_bool(false); + } debug_return_bool(true); } #endif /* SUDOERS_NAME_MATCH */ @@ -768,8 +794,11 @@ if (user_stat == NULL || (user_stat->st_dev == sudoers_stat.st_dev && user_stat->st_ino == sudoers_stat.st_ino)) { - sudo_efree(safe_cmnd); - safe_cmnd = sudo_estrdup(buf); + free(safe_cmnd); + if ((safe_cmnd = strdup(buf)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + dent = NULL; + } break; } } @@ -862,23 +891,25 @@ bool usergr_matches(const char *group, const char *user, const struct passwd *pw) { - int matched = false; + bool matched = false; struct passwd *pw0 = NULL; debug_decl(usergr_matches, SUDOERS_DEBUG_MATCH) - /* make sure we have a valid usergroup, sudo style */ + /* Make sure we have a valid usergroup, sudo style */ if (*group++ != '%') { sudo_debug_printf(SUDO_DEBUG_DIAG, "user group %s has no leading '%%'", group); goto done; } + /* Query group plugin for %:name groups. */ if (*group == ':' && def_group_plugin) { - matched = group_plugin_query(user, group + 1, pw); + if (group_plugin_query(user, group + 1, pw) == true) + matched = true; goto done; } - /* look up user's primary gid in the passwd file */ + /* Look up user's primary gid in the passwd file. */ if (pw == NULL) { if ((pw0 = sudo_getpwnam(user)) == NULL) { sudo_debug_printf(SUDO_DEBUG_DIAG, "unable to find %s in passwd db", @@ -893,10 +924,12 @@ goto done; } - /* not a Unix group, could be an external group */ - if (def_group_plugin && group_plugin_query(user, group, pw)) { - matched = true; - goto done; + /* Query the group plugin for Unix groups too? */ + if (def_group_plugin && def_always_query_group_plugin) { + if (group_plugin_query(user, group, pw) == true) { + matched = true; + goto done; + } } done: @@ -911,40 +944,61 @@ /* * Get NIS-style domain name and copy from static storage or NULL if none. */ +#if defined(HAVE_GETDOMAINNAME) || defined(SI_SRPC_DOMAIN) const char * sudo_getdomainname(void) { - char *domain = NULL; -#if defined(HAVE_GETDOMAINNAME) || defined(SI_SRPC_DOMAIN) - static char buf[HOST_NAME_MAX + 1]; + static char *domain; static bool initialized; + debug_decl(sudo_getdomainname, SUDOERS_DEBUG_MATCH) if (!initialized) { + size_t host_name_max; int rval; +# ifdef _SC_HOST_NAME_MAX + host_name_max = (size_t)sysconf(_SC_HOST_NAME_MAX); + if (host_name_max == (size_t)-1) +# endif + host_name_max = 255; /* POSIX and historic BSD */ + + domain = malloc(host_name_max + 1); + if (domain != NULL) { # ifdef SI_SRPC_DOMAIN - buf[0] = '\0'; - rval = sysinfo(SI_SRPC_DOMAIN, buf, sizeof(buf)); + domain[0] = '\0'; + rval = sysinfo(SI_SRPC_DOMAIN, domain, host_name_max + 1); # else - rval = getdomainname(buf, sizeof(buf)); + rval = getdomainname(domain, host_name_max + 1); # endif - if (rval != -1 && buf[0] != '\0') { - char *cp; + if (rval != -1 && domain[0] != '\0') { + const char *cp; - domain = buf; - for (cp = buf; *cp != '\0'; cp++) { - /* Check for illegal characters, Linux may use "(none)". */ - if (*cp == '(' || *cp == ')' || *cp == ',' || *cp == ' ') { - domain = NULL; - break; + for (cp = domain; *cp != '\0'; cp++) { + /* Check for illegal characters, Linux may use "(none)". */ + if (*cp == '(' || *cp == ')' || *cp == ',' || *cp == ' ') { + free(domain); + domain = NULL; + break; + } } } + } else { + /* XXX - want to pass error back to caller */ + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); } initialized = true; } -#endif /* HAVE_GETDOMAINNAME || SI_SRPC_DOMAIN */ - return domain; + debug_return_str(domain); } +#else +const char * +sudo_getdomainname(void) +{ + debug_decl(sudo_getdomainname, SUDOERS_DEBUG_MATCH) + debug_return_ptr(NULL); +} +#endif /* HAVE_GETDOMAINNAME || SI_SRPC_DOMAIN */ /* * Returns true if "host" and "user" belong to the netgroup "netgr", diff -Nru sudo-1.8.12/plugins/sudoers/parse.c sudo-1.8.16/plugins/sudoers/parse.c --- sudo-1.8.12/plugins/sudoers/parse.c 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/parse.c 2016-03-17 16:13:10.000000000 +0000 @@ -20,23 +20,14 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include #include @@ -63,7 +54,7 @@ static int sudo_file_parse(struct sudo_nss *); static int sudo_file_setdefs(struct sudo_nss *); static void print_member(struct sudo_lbuf *lbuf, struct member *m, int alias_type); -static void print_member2(struct sudo_lbuf *lbuf, struct member *m, const char *separator, int alias_type); +static void print_member_sep(struct sudo_lbuf *lbuf, struct member *m, const char *separator, int alias_type); /* sudo_nss implementation */ struct sudo_nss sudo_nss_file = { @@ -185,7 +176,7 @@ if (userlist_matches(sudo_user.pw, &us->users) != ALLOW) continue; TAILQ_FOREACH(priv, &us->privileges, entries) { - if (hostlist_matches(&priv->hostlist) != ALLOW) + if (hostlist_matches(sudo_user.pw, &priv->hostlist) != ALLOW) continue; TAILQ_FOREACH(cs, &priv->cmndlist, entries) { /* Only check the command when listing another user. */ @@ -221,7 +212,7 @@ continue; CLR(validated, FLAG_NO_USER); TAILQ_FOREACH_REVERSE(priv, &us->privileges, privilege_list, entries) { - host_match = hostlist_matches(&priv->hostlist); + host_match = hostlist_matches(sudo_user.pw, &priv->hostlist); if (host_match == ALLOW) CLR(validated, FLAG_NO_HOST); else @@ -237,17 +228,57 @@ tags = &cs->tags; #ifdef HAVE_SELINUX /* Set role and type if not specified on command line. */ - if (user_role == NULL) - user_role = cs->role ? sudo_estrdup(cs->role) : def_role; - if (user_type == NULL) - user_type = cs->type ? sudo_estrdup(cs->type) : def_type; + if (user_role == NULL) { + if (cs->role != NULL) { + user_role = strdup(cs->role); + if (user_role == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + SET(validated, VALIDATE_ERROR); + goto done; + } + } else { + user_role = def_role; + } + } + if (user_type == NULL) { + if (cs->type != NULL) { + user_type = strdup(cs->type); + if (user_type == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + SET(validated, VALIDATE_ERROR); + goto done; + } + } else { + user_type = def_type; + } + } #endif /* HAVE_SELINUX */ #ifdef HAVE_PRIV_SET /* Set Solaris privilege sets */ - if (runas_privs == NULL) - runas_privs = cs->privs ? sudo_estrdup(cs->privs) : def_privs; - if (runas_limitprivs == NULL) - runas_limitprivs = cs->limitprivs ? sudo_estrdup(cs->limitprivs) : def_limitprivs; + if (runas_privs == NULL) { + if (cs->privs != NULL) { + runas_privs = strdup(cs->privs); + if (runas_privs == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + SET(validated, VALIDATE_ERROR); + goto done; + } + } else { + runas_privs = def_privs; + } + } + if (runas_limitprivs == NULL) { + if (cs->limitprivs != NULL) { + runas_limitprivs = strdup(cs->limitprivs); + if (runas_limitprivs == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + SET(validated, VALIDATE_ERROR); + goto done; + } + } else { + runas_limitprivs = def_limitprivs; + } + } #endif /* HAVE_PRIV_SET */ /* * If user is running command as himself, @@ -280,24 +311,47 @@ def_log_input = tags->log_input; if (tags->log_output != UNSPEC) def_log_output = tags->log_output; + if (tags->send_mail != UNSPEC) { + if (tags->send_mail) { + def_mail_all_cmnds = true; + } else { + def_mail_all_cmnds = false; + def_mail_always = false; + def_mail_no_perms = false; + } + } + if (tags->follow != UNSPEC) + def_sudoedit_follow = tags->follow; } } else if (match == DENY) { SET(validated, VALIDATE_FAILURE); CLR(validated, VALIDATE_SUCCESS); - if (tags != NULL && tags->nopasswd != UNSPEC) - def_authenticate = !tags->nopasswd; + if (tags != NULL) { + if (tags->nopasswd != UNSPEC) + def_authenticate = !tags->nopasswd; + if (tags->send_mail != UNSPEC) { + if (tags->send_mail) { + def_mail_all_cmnds = true; + } else { + def_mail_all_cmnds = false; + def_mail_always = false; + def_mail_no_perms = false; + } + } + } } - (void) restore_perms(); +#if defined(HAVE_SELINUX) || defined(HAVE_PRIV_SET) +done: +#endif + if (!restore_perms()) + SET(validated, VALIDATE_ERROR); debug_return_int(validated); } -#define TAG_SET(tt) \ - ((tt) != UNSPEC && (tt) != IMPLIED) - #define TAG_CHANGED(t) \ (TAG_SET(cs->tags.t) && cs->tags.t != tags->t) -static void +static bool sudo_file_append_cmnd(struct cmndspec *cs, struct cmndtag *tags, struct sudo_lbuf *lbuf) { @@ -316,33 +370,37 @@ sudo_lbuf_append(lbuf, "TYPE=%s ", cs->type); #endif /* HAVE_SELINUX */ if (TAG_CHANGED(setenv)) { - sudo_lbuf_append(lbuf, cs->tags.setenv ? "SETENV: " : "NOSETENV: "); tags->setenv = cs->tags.setenv; + sudo_lbuf_append(lbuf, tags->setenv ? "SETENV: " : "NOSETENV: "); } if (TAG_CHANGED(noexec)) { - sudo_lbuf_append(lbuf, cs->tags.noexec ? "NOEXEC: " : "EXEC: "); tags->noexec = cs->tags.noexec; + sudo_lbuf_append(lbuf, tags->noexec ? "NOEXEC: " : "EXEC: "); } if (TAG_CHANGED(nopasswd)) { - sudo_lbuf_append(lbuf, cs->tags.nopasswd ? "NOPASSWD: " : "PASSWD: "); tags->nopasswd = cs->tags.nopasswd; + sudo_lbuf_append(lbuf, tags->nopasswd ? "NOPASSWD: " : "PASSWD: "); } if (TAG_CHANGED(log_input)) { - sudo_lbuf_append(lbuf, cs->tags.log_input ? "LOG_INPUT: " : "NOLOG_INPUT: "); tags->log_input = cs->tags.log_input; + sudo_lbuf_append(lbuf, tags->log_input ? "LOG_INPUT: " : "NOLOG_INPUT: "); } if (TAG_CHANGED(log_output)) { - sudo_lbuf_append(lbuf, cs->tags.log_output ? "LOG_OUTPUT: " : "NOLOG_OUTPUT: "); tags->log_output = cs->tags.log_output; + sudo_lbuf_append(lbuf, tags->log_output ? "LOG_OUTPUT: " : "NOLOG_OUTPUT: "); + } + if (TAG_CHANGED(send_mail)) { + tags->send_mail = cs->tags.send_mail; + sudo_lbuf_append(lbuf, tags->send_mail ? "MAIL: " : "NOMAIL: "); + } + if (TAG_CHANGED(follow)) { + tags->follow = cs->tags.follow; + sudo_lbuf_append(lbuf, tags->follow ? "FOLLOW: " : "NOFOLLOW: "); } print_member(lbuf, cs->cmnd, CMNDALIAS); - debug_return; + debug_return_bool(!sudo_lbuf_error(lbuf)); } -#define RUNAS_CHANGED(cs1, cs2) \ - (cs1->runasuserlist != cs2->runasuserlist || \ - cs1->runasgrouplist != cs2->runasgrouplist) - static int sudo_file_display_priv_short(struct passwd *pw, struct userspec *us, struct sudo_lbuf *lbuf) @@ -355,13 +413,9 @@ debug_decl(sudo_file_display_priv_short, SUDOERS_DEBUG_NSS) /* gcc -Wuninitialized false positive */ - tags.noexec = UNSPEC; - tags.setenv = UNSPEC; - tags.nopasswd = UNSPEC; - tags.log_input = UNSPEC; - tags.log_output = UNSPEC; + TAGS_INIT(tags); TAILQ_FOREACH(priv, &us->privileges, entries) { - if (hostlist_matches(&priv->hostlist) != ALLOW) + if (hostlist_matches(pw, &priv->hostlist) != ALLOW) continue; prev_cs = NULL; TAILQ_FOREACH(cs, &priv->cmndlist, entries) { @@ -389,11 +443,7 @@ } } sudo_lbuf_append(lbuf, ") "); - tags.noexec = UNSPEC; - tags.setenv = UNSPEC; - tags.nopasswd = UNSPEC; - tags.log_input = UNSPEC; - tags.log_output = UNSPEC; + TAGS_INIT(tags); } else if (cs != TAILQ_FIRST(&priv->cmndlist)) { sudo_lbuf_append(lbuf, ", "); } @@ -406,13 +456,6 @@ debug_return_int(nfound); } -#define TAGS_CHANGED(ot, nt) \ - ((TAG_SET((nt).setenv) && (nt).setenv != (ot).setenv) || \ - (TAG_SET((nt).noexec) && (nt).noexec != (ot).noexec) || \ - (TAG_SET((nt).nopasswd) && (nt).nopasswd != (ot).nopasswd) || \ - (TAG_SET((nt).log_input) && (nt).log_input != (ot).log_input) || \ - (TAG_SET((nt).log_output) && (nt).log_output != (ot).log_output)) - /* * Compare the current cmndspec with the previous one to determine * whether we need to start a new long entry for "sudo -ll". @@ -451,7 +494,7 @@ debug_decl(sudo_file_display_priv_long, SUDOERS_DEBUG_NSS) TAILQ_FOREACH(priv, &us->privileges, entries) { - if (hostlist_matches(&priv->hostlist) != ALLOW) + if (hostlist_matches(pw, &priv->hostlist) != ALLOW) continue; prev_cs = NULL; TAILQ_FOREACH(cs, &priv->cmndlist, entries) { @@ -512,7 +555,7 @@ sudo_lbuf_append(lbuf, _(" Commands:\n")); } sudo_lbuf_append(lbuf, "\t"); - print_member2(lbuf, cs->cmnd, "\n\t", CMNDALIAS); + print_member_sep(lbuf, cs->cmnd, "\n\t", CMNDALIAS); sudo_lbuf_append(lbuf, "\n"); prev_cs = cs; nfound++; @@ -521,6 +564,9 @@ debug_return_int(nfound); } +/* + * Returns the number of matching privileges or -1 on error. + */ int sudo_file_display_privs(struct sudo_nss *nss, struct passwd *pw, struct sudo_lbuf *lbuf) @@ -541,6 +587,8 @@ else nfound += sudo_file_display_priv_short(pw, us, lbuf); } + if (sudo_lbuf_error(lbuf)) + debug_return_int(-1); done: debug_return_int(nfound); } @@ -568,7 +616,7 @@ TAILQ_FOREACH(d, &defaults, entries) { switch (d->type) { case DEFAULTS_HOST: - if (hostlist_matches(d->binding) != ALLOW) + if (hostlist_matches(pw, d->binding) != ALLOW) continue; break; case DEFAULTS_USER: @@ -594,6 +642,8 @@ prefix = ", "; nfound++; } + if (sudo_lbuf_error(lbuf)) + debug_return_int(-1); done: debug_return_int(nfound); } @@ -612,6 +662,8 @@ nfound += display_bound_defaults(DEFAULTS_RUNAS, lbuf); nfound += display_bound_defaults(DEFAULTS_CMND, lbuf); + if (sudo_lbuf_error(lbuf)) + debug_return_int(-1); debug_return_int(nfound); } @@ -673,9 +725,14 @@ sudo_lbuf_append(lbuf, "%s%s", d->op == false ? "!" : "", d->var); } + if (sudo_lbuf_error(lbuf)) + debug_return_int(-1); debug_return_int(nfound); } +/* + * Returns 0 if the command is allowed, 1 if not or -1 on error. + */ int sudo_file_display_cmnd(struct sudo_nss *nss, struct passwd *pw) { @@ -696,7 +753,7 @@ continue; TAILQ_FOREACH_REVERSE(priv, &us->privileges, privilege_list, entries) { - host_match = hostlist_matches(&priv->hostlist); + host_match = hostlist_matches(pw, &priv->hostlist); if (host_match != ALLOW) continue; TAILQ_FOREACH_REVERSE(cs, &priv->cmndlist, cmndspec_list, entries) { @@ -715,9 +772,9 @@ } matched: if (match != NULL && !match->negated) { - sudo_printf(SUDO_CONV_INFO_MSG, "%s%s%s\n", + const int len = sudo_printf(SUDO_CONV_INFO_MSG, "%s%s%s\n", safe_cmnd, user_args ? " " : "", user_args ? user_args : ""); - rval = 0; + rval = len == -1 ? -1 : 0; } done: debug_return_int(rval); @@ -727,13 +784,13 @@ * Print the contents of a struct member to stdout */ static void -_print_member(struct sudo_lbuf *lbuf, char *name, int type, int negated, +print_member_int(struct sudo_lbuf *lbuf, char *name, int type, int negated, const char *separator, int alias_type) { struct alias *a; struct member *m; struct sudo_command *c; - debug_decl(_print_member, SUDOERS_DEBUG_NSS) + debug_decl(print_member_int, SUDOERS_DEBUG_NSS) switch (type) { case ALL: @@ -757,7 +814,7 @@ TAILQ_FOREACH(m, &a->members, entries) { if (m != TAILQ_FIRST(&a->members)) sudo_lbuf_append(lbuf, "%s", separator); - _print_member(lbuf, m->name, m->type, + print_member_int(lbuf, m->name, m->type, negated ? !m->negated : m->negated, separator, alias_type); } @@ -775,12 +832,12 @@ static void print_member(struct sudo_lbuf *lbuf, struct member *m, int alias_type) { - _print_member(lbuf, m->name, m->type, m->negated, ", ", alias_type); + print_member_int(lbuf, m->name, m->type, m->negated, ", ", alias_type); } static void -print_member2(struct sudo_lbuf *lbuf, struct member *m, const char *separator, - int alias_type) +print_member_sep(struct sudo_lbuf *lbuf, struct member *m, + const char *separator, int alias_type) { - _print_member(lbuf, m->name, m->type, m->negated, separator, alias_type); + print_member_int(lbuf, m->name, m->type, m->negated, separator, alias_type); } diff -Nru sudo-1.8.12/plugins/sudoers/parse.h sudo-1.8.16/plugins/sudoers/parse.h --- sudo-1.8.12/plugins/sudoers/parse.h 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/parse.h 2016-03-17 16:13:10.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 1998-2000, 2004, 2007-2014 + * Copyright (c) 1996, 1998-2000, 2004, 2007-2015 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -15,8 +15,8 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _SUDOERS_PARSE_H -#define _SUDOERS_PARSE_H +#ifndef SUDOERS_PARSE_H +#define SUDOERS_PARSE_H #undef UNSPEC #define UNSPEC -1 @@ -27,6 +27,54 @@ #undef IMPLIED #define IMPLIED 2 +/* + * Initialize all tags to UNSPEC. + */ +#define TAGS_INIT(t) do { \ + (t).follow = UNSPEC; \ + (t).log_input = UNSPEC; \ + (t).log_output = UNSPEC; \ + (t).noexec = UNSPEC; \ + (t).nopasswd = UNSPEC; \ + (t).send_mail = UNSPEC; \ + (t).setenv = UNSPEC; \ +} while (0) + +/* + * Returns true if any tag are not UNSPEC, else false. + */ +#define TAGS_SET(t) \ + ((t).follow != UNSPEC || (t).log_input != UNSPEC || \ + (t).log_output != UNSPEC || (t).noexec != UNSPEC || \ + (t).nopasswd != UNSPEC || (t).send_mail != UNSPEC || \ + (t).setenv != UNSPEC) + +/* + * Returns true if the specified tag is not UNSPEC or IMPLIED, else false. + */ +#define TAG_SET(tt) \ + ((tt) != UNSPEC && (tt) != IMPLIED) + +/* + * Returns true if any tags set in nt differ between ot and nt, else false. + */ +#define TAGS_CHANGED(ot, nt) \ + ((TAG_SET((nt).follow) && (nt).follow != (ot).follow) || \ + (TAG_SET((nt).log_input) && (nt).log_input != (ot).log_input) || \ + (TAG_SET((nt).log_output) && (nt).log_output != (ot).log_output) || \ + (TAG_SET((nt).noexec) && (nt).noexec != (ot).noexec) || \ + (TAG_SET((nt).nopasswd) && (nt).nopasswd != (ot).nopasswd) || \ + (TAG_SET((nt).setenv) && (nt).setenv != (ot).setenv) || \ + (TAG_SET((nt).send_mail) && (nt).send_mail != (ot).send_mail)) + +/* + * Returns true if the runas user and group lists match, else false. + */ +#define RUNAS_CHANGED(cs1, cs2) \ + ((cs1) == NULL || (cs2) == NULL || \ + (cs1)->runasuserlist != (cs2)->runasuserlist || \ + (cs1)->runasgrouplist != (cs2)->runasgrouplist) + #define SUDO_DIGEST_SHA224 0 #define SUDO_DIGEST_SHA256 1 #define SUDO_DIGEST_SHA384 2 @@ -58,6 +106,8 @@ signed int setenv: 3; signed int log_input: 3; signed int log_output: 3; + signed int send_mail: 3; + signed int follow: 3; }; /* @@ -184,17 +234,17 @@ /* alias.c */ bool no_aliases(void); -char *alias_add(char *name, int type, struct member *members); +const char *alias_add(char *name, int type, struct member *members); int alias_compare(const void *a1, const void *a2); struct alias *alias_get(char *name, int type); struct alias *alias_remove(char *name, int type); void alias_apply(int (*func)(void *, void *), void *cookie); void alias_free(void *a); void alias_put(struct alias *a); -void init_aliases(void); +bool init_aliases(void); /* gram.c */ -void init_parser(const char *, bool); +bool init_parser(const char *, bool); /* match_addr.c */ bool addr_matches(char *n); @@ -208,7 +258,7 @@ bool userpw_matches(const char *sudoers_user, const char *user, const struct passwd *pw); int cmnd_matches(const struct member *m); int cmndlist_matches(const struct member_list *list); -int hostlist_matches(const struct member_list *list); +int hostlist_matches(const struct passwd *pw, const struct member_list *list); int runaslist_matches(const struct member_list *user_list, const struct member_list *group_list, struct member **matching_user, struct member **matching_group); int userlist_matches(const struct passwd *pw, const struct member_list *list); const char *sudo_getdomainname(void); @@ -222,4 +272,4 @@ /* base64.c */ size_t base64_decode(const char *str, unsigned char *dst, size_t dsize); -#endif /* _SUDOERS_PARSE_H */ +#endif /* SUDOERS_PARSE_H */ Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/plugins/sudoers/po/ca.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/plugins/sudoers/po/ca.mo differ diff -Nru sudo-1.8.12/plugins/sudoers/po/ca.po sudo-1.8.16/plugins/sudoers/po/ca.po --- sudo-1.8.12/plugins/sudoers/po/ca.po 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/po/ca.po 2016-03-17 16:13:10.000000000 +0000 @@ -1,6 +1,6 @@ # Portable object template file for the sudoers plugin # This file is put in the public domain. -# Walter Garcia-Fontes , 2014. +# Walter Garcia-Fontes , 2015. # # Glossari # @@ -8,10 +8,10 @@ # tty - el terminal, això prové de l'acrònim en anglès per a teletip (tty) i ara s'usa per a un terminal obert on es pot entrar informació msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.11b1\n" +"Project-Id-Version: sudoers 1.8.15rc3\n" "Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-07-30 09:37-0600\n" -"PO-Revision-Date: 2014-09-01 10:20+0200\n" +"POT-Creation-Date: 2015-10-24 06:26-0600\n" +"PO-Revision-Date: 2015-11-21 16:59+0100\n" "Last-Translator: Walter Garcia-Fontes \n" "Language-Team: Catalan \n" "Language: ca\n" @@ -20,54 +20,196 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +#: confstr.sh:1 +msgid "syntax error" +msgstr "error de sintaxi" + #: confstr.sh:2 -msgid "Password:" -msgstr "Contrasenya:" +msgid "%p's password: " +msgstr "contrasenya de %p: " #: confstr.sh:3 +msgid "[sudo] password for %p: " +msgstr "[sudo] contrasenaya per a %p: " + +#: confstr.sh:4 +msgid "Password: " +msgstr "Contrasenya: " + +#: confstr.sh:5 msgid "*** SECURITY information for %h ***" msgstr "*** Informació de SEGURETAT per a %h ***" -#: confstr.sh:4 +#: confstr.sh:6 msgid "Sorry, try again." msgstr "Ho sentim, proveu un altre cop." -#: plugins/sudoers/alias.c:136 +#: gram.y:183 gram.y:201 gram.y:207 gram.y:213 gram.y:219 gram.y:225 +#: gram.y:241 gram.y:248 gram.y:255 gram.y:262 gram.y:269 gram.y:285 +#: gram.y:308 gram.y:315 gram.y:322 gram.y:329 gram.y:336 gram.y:391 +#: gram.y:399 gram.y:409 gram.y:439 gram.y:446 gram.y:453 gram.y:460 +#: gram.y:572 gram.y:579 gram.y:588 gram.y:597 gram.y:614 gram.y:670 +#: gram.y:677 gram.y:684 gram.y:692 gram.y:784 gram.y:791 gram.y:798 +#: gram.y:805 gram.y:812 gram.y:838 gram.y:845 gram.y:852 gram.y:1136 +#: gram.y:1143 plugins/sudoers/alias.c:123 plugins/sudoers/alias.c:136 +#: plugins/sudoers/auth/bsdauth.c:141 plugins/sudoers/auth/kerb5.c:119 +#: plugins/sudoers/auth/kerb5.c:145 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/pam.c:449 plugins/sudoers/auth/rfc1938.c:109 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:516 +#: plugins/sudoers/defaults.c:720 plugins/sudoers/defaults.c:880 +#: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 +#: plugins/sudoers/editor.c:92 plugins/sudoers/env.c:233 +#: plugins/sudoers/group_plugin.c:133 plugins/sudoers/iolog.c:586 +#: plugins/sudoers/iolog.c:618 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:446 plugins/sudoers/ldap.c:477 +#: plugins/sudoers/ldap.c:529 plugins/sudoers/ldap.c:562 +#: plugins/sudoers/ldap.c:914 plugins/sudoers/ldap.c:1061 +#: plugins/sudoers/ldap.c:1348 plugins/sudoers/ldap.c:1521 +#: plugins/sudoers/ldap.c:1597 plugins/sudoers/ldap.c:1733 +#: plugins/sudoers/ldap.c:1757 plugins/sudoers/ldap.c:1787 +#: plugins/sudoers/ldap.c:1840 plugins/sudoers/ldap.c:1855 +#: plugins/sudoers/ldap.c:1951 plugins/sudoers/ldap.c:1984 +#: plugins/sudoers/ldap.c:2137 plugins/sudoers/ldap.c:2234 +#: plugins/sudoers/ldap.c:3041 plugins/sudoers/ldap.c:3074 +#: plugins/sudoers/ldap.c:3388 plugins/sudoers/ldap.c:3416 +#: plugins/sudoers/ldap.c:3427 plugins/sudoers/ldap.c:3517 +#: plugins/sudoers/ldap.c:3533 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:666 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:501 +#: plugins/sudoers/match.c:537 plugins/sudoers/match.c:699 +#: plugins/sudoers/match.c:756 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:384 +#: plugins/sudoers/policy.c:583 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/sssd.c:160 plugins/sudoers/sssd.c:192 +#: plugins/sudoers/sssd.c:235 plugins/sudoers/sssd.c:242 +#: plugins/sudoers/sssd.c:278 plugins/sudoers/sssd.c:323 +#: plugins/sudoers/sssd.c:917 plugins/sudoers/sssd.c:1050 +#: plugins/sudoers/sudoers.c:159 plugins/sudoers/sudoers.c:294 +#: plugins/sudoers/sudoers.c:304 plugins/sudoers/sudoers.c:312 +#: plugins/sudoers/sudoers.c:365 plugins/sudoers/sudoers.c:663 +#: plugins/sudoers/sudoers.c:749 plugins/sudoers/sudoers.c:793 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:472 +#: plugins/sudoers/sudoreplay.c:668 plugins/sudoers/sudoreplay.c:780 +#: plugins/sudoers/sudoreplay.c:820 plugins/sudoers/sudoreplay.c:829 +#: plugins/sudoers/sudoreplay.c:839 plugins/sudoers/sudoreplay.c:847 +#: plugins/sudoers/sudoreplay.c:851 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1011 plugins/sudoers/testsudoers.c:130 +#: plugins/sudoers/testsudoers.c:188 plugins/sudoers/testsudoers.c:215 +#: plugins/sudoers/testsudoers.c:232 plugins/sudoers/timestamp.c:390 +#: plugins/sudoers/timestamp.c:426 plugins/sudoers/timestamp.c:838 +#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 +#: plugins/sudoers/toke_util.c:147 plugins/sudoers/visudo.c:152 +#: plugins/sudoers/visudo.c:213 plugins/sudoers/visudo.c:297 +#: plugins/sudoers/visudo.c:303 plugins/sudoers/visudo.c:433 +#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo.c:1023 +#: plugins/sudoers/visudo.c:1119 toke.l:785 toke.l:806 toke.l:816 toke.l:924 +#: toke.l:1082 +msgid "unable to allocate memory" +msgstr "no es pot assignar memòria" + +#: gram.y:471 +msgid "a digest requires a path name" +msgstr "au un resum li cal un nom de camí" + +#: gram.y:1136 gram.y:1143 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/pam.c:449 plugins/sudoers/auth/rfc1938.c:109 +#: plugins/sudoers/defaults.c:516 plugins/sudoers/defaults.c:720 +#: plugins/sudoers/defaults.c:880 plugins/sudoers/editor.c:64 +#: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:92 +#: plugins/sudoers/env.c:233 plugins/sudoers/group_plugin.c:133 +#: plugins/sudoers/iolog.c:586 plugins/sudoers/iolog.c:618 +#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:446 +#: plugins/sudoers/ldap.c:477 plugins/sudoers/ldap.c:529 +#: plugins/sudoers/ldap.c:562 plugins/sudoers/ldap.c:914 +#: plugins/sudoers/ldap.c:1061 plugins/sudoers/ldap.c:1348 +#: plugins/sudoers/ldap.c:1521 plugins/sudoers/ldap.c:1597 +#: plugins/sudoers/ldap.c:1733 plugins/sudoers/ldap.c:1757 +#: plugins/sudoers/ldap.c:1787 plugins/sudoers/ldap.c:1840 +#: plugins/sudoers/ldap.c:1855 plugins/sudoers/ldap.c:1951 +#: plugins/sudoers/ldap.c:1984 plugins/sudoers/ldap.c:2137 +#: plugins/sudoers/ldap.c:2234 plugins/sudoers/ldap.c:3041 +#: plugins/sudoers/ldap.c:3074 plugins/sudoers/ldap.c:3388 +#: plugins/sudoers/ldap.c:3416 plugins/sudoers/ldap.c:3427 +#: plugins/sudoers/ldap.c:3517 plugins/sudoers/ldap.c:3533 +#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:501 +#: plugins/sudoers/match.c:537 plugins/sudoers/match.c:699 +#: plugins/sudoers/match.c:756 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:97 +#: plugins/sudoers/policy.c:106 plugins/sudoers/policy.c:115 +#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:250 +#: plugins/sudoers/policy.c:271 plugins/sudoers/policy.c:280 +#: plugins/sudoers/policy.c:319 plugins/sudoers/policy.c:329 +#: plugins/sudoers/policy.c:338 plugins/sudoers/policy.c:384 +#: plugins/sudoers/policy.c:583 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:160 +#: plugins/sudoers/sssd.c:192 plugins/sudoers/sssd.c:235 +#: plugins/sudoers/sssd.c:242 plugins/sudoers/sssd.c:278 +#: plugins/sudoers/sssd.c:323 plugins/sudoers/sssd.c:917 +#: plugins/sudoers/sssd.c:1050 plugins/sudoers/sudoers.c:159 +#: plugins/sudoers/sudoers.c:294 plugins/sudoers/sudoers.c:304 +#: plugins/sudoers/sudoers.c:312 plugins/sudoers/sudoers.c:365 +#: plugins/sudoers/sudoers.c:663 plugins/sudoers/sudoers.c:749 +#: plugins/sudoers/sudoers.c:793 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sudoreplay.c:472 plugins/sudoers/sudoreplay.c:668 +#: plugins/sudoers/sudoreplay.c:780 plugins/sudoers/sudoreplay.c:820 +#: plugins/sudoers/sudoreplay.c:829 plugins/sudoers/sudoreplay.c:839 +#: plugins/sudoers/sudoreplay.c:847 plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:1007 plugins/sudoers/sudoreplay.c:1011 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:188 +#: plugins/sudoers/testsudoers.c:215 plugins/sudoers/testsudoers.c:232 +#: plugins/sudoers/timestamp.c:390 plugins/sudoers/timestamp.c:426 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:147 +#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:213 +#: plugins/sudoers/visudo.c:297 plugins/sudoers/visudo.c:303 +#: plugins/sudoers/visudo.c:433 plugins/sudoers/visudo.c:979 +#: plugins/sudoers/visudo.c:1023 plugins/sudoers/visudo.c:1119 toke.l:785 +#: toke.l:806 toke.l:816 toke.l:924 toke.l:1082 +#, c-format +msgid "%s: %s" +msgstr "%s: %s" + +#: plugins/sudoers/alias.c:132 #, c-format msgid "Alias `%s' already defined" msgstr "L'àlies %s ja està definit" -#: plugins/sudoers/auth/bsdauth.c:75 +#: plugins/sudoers/auth/bsdauth.c:68 #, c-format msgid "unable to get login class for user %s" msgstr "no s'ha pogut obtenir la classe d'inici de sessió per a l'usuari %s" -#: plugins/sudoers/auth/bsdauth.c:80 +#: plugins/sudoers/auth/bsdauth.c:73 msgid "unable to begin bsd authentication" msgstr "no s'ha pogut iniciar l'autenticació bsd" -#: plugins/sudoers/auth/bsdauth.c:88 +#: plugins/sudoers/auth/bsdauth.c:81 msgid "invalid authentication type" msgstr "tipus no vàlida d'autenticació" -#: plugins/sudoers/auth/bsdauth.c:97 +#: plugins/sudoers/auth/bsdauth.c:90 msgid "unable to initialize BSD authentication" msgstr "no s'ha pogut inicialitzar l'autenticació BSD" -#: plugins/sudoers/auth/fwtk.c:59 +#: plugins/sudoers/auth/fwtk.c:52 msgid "unable to read fwtk config" msgstr "no s'ha pogut llegir la configuració fwtk" -#: plugins/sudoers/auth/fwtk.c:64 +#: plugins/sudoers/auth/fwtk.c:57 msgid "unable to connect to authentication server" msgstr "no s'ha pogut connectar al servidor d'autenticació" -#: plugins/sudoers/auth/fwtk.c:70 plugins/sudoers/auth/fwtk.c:94 -#: plugins/sudoers/auth/fwtk.c:127 +#: plugins/sudoers/auth/fwtk.c:63 plugins/sudoers/auth/fwtk.c:87 +#: plugins/sudoers/auth/fwtk.c:120 msgid "lost connection to authentication server" msgstr "s'ha perdut la connexió al servidor d'autenticació" -#: plugins/sudoers/auth/fwtk.c:74 +#: plugins/sudoers/auth/fwtk.c:67 #, c-format msgid "" "authentication server error:\n" @@ -76,151 +218,155 @@ "error de servidor d'autenticació:\n" "%s" -#: plugins/sudoers/auth/kerb5.c:116 +#: plugins/sudoers/auth/kerb5.c:111 #, c-format msgid "%s: unable to convert principal to string ('%s'): %s" msgstr "%s: no s'ha pogut convertir el principal a la cadena de caràcters ('%s'): %s" -#: plugins/sudoers/auth/kerb5.c:158 +#: plugins/sudoers/auth/kerb5.c:161 #, c-format msgid "%s: unable to parse '%s': %s" msgstr "%s: no s'ha pogut analitzar '%s': %s" -#: plugins/sudoers/auth/kerb5.c:167 +#: plugins/sudoers/auth/kerb5.c:170 #, c-format msgid "%s: unable to resolve credential cache: %s" msgstr "%s: no s'ha pogut resoldre el cau de credencials : %s" -#: plugins/sudoers/auth/kerb5.c:214 +#: plugins/sudoers/auth/kerb5.c:217 #, c-format msgid "%s: unable to allocate options: %s" msgstr "%s: no s'han pogut assignar les opcions: %s" -#: plugins/sudoers/auth/kerb5.c:229 +#: plugins/sudoers/auth/kerb5.c:232 #, c-format msgid "%s: unable to get credentials: %s" msgstr "%s: no s'ha pogut obtenir les credencials: %s" -#: plugins/sudoers/auth/kerb5.c:242 +#: plugins/sudoers/auth/kerb5.c:245 #, c-format msgid "%s: unable to initialize credential cache: %s" msgstr "%s: no s'ha pogut inicialitzar el cau de credencials: %s" -#: plugins/sudoers/auth/kerb5.c:245 +#: plugins/sudoers/auth/kerb5.c:248 #, c-format msgid "%s: unable to store credential in cache: %s" msgstr "%s: no s'ha pogut emmagatzemar la credencial al cau: %s" -#: plugins/sudoers/auth/kerb5.c:309 +#: plugins/sudoers/auth/kerb5.c:312 #, c-format msgid "%s: unable to get host principal: %s" msgstr "%s: no s'ha pogut obtenir el principal de l'amfitrió: %s" -#: plugins/sudoers/auth/kerb5.c:323 +#: plugins/sudoers/auth/kerb5.c:326 #, c-format msgid "%s: Cannot verify TGT! Possible attack!: %s" msgstr "%s: No s'ha pogut verificar TGT! Possible atac!: %s" -#: plugins/sudoers/auth/pam.c:98 +#: plugins/sudoers/auth/pam.c:92 msgid "unable to initialize PAM" msgstr "No s'ha pogut inicialitzar PAM" -#: plugins/sudoers/auth/pam.c:149 +#: plugins/sudoers/auth/pam.c:164 msgid "account validation failure, is your account locked?" msgstr "fallada de validació de compte, està bloquejat el vostre compte?" -#: plugins/sudoers/auth/pam.c:153 +#: plugins/sudoers/auth/pam.c:168 msgid "Account or password is expired, reset your password and try again" msgstr "Ha expirat el compte o la contrasenya, restabliu la vostra contrasenya i proveu un altre cop" -#: plugins/sudoers/auth/pam.c:161 +#: plugins/sudoers/auth/pam.c:176 #, c-format msgid "unable to change expired password: %s" msgstr "no s'ha pogut canviar la contrasenya expirada: %s" -#: plugins/sudoers/auth/pam.c:166 +#: plugins/sudoers/auth/pam.c:181 msgid "Password expired, contact your system administrator" msgstr "Ha expirat la contrasenya, contacteu el vostre administrador de sistema" -#: plugins/sudoers/auth/pam.c:170 +#: plugins/sudoers/auth/pam.c:185 msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator" msgstr "Ha expirat el compte o la configuració PAM no té una secció \"compte\" per a sudo, contacteu el vostre administrador de sistema" -#: plugins/sudoers/auth/pam.c:187 +#: plugins/sudoers/auth/pam.c:199 #, c-format msgid "PAM authentication error: %s" msgstr "Error d'autenticació PAM: %s" -#: plugins/sudoers/auth/rfc1938.c:103 plugins/sudoers/visudo.c:222 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:218 #, c-format msgid "you do not exist in the %s database" msgstr "no existiu a la base de dades %s" -#: plugins/sudoers/auth/securid5.c:80 +#: plugins/sudoers/auth/securid5.c:73 msgid "failed to initialise the ACE API library" msgstr "ha fallat la inicialització de la biblioteca ACE API" -#: plugins/sudoers/auth/securid5.c:106 +#: plugins/sudoers/auth/securid5.c:99 msgid "unable to contact the SecurID server" msgstr "no s'ha pogut contactar el servidor SecurID" -#: plugins/sudoers/auth/securid5.c:115 +#: plugins/sudoers/auth/securid5.c:108 msgid "User ID locked for SecurID Authentication" msgstr "L'ID de l'usuari esta bloquejat per a Autenticació SecurID" -#: plugins/sudoers/auth/securid5.c:119 plugins/sudoers/auth/securid5.c:170 +#: plugins/sudoers/auth/securid5.c:112 plugins/sudoers/auth/securid5.c:163 msgid "invalid username length for SecurID" msgstr "nom d'usuari no vàlid per a SecurID" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:175 +#: plugins/sudoers/auth/securid5.c:116 plugins/sudoers/auth/securid5.c:168 msgid "invalid Authentication Handle for SecurID" msgstr "Mànec d'Autenticació no vàlid per a SecurID" -#: plugins/sudoers/auth/securid5.c:127 +#: plugins/sudoers/auth/securid5.c:120 msgid "SecurID communication failed" msgstr "Ha fallat la comunicació SecurID" -#: plugins/sudoers/auth/securid5.c:131 plugins/sudoers/auth/securid5.c:214 +#: plugins/sudoers/auth/securid5.c:124 plugins/sudoers/auth/securid5.c:207 msgid "unknown SecurID error" msgstr "error desconegut de SecurID" -#: plugins/sudoers/auth/securid5.c:165 +#: plugins/sudoers/auth/securid5.c:158 msgid "invalid passcode length for SecurID" msgstr "longitud no vàlida de contrasenya per a SecurID" -#: plugins/sudoers/auth/sia.c:105 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:124 msgid "unable to initialize SIA session" msgstr "no s'ha pogut inicialitzar la sessió SIA" -#: plugins/sudoers/auth/sudo_auth.c:117 +#: plugins/sudoers/auth/sudo_auth.c:126 msgid "invalid authentication methods" msgstr "mètodes no vàlids d'autenticació" -#: plugins/sudoers/auth/sudo_auth.c:119 +#: plugins/sudoers/auth/sudo_auth.c:128 msgid "Invalid authentication methods compiled into sudo! You may not mix standalone and non-standalone authentication." msgstr "Mètodes no vàlids d'autenticació compilats dins del sudo! No podeu barrejar l'autenticació independent i no independent." -#: plugins/sudoers/auth/sudo_auth.c:188 +#: plugins/sudoers/auth/sudo_auth.c:225 plugins/sudoers/auth/sudo_auth.c:274 msgid "no authentication methods" msgstr "no hi ha mètodes d'autenticació" -#: plugins/sudoers/auth/sudo_auth.c:190 +#: plugins/sudoers/auth/sudo_auth.c:227 msgid "There are no authentication methods compiled into sudo! If you want to turn off authentication, use the --disable-authentication configure option." msgstr "No hi ha mètodes d'autenticació compilats dins del sudo! Si voleu deshabilitar l'autenticació, useu l'opció de configuració --disable-authentication" -#: plugins/sudoers/auth/sudo_auth.c:360 +#: plugins/sudoers/auth/sudo_auth.c:276 +msgid "Unable to initialize authentication methods." +msgstr "No s'han pogut inicialitzar els mètodes d'autenticació." + +#: plugins/sudoers/auth/sudo_auth.c:435 msgid "Authentication methods:" msgstr "Mètodes d'autenticació:" -#: plugins/sudoers/bsm_audit.c:100 plugins/sudoers/bsm_audit.c:189 +#: plugins/sudoers/bsm_audit.c:111 plugins/sudoers/bsm_audit.c:200 msgid "Could not determine audit condition" msgstr "No s'ha pogut determinar la condició d'auditoria" -#: plugins/sudoers/bsm_audit.c:161 plugins/sudoers/bsm_audit.c:249 +#: plugins/sudoers/bsm_audit.c:172 plugins/sudoers/bsm_audit.c:260 msgid "unable to commit audit record" msgstr "no s'ha pogut validar el registre d'auditoria" -#: plugins/sudoers/check.c:197 +#: plugins/sudoers/check.c:252 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -240,15 +386,15 @@ " #3) Tenir molt de poder està associat amb tenir molta responsabilitat.\n" "\n" -#: plugins/sudoers/check.c:240 plugins/sudoers/check.c:250 -#: plugins/sudoers/sudoers.c:599 plugins/sudoers/sudoers.c:628 +#: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 +#: plugins/sudoers/sudoers.c:699 plugins/sudoers/sudoers.c:728 #, c-format msgid "unknown uid: %u" msgstr "uid desconegut: %u" -#: plugins/sudoers/check.c:245 plugins/sudoers/policy.c:671 -#: plugins/sudoers/sudoers.c:918 plugins/sudoers/testsudoers.c:211 -#: plugins/sudoers/testsudoers.c:363 +#: plugins/sudoers/check.c:300 plugins/sudoers/policy.c:755 +#: plugins/sudoers/sudoers.c:1095 plugins/sudoers/testsudoers.c:206 +#: plugins/sudoers/testsudoers.c:361 #, c-format msgid "unknown user: %s" msgstr "usuari desconegut: %s" @@ -297,535 +443,542 @@ msgstr "Envia correu electrònic si l'usuari no té permís per executar aquesta ordre" #: plugins/sudoers/def_data.c:67 +msgid "Send mail if the user tries to run a command" +msgstr "Envia correu electrònic si l'usuari intenta executar una ordre" + +#: plugins/sudoers/def_data.c:71 msgid "Use a separate timestamp for each user/tty combo" msgstr "Usa una marca horària separada per a cada combinació usuari/terminal" -#: plugins/sudoers/def_data.c:71 +#: plugins/sudoers/def_data.c:75 msgid "Lecture user the first time they run sudo" msgstr "Dóna una llissó a l'usuari cada cop que executi sudo" -#: plugins/sudoers/def_data.c:75 +#: plugins/sudoers/def_data.c:79 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Fitxer que conté la llissó de sudo: %s" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:83 msgid "Require users to authenticate by default" msgstr "Requereix de forma predeterminada que els usuaris s'autentiquin" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:87 msgid "Root may run sudo" msgstr "L'usuari primari pot executar sudo" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:91 msgid "Log the hostname in the (non-syslog) log file" msgstr "Registra el nom del sistema amfitrió al fitxer de registre (que no és syslog)" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:95 msgid "Log the year in the (non-syslog) log file" msgstr "Registra l'any al fitxer de registre (que no és syslog)" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:99 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Si sudo s'invoca sense arguments, inicia un intèrpret d'ordres" -#: plugins/sudoers/def_data.c:99 +#: plugins/sudoers/def_data.c:103 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Estableix $HOME per a l'usuari destí quan s'inicia un d'ordres amb -s" -#: plugins/sudoers/def_data.c:103 +#: plugins/sudoers/def_data.c:107 msgid "Always set $HOME to the target user's home directory" msgstr "Estableix sempre $HOME al directori de l'usuari destí" -#: plugins/sudoers/def_data.c:107 +#: plugins/sudoers/def_data.c:111 msgid "Allow some information gathering to give useful error messages" msgstr "Permet recollir alguna informació per donar missatges d'error útils" -#: plugins/sudoers/def_data.c:111 +#: plugins/sudoers/def_data.c:115 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Requereix noms de sistema amfitrió qualificats completament al sudoers" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:119 msgid "Insult the user when they enter an incorrect password" msgstr "Insulta a l'usuari quen entri una contrasenya incorrecta" -#: plugins/sudoers/def_data.c:119 +#: plugins/sudoers/def_data.c:123 msgid "Only allow the user to run sudo if they have a tty" msgstr "Permet a l'usuari executar sudo únicament si té un terminal" -#: plugins/sudoers/def_data.c:123 +#: plugins/sudoers/def_data.c:127 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo tindrà en compte la variable d'entorn EDITOR" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:131 msgid "Prompt for root's password, not the users's" msgstr "Pregunta per la contrasenya de l'usuari primari, no la de l'usuari normal" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:135 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Pregunta per la contrasenya de l'usuari runas_default, no la de l'usuari normal" -#: plugins/sudoers/def_data.c:135 +#: plugins/sudoers/def_data.c:139 msgid "Prompt for the target user's password, not the users's" msgstr "Pregunta per la contrasenya de l'usuari destí, no la de l'usuari normal" -#: plugins/sudoers/def_data.c:139 +#: plugins/sudoers/def_data.c:143 msgid "Apply defaults in the target user's login class if there is one" msgstr "Aplica els paràmetres predeterminats a la classe d'inici de sessió de l'usuari destí si hi ha una" -#: plugins/sudoers/def_data.c:143 +#: plugins/sudoers/def_data.c:147 msgid "Set the LOGNAME and USER environment variables" msgstr "Estableix les variables d'entorn LOGNAME i USER" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:151 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Estableix únicament l'uid efectiu de l'usuari destí, no l'uid real" -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:155 msgid "Don't initialize the group vector to that of the target user" msgstr "No inicialitzis el vector de grup perquè coincideixi amb el de l'usuari destí" -#: plugins/sudoers/def_data.c:155 +#: plugins/sudoers/def_data.c:159 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "longitud a la qual ajustar les línies del fitxer de registres (0 per a no ajustar): %u" -#: plugins/sudoers/def_data.c:159 +#: plugins/sudoers/def_data.c:163 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Temps màxim d'espera per a la marca horària de l'autenticació: %.1f minuts" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:167 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Temps màxim d'espera per a la pregunta de la contrasenya: %.1f minuts" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:171 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Nombre de intents per entrar una contrasenya: %u" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:175 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "Umask a usar o 0777 per usar la de l'usuari: 0%o" -#: plugins/sudoers/def_data.c:175 +#: plugins/sudoers/def_data.c:179 #, c-format msgid "Path to log file: %s" msgstr "Camí al fitxer de registre: %s" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:183 #, c-format msgid "Path to mail program: %s" msgstr "Camí al programa de correu electrònic: %s" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:187 #, c-format msgid "Flags for mail program: %s" msgstr "Indicadors per al programa de correu electrònic: %s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:191 #, c-format msgid "Address to send mail to: %s" msgstr "Adreça per enviar correu electrònic: %s" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:195 #, c-format msgid "Address to send mail from: %s" msgstr "Adreça per enviar correu electrònic des de: %s" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:199 #, c-format msgid "Subject line for mail messages: %s" msgstr "Línia d'assumpte per als missatges de correu electrònic: %s" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:203 #, c-format msgid "Incorrect password message: %s" msgstr "Missatge de contrasenya incorrecta: %s" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:207 #, c-format msgid "Path to lecture status dir: %s" msgstr "Camí al directori d'estat de la llissó: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:211 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Camí del directori de marques horàries d'autenticació: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:215 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Propietari del directori de marques horàries d'autenticació: %s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:219 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Els usuaris d'aquest grup estan exempts dels requeriments contrasenya i PATH: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:223 #, c-format msgid "Default password prompt: %s" msgstr "Pregunta predeterminada de contrasenya: %s" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:227 msgid "If set, passprompt will override system prompt in all cases." msgstr "Si està establert, la pregunta de contrasenya primarà sobre la pregunta del sistema en tots els casos." -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:231 #, c-format msgid "Default user to run commands as: %s" msgstr "Usuari predeterminat per executar ordres com a: %s" -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:235 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Valor per anul·lar el $PATH de l'usuari amb: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:239 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Camí a l'editor a usar per visudo: %s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:243 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Quan requerir una contrasenya per a la pseudo-ordre 'list': %s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:247 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Quan requerir una contrasenya per a la pseudo-ordre 'verify': %s" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:251 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Pre-carrega les funcions dummy exex contingudes a la biblioteca sudo_noexec" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:255 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Si el directori LDAP està actiu, ignorem el fitxer local sudoers?" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:259 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Els descriptors de fitxer >= %d es tancaran abans d'executar una ordre" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:263 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "Si està establert, els usuaris podran anul·lar el valor de `closeform' amb l'opció -C" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:267 msgid "Allow users to set arbitrary environment variables" msgstr "Permet als usuaris fixar variables arbitràries d'entorn" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:271 msgid "Reset the environment to a default set of variables" msgstr "Restableix l'entorn a un conjunt predeterminat de variables" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to check for sanity:" msgstr "Les variables d'entorn per comprovar la validesa:" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to remove:" msgstr "Variables d'entorn a suprimir:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:283 msgid "Environment variables to preserve:" msgstr "Variables d'entorn a preservar:" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:287 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "Rol SELinux a usar al nou context de seguretat: %s" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:291 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "Tipus SELinux a usar al nou context de seguretat: %s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:295 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Camí al fitxer d'entorn sudo-específic: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:299 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Configuració local a usar quan s'estan analitzant els sudoers: %s" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:303 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Permet a sudo preguntar per una contrasenya tot i que pugui ser visible" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:307 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Proveeix retroalimentació a la pregunta de contrasenya quan hi ha una entrada per l'usuari" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:311 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Usa una expansió que és menys precisa però no accedeix el sistema de fitxers" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:315 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "Els permisos umask als sudoers anul·larà els permisos de l'usuari, tot i que siguin més permissius" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:319 msgid "Log user's input for the command being run" msgstr "Registra l'entrada feta per l'usuari per a l'ordre que s'està executant" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:323 msgid "Log the output of the command being run" msgstr "Registra la sortida de l'ordre que s'està executant" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:327 msgid "Compress I/O logs using zlib" msgstr "Comprimeix els registres d'entrada/sortida usant zlib" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:331 msgid "Always run commands in a pseudo-tty" msgstr "Executa sempre les ordres en un pseudo-terminal" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:335 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Connector per a suport de grup no Unix: %s" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:339 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Directori on arxivar els registres entrada/sortida: %s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:343 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Fitxer on arxivar el registre entrada/sortida: %s" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:347 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Afegeix una entrada al fitxer utmp/utmpx quan s'estigui assignant un pty" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:351 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Estableix l'usuari a utmp perquè sigui l'usuari runas, no l'usuari invocant" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:355 msgid "Set of permitted privileges" msgstr "Conjunt de privilegis permesos" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:359 msgid "Set of limit privileges" msgstr "Conjunt de privilegis límit" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:363 msgid "Run commands on a pty in the background" msgstr "Executa les ordres a un pseudo-terminal (pty) al fons" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:367 msgid "PAM service name to use" msgstr "Nom del servei PAM a usar" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:371 msgid "PAM service name to use for login shells" msgstr "Nom del servei PAM a usar per a intèrprets d'ordres d'inici de sessió" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:375 msgid "Attempt to establish PAM credentials for the target user" msgstr "Intent d'establir credencials PAM per a l'usuari destí" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:379 msgid "Create a new PAM session for the command to run in" msgstr "Crea una nova sessió PAM on s'executi l'ordre" -#: plugins/sudoers/def_data.c:379 +#: plugins/sudoers/def_data.c:383 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Número màxim de seqüència de registre d'entrada/sortida: %u" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:387 msgid "Enable sudoers netgroup support" msgstr "Habilita el suport de netgroup dels sudoers" -#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:601 -#: plugins/sudoers/visudo_json.c:642 plugins/sudoers/visudo_json.c:677 +#: plugins/sudoers/def_data.c:391 +msgid "Check the parent directory for writability when editing files with sudoedit" +msgstr "Comprova que el directori pare tingui permisos d'escriptura que s'estiguin editant fitxers amb sudoedit" + +#: plugins/sudoers/def_data.c:395 +msgid "Follow symbolic links when editing files with sudoedit" +msgstr "Segueix els enllaços simbòlics quan s'estiguin editant fitxers amb sudoedit" + +#: plugins/sudoers/def_data.c:399 +msgid "Query the group plugin for unknown system groups" +msgstr "Consulta al connector de grups per grups desconeguts de sistema" + +#: plugins/sudoers/defaults.c:199 plugins/sudoers/defaults.c:608 +#: plugins/sudoers/visudo_json.c:633 plugins/sudoers/visudo_json.c:668 #, c-format msgid "unknown defaults entry `%s'" msgstr "entrada `%s' desconeguda de paràmetres predeterminat" -#: plugins/sudoers/defaults.c:218 plugins/sudoers/defaults.c:228 -#: plugins/sudoers/defaults.c:248 plugins/sudoers/defaults.c:261 -#: plugins/sudoers/defaults.c:274 plugins/sudoers/defaults.c:287 -#: plugins/sudoers/defaults.c:300 plugins/sudoers/defaults.c:320 -#: plugins/sudoers/defaults.c:330 +#: plugins/sudoers/defaults.c:207 plugins/sudoers/defaults.c:217 +#: plugins/sudoers/defaults.c:241 plugins/sudoers/defaults.c:256 +#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 +#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 +#: plugins/sudoers/defaults.c:325 #, c-format msgid "value `%s' is invalid for option `%s'" msgstr "el valor `%s' no és vàlid per a l'opció `%s'" -#: plugins/sudoers/defaults.c:221 plugins/sudoers/defaults.c:231 -#: plugins/sudoers/defaults.c:239 plugins/sudoers/defaults.c:256 -#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 -#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 -#: plugins/sudoers/defaults.c:326 +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:220 +#: plugins/sudoers/defaults.c:228 plugins/sudoers/defaults.c:251 +#: plugins/sudoers/defaults.c:264 plugins/sudoers/defaults.c:277 +#: plugins/sudoers/defaults.c:290 plugins/sudoers/defaults.c:310 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "no value specified for `%s'" msgstr "no s'ha especificat un valor per a `%s'" -#: plugins/sudoers/defaults.c:244 +#: plugins/sudoers/defaults.c:233 #, c-format msgid "values for `%s' must start with a '/'" msgstr "els valors per a `%s' han de començar amb un '/'" -#: plugins/sudoers/defaults.c:306 +#: plugins/sudoers/defaults.c:301 #, c-format msgid "option `%s' does not take a value" msgstr "l'opció `%s' no pren un valor" -#: plugins/sudoers/env.c:274 plugins/sudoers/env.c:281 -#: plugins/sudoers/env.c:384 plugins/sudoers/linux_audit.c:89 -#: plugins/sudoers/logging.c:918 plugins/sudoers/policy.c:468 -#: plugins/sudoers/policy.c:477 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:708 plugins/sudoers/testsudoers.c:241 -#: plugins/sudoers/toke_util.c:174 +#: plugins/sudoers/env.c:295 plugins/sudoers/env.c:302 +#: plugins/sudoers/env.c:407 plugins/sudoers/ldap.c:450 +#: plugins/sudoers/ldap.c:540 plugins/sudoers/ldap.c:1152 +#: plugins/sudoers/ldap.c:1354 plugins/sudoers/ldap.c:1526 +#: plugins/sudoers/ldap.c:1682 plugins/sudoers/linux_audit.c:82 +#: plugins/sudoers/logging.c:929 plugins/sudoers/policy.c:502 +#: plugins/sudoers/policy.c:511 plugins/sudoers/prompt.c:161 +#: plugins/sudoers/sudoers.c:815 plugins/sudoers/testsudoers.c:236 +#: plugins/sudoers/toke_util.c:160 #, c-format msgid "internal error, %s overflow" msgstr "error intern, desbordament de %s" -#: plugins/sudoers/env.c:357 +#: plugins/sudoers/env.c:376 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: envp corrupte, discordança de longitud" -#: plugins/sudoers/env.c:1051 +#: plugins/sudoers/env.c:1076 +msgid "unable to rebuild the environment" +msgstr "no s'ha pogut reconstruir l'entorn" + +#: plugins/sudoers/env.c:1150 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "ho sentim, no teniu permís d'establir les següents variables d'entorn: %s" -#: plugins/sudoers/group_plugin.c:94 +#: plugins/sudoers/group_plugin.c:85 #, c-format msgid "%s must be owned by uid %d" msgstr "%s ha de ser propietat de l'uid %d" -#: plugins/sudoers/group_plugin.c:98 +#: plugins/sudoers/group_plugin.c:89 #, c-format msgid "%s must only be writable by owner" msgstr "%s ha de ser modificable sols pel seu propietari" -#: plugins/sudoers/group_plugin.c:105 plugins/sudoers/sssd.c:252 +#: plugins/sudoers/group_plugin.c:97 plugins/sudoers/sssd.c:331 #, c-format msgid "unable to load %s: %s" msgstr "no s'ha pogut carregar %s: %s" -#: plugins/sudoers/group_plugin.c:110 +#: plugins/sudoers/group_plugin.c:103 #, c-format msgid "unable to find symbol \"group_plugin\" in %s" msgstr "no s'ha pogut trobar el símbol \"group_plugin\" a %s" -#: plugins/sudoers/group_plugin.c:115 +#: plugins/sudoers/group_plugin.c:108 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: connector incompatible de group versió principal %d, s'esperava %d" -#: plugins/sudoers/interfaces.c:116 +#: plugins/sudoers/interfaces.c:117 msgid "Local IP address and netmask pairs:\n" msgstr "Adreça local IP i parelles netmask:\n" -#: plugins/sudoers/iolog.c:101 plugins/sudoers/iolog.c:119 -#: plugins/sudoers/timestamp.c:233 +#: plugins/sudoers/iolog.c:92 plugins/sudoers/iolog.c:110 +#: plugins/sudoers/timestamp.c:169 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s existeix però no és un directori (0%o)" -#: plugins/sudoers/iolog.c:112 plugins/sudoers/iolog.c:133 -#: plugins/sudoers/iolog.c:140 plugins/sudoers/timestamp.c:227 -#: plugins/sudoers/timestamp.c:248 +#: plugins/sudoers/iolog.c:103 plugins/sudoers/iolog.c:124 +#: plugins/sudoers/iolog.c:131 plugins/sudoers/timestamp.c:163 +#: plugins/sudoers/timestamp.c:184 #, c-format msgid "unable to mkdir %s" msgstr "no s'ha pogut mkdir %s" -#: plugins/sudoers/iolog.c:209 plugins/sudoers/sudoers.c:764 -#: plugins/sudoers/sudoreplay.c:344 plugins/sudoers/sudoreplay.c:815 -#: plugins/sudoers/sudoreplay.c:1012 plugins/sudoers/timestamp.c:357 -#: plugins/sudoers/visudo.c:826 plugins/sudoers/visudo_json.c:1025 -#: plugins/sudoers/visudo_json.c:1038 +#: plugins/sudoers/iolog.c:200 plugins/sudoers/sudoers.c:871 +#: plugins/sudoers/sudoreplay.c:300 plugins/sudoers/sudoreplay.c:769 +#: plugins/sudoers/sudoreplay.c:973 plugins/sudoers/timestamp.c:399 +#: plugins/sudoers/visudo.c:903 plugins/sudoers/visudo_json.c:1012 +#: plugins/sudoers/visudo_json.c:1025 #, c-format msgid "unable to open %s" msgstr "no s'ha pogut obrir %s" -#: plugins/sudoers/iolog.c:250 plugins/sudoers/sudoers.c:768 -#: plugins/sudoers/sudoreplay.c:1119 +#: plugins/sudoers/iolog.c:241 plugins/sudoers/sudoers.c:875 +#: plugins/sudoers/sudoreplay.c:1084 #, c-format msgid "unable to read %s" msgstr "no s'ha pogut llegir %s" -#: plugins/sudoers/iolog.c:282 plugins/sudoers/sudoreplay.c:584 -#: plugins/sudoers/timestamp.c:186 plugins/sudoers/timestamp.c:189 +#: plugins/sudoers/iolog.c:277 plugins/sudoers/sudoreplay.c:550 +#: plugins/sudoers/timestamp.c:298 plugins/sudoers/timestamp.c:301 #, c-format msgid "unable to write to %s" msgstr "no s'ha pogut escriure a %s" -#: plugins/sudoers/iolog.c:347 plugins/sudoers/iolog.c:545 +#: plugins/sudoers/iolog.c:342 plugins/sudoers/iolog.c:540 #, c-format msgid "unable to create %s" msgstr "no s'ha pogut crear %s" -#: plugins/sudoers/ldap.c:406 +#: plugins/sudoers/ldap.c:428 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: el port és massa gran" -#: plugins/sudoers/ldap.c:431 -msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" -msgstr "sudo_ldap_conf_add_ports: s'ha exhaurit l'espai quan s'estava expandint hostbuf" - -#: plugins/sudoers/ldap.c:464 +#: plugins/sudoers/ldap.c:488 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "tipus d'uri LDAP no suportat: %s" -#: plugins/sudoers/ldap.c:495 +#: plugins/sudoers/ldap.c:515 msgid "unable to mix ldap and ldaps URIs" msgstr "no s'han pogut barrejar el ldap i els ldaps URIs " -#: plugins/sudoers/ldap.c:499 plugins/sudoers/ldap.c:532 +#: plugins/sudoers/ldap.c:519 plugins/sudoers/ldap.c:555 msgid "starttls not supported when using ldaps" msgstr "starttls no suportat quan s'està usant ldaps" -#: plugins/sudoers/ldap.c:517 -msgid "sudo_ldap_parse_uri: out of space building hostbuf" -msgstr "sudo_ldap_parse_uri: s'ha exhaurit l'espai construint hostbuf" - -#: plugins/sudoers/ldap.c:599 +#: plugins/sudoers/ldap.c:626 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "no s'ha pogut inicialitzar el certificat SSL i la clau db: %s" -#: plugins/sudoers/ldap.c:602 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "heu d'establir TLS_CERT a %s per usar SSL" -#: plugins/sudoers/ldap.c:1093 +#: plugins/sudoers/ldap.c:1138 msgid "unable to get GMT time" msgstr "no s'ha pogut obtenir l'hora GMT" -#: plugins/sudoers/ldap.c:1099 +#: plugins/sudoers/ldap.c:1144 msgid "unable to format timestamp" msgstr "no s'ha pogut donar format a la marca horària" -#: plugins/sudoers/ldap.c:1107 -msgid "unable to build time filter" -msgstr "no s'ha pogut construir el filtre de temps" - -#: plugins/sudoers/ldap.c:1326 -msgid "sudo_ldap_build_pass1 allocation mismatch" -msgstr "discordança d'assignació de sudo_ldap_build_pass1" - -#: plugins/sudoers/ldap.c:1469 +#: plugins/sudoers/ldap.c:1830 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:1963 +#: plugins/sudoers/ldap.c:2372 #, c-format msgid "" "\n" @@ -834,7 +987,7 @@ "\n" "Rol LDAP: %s\n" -#: plugins/sudoers/ldap.c:1965 +#: plugins/sudoers/ldap.c:2374 #, c-format msgid "" "\n" @@ -843,108 +996,108 @@ "\n" "Rol LDAP: DESCONEGUT\n" -#: plugins/sudoers/ldap.c:2012 +#: plugins/sudoers/ldap.c:2421 #, c-format msgid " Order: %s\n" msgstr " Ordre: %s\n" -#: plugins/sudoers/ldap.c:2020 plugins/sudoers/parse.c:506 -#: plugins/sudoers/sssd.c:1298 +#: plugins/sudoers/ldap.c:2429 plugins/sudoers/parse.c:555 +#: plugins/sudoers/sssd.c:1417 #, c-format msgid " Commands:\n" msgstr " Ordres:\n" -#: plugins/sudoers/ldap.c:2570 +#: plugins/sudoers/ldap.c:2993 #, c-format msgid "unable to initialize LDAP: %s" msgstr "no s'ha pogut inicialitzar LDAP: %s" -#: plugins/sudoers/ldap.c:2612 +#: plugins/sudoers/ldap.c:3029 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "s'ha especificat start_tls però les biblioteques LDAP no donen suport a ldap_start_tls_s() o ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:2845 +#: plugins/sudoers/ldap.c:3286 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "atribut sudoOrder no vàlid: %s" -#: plugins/sudoers/linux_audit.c:61 +#: plugins/sudoers/linux_audit.c:52 msgid "unable to open audit system" msgstr "no s'ha pogut obrir el sistema d'auditoria" -#: plugins/sudoers/linux_audit.c:100 +#: plugins/sudoers/linux_audit.c:93 msgid "unable to send audit message" msgstr "no s'ha pogut enviar el missatge d'auditoria" -#: plugins/sudoers/logging.c:134 +#: plugins/sudoers/logging.c:106 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: plugins/sudoers/logging.c:162 +#: plugins/sudoers/logging.c:134 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s : (ordre continuada) %s" -#: plugins/sudoers/logging.c:187 +#: plugins/sudoers/logging.c:159 #, c-format msgid "unable to open log file: %s: %s" msgstr "no s'ha pogut obrir el fitxer de registre: %s: %s" -#: plugins/sudoers/logging.c:190 +#: plugins/sudoers/logging.c:162 #, c-format msgid "unable to lock log file: %s: %s" msgstr "no s'ha pogut bloquejar el fitxer de registre: %s: %s" -#: plugins/sudoers/logging.c:242 +#: plugins/sudoers/logging.c:211 msgid "No user or host" msgstr "No hi ha usuari o amfitrió" -#: plugins/sudoers/logging.c:244 +#: plugins/sudoers/logging.c:213 msgid "validation failure" msgstr "ha fallat la validació" -#: plugins/sudoers/logging.c:251 +#: plugins/sudoers/logging.c:220 msgid "user NOT in sudoers" msgstr "l'usuari NO ESTÀ als sudoers" -#: plugins/sudoers/logging.c:253 +#: plugins/sudoers/logging.c:222 msgid "user NOT authorized on host" msgstr "l'usuari NO està autoritzat a l'amfitrió" -#: plugins/sudoers/logging.c:255 +#: plugins/sudoers/logging.c:224 msgid "command not allowed" msgstr "ordre no permesa" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:259 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "%s no està al fitxer sudoers. S'informarà d'aquest incident.\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:262 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "%s no té permís per executar sudo a %s. S'informarà d'aquest incident.\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:266 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Ho sentim, l'usuari %s no pot executar sudo a %s.\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:269 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "Ho sentim, l'usuari %s no pot executar '%s%s%s' com a %s%s%s a %s.\n" -#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:407 -#: plugins/sudoers/sudoers.c:409 plugins/sudoers/sudoers.c:411 -#: plugins/sudoers/sudoers.c:413 plugins/sudoers/sudoers.c:1091 -#: plugins/sudoers/sudoers.c:1092 +#: plugins/sudoers/logging.c:306 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1222 +#: plugins/sudoers/sudoers.c:1224 #, c-format msgid "%s: command not found" msgstr "%s: no s'ha trobar l'ordre" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:403 +#: plugins/sudoers/logging.c:308 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring `%s' found in '.'\n" @@ -953,71 +1106,71 @@ "s'ignorarà `%s' trobat a '.'\n" "Useu `sudo ./%s' si aquest és el `%s' que voleu executar." -#: plugins/sudoers/logging.c:353 +#: plugins/sudoers/logging.c:325 msgid "authentication failure" msgstr "ha fallat l'autenticació" -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:351 msgid "a password is required" msgstr "es requereix una contrasenya" -#: plugins/sudoers/logging.c:446 plugins/sudoers/logging.c:501 +#: plugins/sudoers/logging.c:422 plugins/sudoers/logging.c:484 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "%u intent incorrecte de contrasenya" msgstr[1] "%u intents incorrectes de contrasenya" -#: plugins/sudoers/logging.c:584 +#: plugins/sudoers/logging.c:572 msgid "unable to fork" msgstr "no es pot bifurcar" -#: plugins/sudoers/logging.c:592 plugins/sudoers/logging.c:648 +#: plugins/sudoers/logging.c:580 plugins/sudoers/logging.c:640 #, c-format msgid "unable to fork: %m" msgstr "no est pot bifurcar: %m" -#: plugins/sudoers/logging.c:638 +#: plugins/sudoers/logging.c:630 #, c-format msgid "unable to open pipe: %m" msgstr "no es pot obrir la canonada: %m" -#: plugins/sudoers/logging.c:663 +#: plugins/sudoers/logging.c:655 #, c-format msgid "unable to dup stdin: %m" msgstr "no es pot duplicar l'entrada estàndard: %m" -#: plugins/sudoers/logging.c:698 +#: plugins/sudoers/logging.c:693 #, c-format msgid "unable to execute %s: %m" msgstr "no es pot executar %s: %m" -#: plugins/sudoers/match.c:627 +#: plugins/sudoers/match.c:606 #, c-format msgid "unsupported digest type %d for %s" msgstr "tipus de resum no suportat %d per a %s" -#: plugins/sudoers/match.c:656 +#: plugins/sudoers/match.c:639 #, c-format msgid "%s: read error" msgstr "%s: error de lectura" -#: plugins/sudoers/match.c:670 +#: plugins/sudoers/match.c:653 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "digest per a %s (%s) no està en forma %s" -#: plugins/sudoers/parse.c:116 +#: plugins/sudoers/parse.c:114 #, c-format msgid "parse error in %s near line %d" msgstr "error d'anàlisi a %s a prop de la línia %d" -#: plugins/sudoers/parse.c:119 +#: plugins/sudoers/parse.c:117 #, c-format msgid "parse error in %s" msgstr "error d'anàlisi a la línia %s" -#: plugins/sudoers/parse.c:453 +#: plugins/sudoers/parse.c:502 #, c-format msgid "" "\n" @@ -1026,49 +1179,41 @@ "\n" "Entrada de sudoers:\n" -#: plugins/sudoers/parse.c:454 +#: plugins/sudoers/parse.c:503 #, c-format msgid " RunAsUsers: " msgstr " RunAsUsers: " -#: plugins/sudoers/parse.c:468 +#: plugins/sudoers/parse.c:517 #, c-format msgid " RunAsGroups: " msgstr " RunAsGroups: " -#: plugins/sudoers/parse.c:477 +#: plugins/sudoers/parse.c:526 #, c-format msgid " Options: " msgstr " Opcions: " -#: plugins/sudoers/policy.c:109 plugins/sudoers/policy.c:118 -#: plugins/sudoers/policy.c:127 plugins/sudoers/policy.c:151 -#: plugins/sudoers/policy.c:267 plugins/sudoers/policy.c:287 -#: plugins/sudoers/policy.c:296 plugins/sudoers/policy.c:326 -#: plugins/sudoers/policy.c:336 plugins/sudoers/policy.c:345 -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" +#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:253 +msgid "unable to parse network address list" +msgstr "no s'ha pogut analitzar la llista d'adreces de xarxa" -#: plugins/sudoers/policy.c:559 plugins/sudoers/visudo.c:767 +#: plugins/sudoers/policy.c:640 plugins/sudoers/visudo.c:840 #, c-format msgid "unable to execute %s" msgstr "no s'ha pogut executar %s" -#: plugins/sudoers/policy.c:689 +#: plugins/sudoers/policy.c:773 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Versió del connector de política de sudoers %s\n" -#: plugins/sudoers/policy.c:691 +#: plugins/sudoers/policy.c:775 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Versió de gramàtica del fitxer sudoers %d\n" -#: plugins/sudoers/policy.c:695 +#: plugins/sudoers/policy.c:779 #, c-format msgid "" "\n" @@ -1077,374 +1222,411 @@ "\n" "Camí del sudoers: %s\n" -#: plugins/sudoers/policy.c:698 +#: plugins/sudoers/policy.c:782 #, c-format msgid "nsswitch path: %s\n" msgstr "camí del nsswitch: %s\n" -#: plugins/sudoers/policy.c:700 +#: plugins/sudoers/policy.c:784 #, c-format msgid "ldap.conf path: %s\n" msgstr "camí de ldap.conf: %s\n" -#: plugins/sudoers/policy.c:701 +#: plugins/sudoers/policy.c:785 #, c-format msgid "ldap.secret path: %s\n" msgstr "camí del ldap.secret: %s\n" -#: plugins/sudoers/pwutil.c:149 +#: plugins/sudoers/policy.c:818 +#, c-format +msgid "unable to register hook of type %d (version %d.%d)" +msgstr "no s'ha pogut registrar el lligam de tipus %d (versió %d.%d)" + +#: plugins/sudoers/pwutil.c:136 plugins/sudoers/pwutil.c:153 +#, c-format +msgid "unable to cache uid %u, out of memory" +msgstr "no s'ha pogut posar al cau l'uid %u, s'ha exhaurit la memòria" + +#: plugins/sudoers/pwutil.c:147 #, c-format msgid "unable to cache uid %u, already exists" msgstr "no s'ha pogut posar l'uid %u al cau, ja existeix" -#: plugins/sudoers/pwutil.c:194 +#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:207 +#: plugins/sudoers/pwutil.c:250 plugins/sudoers/pwutil.c:294 +#, c-format +msgid "unable to cache user %s, out of memory" +msgstr "no s'ha pogut posar l'usuari %s, s'ha exhaurit la memòria" + +#: plugins/sudoers/pwutil.c:202 #, c-format msgid "unable to cache user %s, already exists" msgstr "no s'ha pogut posar l'usuari %s al cau, ja existeix" -#: plugins/sudoers/pwutil.c:400 +#: plugins/sudoers/pwutil.c:427 plugins/sudoers/pwutil.c:444 +#, c-format +msgid "unable to cache gid %u, out of memory" +msgstr "no s'ha pogut posar el gid %u al cau, s'ha exhaurit la memòria" + +#: plugins/sudoers/pwutil.c:438 #, c-format msgid "unable to cache gid %u, already exists" msgstr "no s'ha pogut posar el gid %u al cau, ja existeix" -#: plugins/sudoers/pwutil.c:439 +#: plugins/sudoers/pwutil.c:476 plugins/sudoers/pwutil.c:492 +#: plugins/sudoers/pwutil.c:524 plugins/sudoers/pwutil.c:565 +#, c-format +msgid "unable to cache group %s, out of memory" +msgstr "no s'ha pogut posar el grup %s al cau, s'ha exhaurit" + +#: plugins/sudoers/pwutil.c:487 #, c-format msgid "unable to cache group %s, already exists" msgstr "no s'ha pogut posar el grup %s al cau, ja existeix" -#: plugins/sudoers/pwutil.c:605 plugins/sudoers/pwutil.c:631 +#: plugins/sudoers/pwutil.c:676 plugins/sudoers/pwutil.c:710 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "no s'ha pogut la llista de grups al cau per a %s, ja existeix" -#: plugins/sudoers/pwutil.c:627 +#: plugins/sudoers/pwutil.c:682 plugins/sudoers/pwutil.c:715 +#, c-format +msgid "unable to cache group list for %s, out of memory" +msgstr "no s'ha pogut la llista de grups al cau per a %s, s'ha exhaurit la memòria" + +#: plugins/sudoers/pwutil.c:705 #, c-format msgid "unable to parse groups for %s" msgstr "no s'han pogut analitzar els grups per a %s" -#: plugins/sudoers/set_perms.c:122 plugins/sudoers/set_perms.c:447 -#: plugins/sudoers/set_perms.c:850 plugins/sudoers/set_perms.c:1147 -#: plugins/sudoers/set_perms.c:1439 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 +#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 +#: plugins/sudoers/set_perms.c:1430 msgid "perm stack overflow" msgstr "desbordament de la pila de permisos" -#: plugins/sudoers/set_perms.c:130 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:1076 -#: plugins/sudoers/set_perms.c:1155 plugins/sudoers/set_perms.c:1372 -#: plugins/sudoers/set_perms.c:1447 plugins/sudoers/set_perms.c:1536 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 +#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 +#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 +#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 +#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 msgid "perm stack underflow" msgstr "subdesbordament de la pila de permisos" -#: plugins/sudoers/set_perms.c:189 plugins/sudoers/set_perms.c:502 -#: plugins/sudoers/set_perms.c:1206 plugins/sudoers/set_perms.c:1479 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:493 +#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 msgid "unable to change to root gid" msgstr "no s'ha pogut canvir el gid de l'usuari primari" -#: plugins/sudoers/set_perms.c:278 plugins/sudoers/set_perms.c:599 -#: plugins/sudoers/set_perms.c:987 plugins/sudoers/set_perms.c:1283 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:590 +#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 msgid "unable to change to runas gid" msgstr "no s'ha pogut canviar el gid runas" -#: plugins/sudoers/set_perms.c:283 plugins/sudoers/set_perms.c:604 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:595 +#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 msgid "unable to set runas group vector" msgstr "no s'ha pogut configurar el vector de grup runas" -#: plugins/sudoers/set_perms.c:294 plugins/sudoers/set_perms.c:615 -#: plugins/sudoers/set_perms.c:1001 plugins/sudoers/set_perms.c:1297 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:606 +#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 msgid "unable to change to runas uid" msgstr "no s'ha pogut canviar l'uid runas" -#: plugins/sudoers/set_perms.c:312 plugins/sudoers/set_perms.c:633 -#: plugins/sudoers/set_perms.c:1017 plugins/sudoers/set_perms.c:1313 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:624 +#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 msgid "unable to change to sudoers gid" msgstr "no s'ha pogut canvir el gid del sudoers" -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 msgid "too many processes" msgstr "massa processos" -#: plugins/sudoers/solaris_audit.c:48 +#: plugins/sudoers/solaris_audit.c:51 msgid "unable to get current working directory" msgstr "no s'ha pogut obtenir el directori actual de treball" -#: plugins/sudoers/solaris_audit.c:56 +#: plugins/sudoers/solaris_audit.c:59 #, c-format msgid "truncated audit path user_cmnd: %s" msgstr "camí truncat d'auditoria use_cmd: %s" -#: plugins/sudoers/solaris_audit.c:63 +#: plugins/sudoers/solaris_audit.c:66 #, c-format msgid "truncated audit path argv[0]: %s" msgstr "camí truncat d'auditoria argv[0]: %s" -#: plugins/sudoers/solaris_audit.c:112 +#: plugins/sudoers/solaris_audit.c:115 msgid "audit_failure message too long" msgstr "missatge audit_failure massa llarg" -#: plugins/sudoers/sssd.c:253 +#: plugins/sudoers/sssd.c:333 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "no s'ha pogut inicialitzar la font del SSS. Està el SSSD instal·lat al vostre sistema?" -#: plugins/sudoers/sssd.c:260 plugins/sudoers/sssd.c:268 -#: plugins/sudoers/sssd.c:276 plugins/sudoers/sssd.c:284 -#: plugins/sudoers/sssd.c:292 +#: plugins/sudoers/sssd.c:341 plugins/sudoers/sssd.c:350 +#: plugins/sudoers/sssd.c:359 plugins/sudoers/sssd.c:368 +#: plugins/sudoers/sssd.c:377 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "no s'ha pogut trobar el símbol \"%s\" a %s" -#: plugins/sudoers/sudo_nss.c:285 +#: plugins/sudoers/sudo_nss.c:290 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Entrades predeterminades concordants per a %s a %s:\n" -#: plugins/sudoers/sudo_nss.c:298 +#: plugins/sudoers/sudo_nss.c:308 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Runas i valors predeterminats específics d'ordres per a %s:\n" -#: plugins/sudoers/sudo_nss.c:311 +#: plugins/sudoers/sudo_nss.c:326 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "L'usuari %s pot executar les ordres següents a %s:\n" -#: plugins/sudoers/sudo_nss.c:320 +#: plugins/sudoers/sudo_nss.c:339 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "L'usuari %s no té permisos per executar sudo a %s.\n" -#: plugins/sudoers/sudoers.c:160 plugins/sudoers/sudoers.c:201 -#: plugins/sudoers/sudoers.c:726 +#: plugins/sudoers/sudoers.c:172 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/visudo.c:223 plugins/sudoers/visudo.c:566 +msgid "unable to initialize sudoers default values" +msgstr "no s'han pogut inicialitzar el valors predeterminats dels sudoers" + +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:239 +#: plugins/sudoers/sudoers.c:833 msgid "problem with defaults entries" msgstr "hi ha un problema amb les entrades predeterminades" -#: plugins/sudoers/sudoers.c:167 +#: plugins/sudoers/sudoers.c:205 msgid "no valid sudoers sources found, quitting" msgstr "no s'han trobat fonts vàlides de sudoers, se sortirà" -#: plugins/sudoers/sudoers.c:233 +#: plugins/sudoers/sudoers.c:275 msgid "sudoers specifies that root is not allowed to sudo" msgstr "el fitxer sudoers especifica que l'usuari primar no pot executar sudo" -#: plugins/sudoers/sudoers.c:278 +#: plugins/sudoers/sudoers.c:332 msgid "you are not permitted to use the -C option" msgstr "no teniu permisos per usar l'opció -C" -#: plugins/sudoers/sudoers.c:336 +#: plugins/sudoers/sudoers.c:396 #, c-format msgid "timestamp owner (%s): No such user" msgstr "propietari de la marca horària (%s): No existeix aquest usuari" -#: plugins/sudoers/sudoers.c:350 +#: plugins/sudoers/sudoers.c:410 msgid "no tty" msgstr "no hi ha una terminal" -#: plugins/sudoers/sudoers.c:351 +#: plugins/sudoers/sudoers.c:411 msgid "sorry, you must have a tty to run sudo" msgstr "ho sentim, heu de tenir una terminal per executar sudo" -#: plugins/sudoers/sudoers.c:402 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "ordre al directori actual" -#: plugins/sudoers/sudoers.c:422 +#: plugins/sudoers/sudoers.c:486 msgid "sorry, you are not allowed to preserve the environment" msgstr "ho sentim, no teniu permisos per preserver l'entorn" -#: plugins/sudoers/sudoers.c:674 +#: plugins/sudoers/sudoers.c:778 msgid "command too long" msgstr "ordre massa llarga" -#: plugins/sudoers/sudoers.c:779 plugins/sudoers/visudo.c:327 -#: plugins/sudoers/visudo.c:593 +#: plugins/sudoers/sudoers.c:886 plugins/sudoers/visudo.c:426 +#: plugins/sudoers/visudo.c:666 #, c-format msgid "unable to stat %s" msgstr "no s'ha pogut accedir %s" -#: plugins/sudoers/sudoers.c:783 +#: plugins/sudoers/sudoers.c:890 #, c-format msgid "%s is not a regular file" msgstr "%s no és un fitxer regular" -#: plugins/sudoers/sudoers.c:787 plugins/sudoers/timestamp.c:289 toke.l:945 +#: plugins/sudoers/sudoers.c:894 plugins/sudoers/timestamp.c:225 toke.l:947 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s és propietat de l'uid %u, hauria de ser %u" -#: plugins/sudoers/sudoers.c:791 toke.l:952 +#: plugins/sudoers/sudoers.c:898 toke.l:954 #, c-format msgid "%s is world writable" msgstr "%s te permís universal d'escriptura" -#: plugins/sudoers/sudoers.c:795 toke.l:957 +#: plugins/sudoers/sudoers.c:902 toke.l:959 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s és propietat del gid %u, hauria de ser %u" -#: plugins/sudoers/sudoers.c:826 +#: plugins/sudoers/sudoers.c:933 #, c-format msgid "only root can use `-c %s'" msgstr "sols l'usuari primari pot usar `-c %s'" -#: plugins/sudoers/sudoers.c:845 +#: plugins/sudoers/sudoers.c:952 #, c-format msgid "unknown login class: %s" msgstr "classe desconeguda d'inici de sessió: %s" -#: plugins/sudoers/sudoers.c:882 +#: plugins/sudoers/sudoers.c:1031 plugins/sudoers/sudoers.c:1059 #, c-format msgid "unable to resolve host %s" msgstr "no s'ha pogut resoldre l'amfitrió %s" -#: plugins/sudoers/sudoers.c:949 plugins/sudoers/testsudoers.c:387 +#: plugins/sudoers/sudoers.c:1126 plugins/sudoers/testsudoers.c:385 #, c-format msgid "unknown group: %s" msgstr "grup desconegut: %s" -#: plugins/sudoers/sudoreplay.c:276 +#: plugins/sudoers/sudoreplay.c:232 #, c-format msgid "invalid filter option: %s" msgstr "opció no vàlida de filtre: %s" -#: plugins/sudoers/sudoreplay.c:289 +#: plugins/sudoers/sudoreplay.c:245 #, c-format msgid "invalid max wait: %s" msgstr "espera màxima no vàlida: %s" -#: plugins/sudoers/sudoreplay.c:295 +#: plugins/sudoers/sudoreplay.c:251 #, c-format msgid "invalid speed factor: %s" msgstr "factor no vàlid de velocitat: %s" -#: plugins/sudoers/sudoreplay.c:298 plugins/sudoers/visudo.c:184 +#: plugins/sudoers/sudoreplay.c:254 plugins/sudoers/visudo.c:180 #, c-format msgid "%s version %s\n" msgstr "%s versió %s\n" -#: plugins/sudoers/sudoreplay.c:330 +#: plugins/sudoers/sudoreplay.c:286 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/sincronització: %s" -#: plugins/sudoers/sudoreplay.c:336 +#: plugins/sudoers/sudoreplay.c:292 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/sincronització: %s" -#: plugins/sudoers/sudoreplay.c:352 +#: plugins/sudoers/sudoreplay.c:308 #, c-format msgid "Replaying sudo session: %s\n" msgstr "S'està tornant a reproduir la sessió sudo: %s\n" -#: plugins/sudoers/sudoreplay.c:358 +#: plugins/sudoers/sudoreplay.c:314 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Advertiment: el vostre terminal és massa petit per reproduir apropiadament el registre.\n" -#: plugins/sudoers/sudoreplay.c:359 +#: plugins/sudoers/sudoreplay.c:315 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "La geometria del registre és %d x %d, la geometria del vostre terminal és %d x %d." -#: plugins/sudoers/sudoreplay.c:414 +#: plugins/sudoers/sudoreplay.c:368 msgid "unable to set tty to raw mode" msgstr "no s'ha pogut configurar el terminal a mode de dades en brut" -#: plugins/sudoers/sudoreplay.c:445 +#: plugins/sudoers/sudoreplay.c:401 #, c-format msgid "invalid timing file line: %s" msgstr "línia no vàlida de fitxer de sincronització: %s" -#: plugins/sudoers/sudoreplay.c:651 plugins/sudoers/sudoreplay.c:676 +#: plugins/sudoers/sudoreplay.c:611 plugins/sudoers/sudoreplay.c:636 #, c-format msgid "ambiguous expression \"%s\"" msgstr "expressió ambigua \"%s\"" -#: plugins/sudoers/sudoreplay.c:698 +#: plugins/sudoers/sudoreplay.c:658 msgid "unmatched ')' in expression" msgstr "')' sense concordança a l'expressió" -#: plugins/sudoers/sudoreplay.c:702 +#: plugins/sudoers/sudoreplay.c:662 #, c-format msgid "unknown search term \"%s\"" msgstr "terme desconegut de cerca \"%s\"" -#: plugins/sudoers/sudoreplay.c:716 +#: plugins/sudoers/sudoreplay.c:677 #, c-format msgid "%s requires an argument" msgstr "%s requereix un argument" -#: plugins/sudoers/sudoreplay.c:720 plugins/sudoers/sudoreplay.c:1092 +#: plugins/sudoers/sudoreplay.c:680 plugins/sudoers/sudoreplay.c:1060 #, c-format msgid "invalid regular expression: %s" msgstr "expressió regular no vàlida: %s" -#: plugins/sudoers/sudoreplay.c:726 +#: plugins/sudoers/sudoreplay.c:684 #, c-format msgid "could not parse date \"%s\"" msgstr "no s'ha pogut analitzar la data \"%s\"" -#: plugins/sudoers/sudoreplay.c:735 +#: plugins/sudoers/sudoreplay.c:693 msgid "unmatched '(' in expression" msgstr "'(' sense concordança a l'expressió" -#: plugins/sudoers/sudoreplay.c:737 +#: plugins/sudoers/sudoreplay.c:695 msgid "illegal trailing \"or\"" msgstr "\"or\" final il·legal" -#: plugins/sudoers/sudoreplay.c:739 +#: plugins/sudoers/sudoreplay.c:697 msgid "illegal trailing \"!\"" msgstr "\"!\" final il·legal" -#: plugins/sudoers/sudoreplay.c:792 +#: plugins/sudoers/sudoreplay.c:746 #, c-format msgid "unknown search type %d" msgstr "tipus desconegut de cerca %d" -#: plugins/sudoers/sudoreplay.c:829 +#: plugins/sudoers/sudoreplay.c:784 #, c-format msgid "%s: invalid log file" msgstr "%s: fitxer no vàlid de registre" -#: plugins/sudoers/sudoreplay.c:847 +#: plugins/sudoers/sudoreplay.c:802 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: no hi ha el camp de marca horària " -#: plugins/sudoers/sudoreplay.c:854 +#: plugins/sudoers/sudoreplay.c:809 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: marca horària %s: %s" -#: plugins/sudoers/sudoreplay.c:861 +#: plugins/sudoers/sudoreplay.c:816 #, c-format msgid "%s: user field is missing" msgstr "%s: no hi ha el camp d'usuari runas" -#: plugins/sudoers/sudoreplay.c:869 +#: plugins/sudoers/sudoreplay.c:825 #, c-format msgid "%s: runas user field is missing" msgstr "%s: no hi ha el camp del grup runas" -#: plugins/sudoers/sudoreplay.c:877 +#: plugins/sudoers/sudoreplay.c:834 #, c-format msgid "%s: runas group field is missing" msgstr "%s: no es troba el camp del grup runas" -#: plugins/sudoers/sudoreplay.c:1232 +#: plugins/sudoers/sudoreplay.c:1197 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "ús: %s [-h] [-d dir] [-m num] [-s num] ID\n" -#: plugins/sudoers/sudoreplay.c:1235 +#: plugins/sudoers/sudoreplay.c:1200 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "usage: %s [-h] [-d dir] -l [cerca l'expressió]\n" -#: plugins/sudoers/sudoreplay.c:1244 +#: plugins/sudoers/sudoreplay.c:1209 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1453,7 +1635,7 @@ "%s - reprodueix els registres de la sessió sudo\n" "\n" -#: plugins/sudoers/sudoreplay.c:1246 +#: plugins/sudoers/sudoreplay.c:1211 msgid "" "\n" "Options:\n" @@ -1476,11 +1658,11 @@ " -s, --speed=num accelera o alenteix la sortida\n" " -V, --version mostra la versió d'informació i surt" -#: plugins/sudoers/testsudoers.c:326 +#: plugins/sudoers/testsudoers.c:324 msgid "\thost unmatched" msgstr "\tamfitrió sense concordança" -#: plugins/sudoers/testsudoers.c:329 +#: plugins/sudoers/testsudoers.c:327 msgid "" "\n" "Command allowed" @@ -1488,7 +1670,7 @@ "\n" "Ordre permesa" -#: plugins/sudoers/testsudoers.c:330 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command denied" @@ -1496,7 +1678,7 @@ "\n" "Ordre denegada" -#: plugins/sudoers/testsudoers.c:330 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command unmatched" @@ -1504,114 +1686,129 @@ "\n" "Ordre sense concordança" -#: plugins/sudoers/timestamp.c:197 -#, c-format -msgid "unable to truncate time stamp file to %lld bytes" -msgstr "no s'ha pogut truncar el fitxer de marca horària a %lld bytes" - -#: plugins/sudoers/timestamp.c:297 +#: plugins/sudoers/timestamp.c:233 #, c-format msgid "%s is group writable" msgstr "%s és modificable pel grup" -#: plugins/sudoers/timestamp.c:318 +#: plugins/sudoers/timestamp.c:309 #, c-format -msgid "timestamp path too long: %s/%s" -msgstr "el camí de la marca horària és massa llarg: %s/%s" +msgid "unable to truncate time stamp file to %lld bytes" +msgstr "no s'ha pogut truncar el fitxer de marca horària a %lld bytes" + +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:487 plugins/sudoers/visudo.c:493 +msgid "unable to read the clock" +msgstr "no s'ha pogut llegir el rellotge" -#: plugins/sudoers/timestamp.c:498 +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "s'ignorarà la marca horària del futur" -#: plugins/sudoers/timestamp.c:510 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "la marca horària està massa lluny en el futur: %20.20s" -#: plugins/sudoers/timestamp.c:613 plugins/sudoers/timestamp.c:634 +#: plugins/sudoers/timestamp.c:863 +#, c-format +msgid "unable to lock time stamp file %s" +msgstr "no s'ha pogut bloquejar el fitxer de marca horària %s" + +#: plugins/sudoers/timestamp.c:906 plugins/sudoers/timestamp.c:926 #, c-format msgid "lecture status path too long: %s/%s" msgstr "el camí de l'estat de la llissó és massa llarg: %s/%s" -#: plugins/sudoers/visudo.c:186 +#: plugins/sudoers/visudo.c:182 #, c-format msgid "%s grammar version %d\n" msgstr "%s versió de la gramàtica %d\n" -#: plugins/sudoers/visudo.c:257 plugins/sudoers/visudo.c:546 +#: plugins/sudoers/visudo.c:254 plugins/sudoers/visudo.c:618 #, c-format msgid "press return to edit %s: " msgstr "prem la tecla d'introducció per editar %s: " -#: plugins/sudoers/visudo.c:343 plugins/sudoers/visudo.c:349 +#: plugins/sudoers/visudo.c:319 +#, c-format +msgid "specified editor (%s) doesn't exist" +msgstr "l'editor especificat (%s) no existeix" + +#: plugins/sudoers/visudo.c:337 +#, c-format +msgid "no editor found (editor path = %s)" +msgstr "no s'ha trobat un editor (el camí de l'editor = %s)" + +#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:454 msgid "write error" msgstr "error d'escriptura" -#: plugins/sudoers/visudo.c:433 +#: plugins/sudoers/visudo.c:500 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "no s'ha pogut accedir al fitxer temporal (%s), no s'ha modificat %s" -#: plugins/sudoers/visudo.c:438 +#: plugins/sudoers/visudo.c:507 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "fitxer temporal amb longitud nul·la (%s), no s'ha modificat %s" -#: plugins/sudoers/visudo.c:444 +#: plugins/sudoers/visudo.c:513 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "l'editor (%s) ha fallat, no s'ha modificat %s" -#: plugins/sudoers/visudo.c:466 +#: plugins/sudoers/visudo.c:535 #, c-format msgid "%s unchanged" msgstr "no s'ha modificat %s" -#: plugins/sudoers/visudo.c:491 +#: plugins/sudoers/visudo.c:561 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "no s'ha pogut reobrir el fitxer temporal (%s), no s'ha modificat %s" -#: plugins/sudoers/visudo.c:501 +#: plugins/sudoers/visudo.c:572 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "no s'ha pogut analitzar el fitxer temporal (%s), error desconegut" -#: plugins/sudoers/visudo.c:537 +#: plugins/sudoers/visudo.c:609 #, c-format msgid "internal error, unable to find %s in list!" msgstr "error intern, no s'ha pogut trobar %s a la llista!" -#: plugins/sudoers/visudo.c:595 plugins/sudoers/visudo.c:604 +#: plugins/sudoers/visudo.c:668 plugins/sudoers/visudo.c:677 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "no s'ha pogut establir (uid, gid) de %s a (%u, %u)" -#: plugins/sudoers/visudo.c:599 plugins/sudoers/visudo.c:609 +#: plugins/sudoers/visudo.c:672 plugins/sudoers/visudo.c:682 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "no s'ha pogut canviar el mode de %s a 0%o" -#: plugins/sudoers/visudo.c:626 +#: plugins/sudoers/visudo.c:699 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s i %s no estan al mateix sistema de fitxers, s'usarà mv per reanomenar" -#: plugins/sudoers/visudo.c:640 +#: plugins/sudoers/visudo.c:713 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "l'ordre ha fallat: '%s %s %s', no s'ha modificat %s" -#: plugins/sudoers/visudo.c:650 +#: plugins/sudoers/visudo.c:723 #, c-format msgid "error renaming %s, %s unchanged" msgstr "error quan s'estava reanomenant %s, no s'ha modificat %s" -#: plugins/sudoers/visudo.c:712 +#: plugins/sudoers/visudo.c:785 msgid "What now? " msgstr "Què fem ara? " -#: plugins/sudoers/visudo.c:726 +#: plugins/sudoers/visudo.c:799 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1623,87 +1820,72 @@ " (x) surt sense desar els canvis al fitxer sudoers\n" " (Q) surt i desa el canvis el fitxer sudoers (PERILL!)\n" -#: plugins/sudoers/visudo.c:774 +#: plugins/sudoers/visudo.c:847 #, c-format msgid "unable to run %s" msgstr "no s'ha pogut executar %s" -#: plugins/sudoers/visudo.c:800 +#: plugins/sudoers/visudo.c:877 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: propietari incorrecte (uid, gid) hauria de ser (%uk, %u)\n" -#: plugins/sudoers/visudo.c:807 +#: plugins/sudoers/visudo.c:884 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: permisos dolents, hauria de ser mode 0%o\n" -#: plugins/sudoers/visudo.c:832 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:909 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "failed to parse %s file, unknown error" msgstr "no s'ha pogut analitzar el fitxer %s, error desconegut" -#: plugins/sudoers/visudo.c:848 plugins/sudoers/visudo_json.c:1054 +#: plugins/sudoers/visudo.c:925 plugins/sudoers/visudo_json.c:1041 #, c-format msgid "parse error in %s near line %d\n" msgstr "error d'anàlisi a %s a prop de la línia %d\n" -#: plugins/sudoers/visudo.c:851 plugins/sudoers/visudo_json.c:1057 +#: plugins/sudoers/visudo.c:928 plugins/sudoers/visudo_json.c:1044 #, c-format msgid "parse error in %s\n" msgstr "error d'anàlisi a %s\n" -#: plugins/sudoers/visudo.c:859 plugins/sudoers/visudo.c:866 +#: plugins/sudoers/visudo.c:936 plugins/sudoers/visudo.c:943 #, c-format msgid "%s: parsed OK\n" msgstr "%s: s'analitzat correctament\n" -#: plugins/sudoers/visudo.c:912 +#: plugins/sudoers/visudo.c:990 #, c-format msgid "%s busy, try again later" msgstr "%s està ocupat, proveu un altre cop més tard" -#: plugins/sudoers/visudo.c:956 -#, c-format -msgid "specified editor (%s) doesn't exist" -msgstr "l'editor especificat (%s) no existeix" - -#: plugins/sudoers/visudo.c:979 -#, c-format -msgid "unable to stat editor (%s)" -msgstr "no s'ha pogut accedir l'editor (%s)" - -#: plugins/sudoers/visudo.c:1027 -#, c-format -msgid "no editor found (editor path = %s)" -msgstr "no s'ha trobat un editor (el camí de l'editor = %s)" - -#: plugins/sudoers/visudo.c:1130 +#: plugins/sudoers/visudo.c:1086 #, c-format msgid "Error: cycle in %s `%s'" msgstr "Error: cicle a %s `%s'" -#: plugins/sudoers/visudo.c:1131 +#: plugins/sudoers/visudo.c:1087 #, c-format msgid "Warning: cycle in %s `%s'" msgstr "Advertiment: cicle a %s `%s'" -#: plugins/sudoers/visudo.c:1135 +#: plugins/sudoers/visudo.c:1091 #, c-format msgid "Error: %s `%s' referenced but not defined" msgstr "Error: s'ha referenciat però no s'ha definit %s `%s'" -#: plugins/sudoers/visudo.c:1136 +#: plugins/sudoers/visudo.c:1092 #, c-format msgid "Warning: %s `%s' referenced but not defined" msgstr "Advertiment: s'ha referenciat però no s'ha definit %s `%s'" -#: plugins/sudoers/visudo.c:1275 +#: plugins/sudoers/visudo.c:1235 #, c-format msgid "Warning: unused %s `%s'" msgstr "Advertiment: %s `%s' sense usar" -#: plugins/sudoers/visudo.c:1335 +#: plugins/sudoers/visudo.c:1348 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -1712,7 +1894,7 @@ "%s - edita amb seguretat el fitxer sudoers\n" "\n" -#: plugins/sudoers/visudo.c:1337 +#: plugins/sudoers/visudo.c:1350 msgid "" "\n" "Options:\n" @@ -1734,15 +1916,30 @@ " -V, --version mostra la informació de la versió i surt\n" " -x, --export=output_file escriu el fitxer sudoers en format JSON a output_file" -#: plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo_json.c:1018 #, c-format msgid "%s: input and output files must be different" msgstr "%s: els fitxers d'entrada i de sortida han de ser diferents" -#: toke.l:915 +#: toke.l:918 msgid "too many levels of includes" msgstr "massa nivells d'inclusions" +#~ msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" +#~ msgstr "sudo_ldap_conf_add_ports: s'ha exhaurit l'espai quan s'estava expandint hostbuf" + +#~ msgid "sudo_ldap_parse_uri: out of space building hostbuf" +#~ msgstr "sudo_ldap_parse_uri: s'ha exhaurit l'espai construint hostbuf" + +#~ msgid "sudo_ldap_build_pass1 allocation mismatch" +#~ msgstr "discordança d'assignació de sudo_ldap_build_pass1" + +#~ msgid "timestamp path too long: %s/%s" +#~ msgstr "el camí de la marca horària és massa llarg: %s/%s" + +#~ msgid "unable to stat editor (%s)" +#~ msgstr "no s'ha pogut accedir l'editor (%s)" + #~ msgid "internal error: insufficient space for log line" #~ msgstr "error intern: espai insuficient per a la línia de registre" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/plugins/sudoers/po/cs.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/plugins/sudoers/po/cs.mo differ diff -Nru sudo-1.8.12/plugins/sudoers/po/cs.po sudo-1.8.16/plugins/sudoers/po/cs.po --- sudo-1.8.12/plugins/sudoers/po/cs.po 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/po/cs.po 2016-03-17 16:13:10.000000000 +0000 @@ -1,17 +1,17 @@ # Portable object template file for the sudoers plugin # This file is put in the public domain. # Todd C. Miller , 2011-2013 -# Petr Pisar , 2013, 2014. +# Petr Pisar , 2013, 2014, 2015, 2016. # # (AIX) registry → (AIXový) registr # timestamp → časové údaje # msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.12b3\n" -"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-11-20 13:33-0700\n" -"PO-Revision-Date: 2014-11-23 22:13+0100\n" +"Project-Id-Version: sudoers 1.8.16b1\n" +"Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" +"POT-Creation-Date: 2016-02-19 15:48-0700\n" +"PO-Revision-Date: 2016-02-25 20:34+01:00\n" "Last-Translator: Petr Pisar \n" "Language-Team: Czech \n" "Language: cs\n" @@ -44,46 +44,172 @@ msgid "Sorry, try again." msgstr "Je nám líto, zkuste to znovu." -#: gram.y:379 +#: gram.y:183 gram.y:201 gram.y:207 gram.y:213 gram.y:219 gram.y:225 +#: gram.y:241 gram.y:248 gram.y:255 gram.y:262 gram.y:269 gram.y:285 +#: gram.y:308 gram.y:315 gram.y:322 gram.y:329 gram.y:336 gram.y:391 +#: gram.y:399 gram.y:409 gram.y:439 gram.y:446 gram.y:453 gram.y:460 +#: gram.y:572 gram.y:579 gram.y:588 gram.y:597 gram.y:614 gram.y:670 +#: gram.y:677 gram.y:684 gram.y:692 gram.y:784 gram.y:791 gram.y:798 +#: gram.y:805 gram.y:812 gram.y:838 gram.y:845 gram.y:852 gram.y:1136 +#: gram.y:1143 plugins/sudoers/alias.c:123 plugins/sudoers/alias.c:136 +#: plugins/sudoers/auth/bsdauth.c:141 plugins/sudoers/auth/kerb5.c:119 +#: plugins/sudoers/auth/kerb5.c:145 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/auth/sia.c:59 +#: plugins/sudoers/defaults.c:518 plugins/sudoers/defaults.c:722 +#: plugins/sudoers/defaults.c:882 plugins/sudoers/editor.c:64 +#: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:92 +#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/iolog.c:586 +#: plugins/sudoers/iolog.c:618 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:446 plugins/sudoers/ldap.c:477 +#: plugins/sudoers/ldap.c:529 plugins/sudoers/ldap.c:562 +#: plugins/sudoers/ldap.c:917 plugins/sudoers/ldap.c:1064 +#: plugins/sudoers/ldap.c:1384 plugins/sudoers/ldap.c:1542 +#: plugins/sudoers/ldap.c:1620 plugins/sudoers/ldap.c:1756 +#: plugins/sudoers/ldap.c:1780 plugins/sudoers/ldap.c:1810 +#: plugins/sudoers/ldap.c:1863 plugins/sudoers/ldap.c:1878 +#: plugins/sudoers/ldap.c:1974 plugins/sudoers/ldap.c:2007 +#: plugins/sudoers/ldap.c:2160 plugins/sudoers/ldap.c:2257 +#: plugins/sudoers/ldap.c:3063 plugins/sudoers/ldap.c:3096 +#: plugins/sudoers/ldap.c:3407 plugins/sudoers/ldap.c:3435 +#: plugins/sudoers/ldap.c:3451 plugins/sudoers/ldap.c:3540 +#: plugins/sudoers/ldap.c:3556 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:666 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:508 +#: plugins/sudoers/match.c:544 plugins/sudoers/match.c:742 +#: plugins/sudoers/match.c:799 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:393 +#: plugins/sudoers/policy.c:602 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/sssd.c:160 plugins/sudoers/sssd.c:192 +#: plugins/sudoers/sssd.c:235 plugins/sudoers/sssd.c:242 +#: plugins/sudoers/sssd.c:278 plugins/sudoers/sssd.c:323 +#: plugins/sudoers/sssd.c:920 plugins/sudoers/sssd.c:1053 +#: plugins/sudoers/sudoers.c:159 plugins/sudoers/sudoers.c:294 +#: plugins/sudoers/sudoers.c:304 plugins/sudoers/sudoers.c:312 +#: plugins/sudoers/sudoers.c:365 plugins/sudoers/sudoers.c:663 +#: plugins/sudoers/sudoers.c:749 plugins/sudoers/sudoers.c:793 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:472 +#: plugins/sudoers/sudoreplay.c:668 plugins/sudoers/sudoreplay.c:780 +#: plugins/sudoers/sudoreplay.c:820 plugins/sudoers/sudoreplay.c:829 +#: plugins/sudoers/sudoreplay.c:839 plugins/sudoers/sudoreplay.c:847 +#: plugins/sudoers/sudoreplay.c:851 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1011 plugins/sudoers/testsudoers.c:130 +#: plugins/sudoers/testsudoers.c:188 plugins/sudoers/testsudoers.c:215 +#: plugins/sudoers/testsudoers.c:232 plugins/sudoers/timestamp.c:390 +#: plugins/sudoers/timestamp.c:426 plugins/sudoers/timestamp.c:838 +#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 +#: plugins/sudoers/toke_util.c:147 plugins/sudoers/visudo.c:152 +#: plugins/sudoers/visudo.c:213 plugins/sudoers/visudo.c:298 +#: plugins/sudoers/visudo.c:304 plugins/sudoers/visudo.c:434 +#: plugins/sudoers/visudo.c:980 plugins/sudoers/visudo.c:1024 +#: plugins/sudoers/visudo.c:1120 toke.l:785 toke.l:806 toke.l:816 toke.l:924 +#: toke.l:1082 +msgid "unable to allocate memory" +msgstr "nelze alokovat paměť" + +#: gram.y:471 msgid "a digest requires a path name" msgstr "kontrolní součet vyžaduje název cesty" -#: plugins/sudoers/alias.c:136 +#: gram.y:1136 gram.y:1143 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/defaults.c:518 +#: plugins/sudoers/defaults.c:722 plugins/sudoers/defaults.c:882 +#: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 +#: plugins/sudoers/editor.c:92 plugins/sudoers/env.c:234 +#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 +#: plugins/sudoers/iolog.c:586 plugins/sudoers/iolog.c:618 +#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:446 +#: plugins/sudoers/ldap.c:477 plugins/sudoers/ldap.c:529 +#: plugins/sudoers/ldap.c:562 plugins/sudoers/ldap.c:917 +#: plugins/sudoers/ldap.c:1064 plugins/sudoers/ldap.c:1384 +#: plugins/sudoers/ldap.c:1542 plugins/sudoers/ldap.c:1620 +#: plugins/sudoers/ldap.c:1756 plugins/sudoers/ldap.c:1780 +#: plugins/sudoers/ldap.c:1810 plugins/sudoers/ldap.c:1863 +#: plugins/sudoers/ldap.c:1878 plugins/sudoers/ldap.c:1974 +#: plugins/sudoers/ldap.c:2007 plugins/sudoers/ldap.c:2160 +#: plugins/sudoers/ldap.c:2257 plugins/sudoers/ldap.c:3063 +#: plugins/sudoers/ldap.c:3096 plugins/sudoers/ldap.c:3407 +#: plugins/sudoers/ldap.c:3434 plugins/sudoers/ldap.c:3450 +#: plugins/sudoers/ldap.c:3540 plugins/sudoers/ldap.c:3556 +#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:508 +#: plugins/sudoers/match.c:544 plugins/sudoers/match.c:742 +#: plugins/sudoers/match.c:799 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:97 +#: plugins/sudoers/policy.c:106 plugins/sudoers/policy.c:115 +#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:250 +#: plugins/sudoers/policy.c:277 plugins/sudoers/policy.c:286 +#: plugins/sudoers/policy.c:325 plugins/sudoers/policy.c:335 +#: plugins/sudoers/policy.c:344 plugins/sudoers/policy.c:393 +#: plugins/sudoers/policy.c:602 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:160 +#: plugins/sudoers/sssd.c:192 plugins/sudoers/sssd.c:235 +#: plugins/sudoers/sssd.c:242 plugins/sudoers/sssd.c:278 +#: plugins/sudoers/sssd.c:323 plugins/sudoers/sssd.c:920 +#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sudoers.c:159 +#: plugins/sudoers/sudoers.c:294 plugins/sudoers/sudoers.c:304 +#: plugins/sudoers/sudoers.c:312 plugins/sudoers/sudoers.c:365 +#: plugins/sudoers/sudoers.c:663 plugins/sudoers/sudoers.c:749 +#: plugins/sudoers/sudoers.c:793 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sudoreplay.c:472 plugins/sudoers/sudoreplay.c:668 +#: plugins/sudoers/sudoreplay.c:780 plugins/sudoers/sudoreplay.c:820 +#: plugins/sudoers/sudoreplay.c:829 plugins/sudoers/sudoreplay.c:839 +#: plugins/sudoers/sudoreplay.c:847 plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:1007 plugins/sudoers/sudoreplay.c:1011 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:188 +#: plugins/sudoers/testsudoers.c:215 plugins/sudoers/testsudoers.c:232 +#: plugins/sudoers/timestamp.c:390 plugins/sudoers/timestamp.c:426 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:147 +#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:213 +#: plugins/sudoers/visudo.c:298 plugins/sudoers/visudo.c:304 +#: plugins/sudoers/visudo.c:434 plugins/sudoers/visudo.c:980 +#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1120 toke.l:785 +#: toke.l:806 toke.l:816 toke.l:924 toke.l:1082 +#, c-format +msgid "%s: %s" +msgstr "%s: %s" + +#: plugins/sudoers/alias.c:132 #, c-format msgid "Alias `%s' already defined" msgstr "Alias „%s“ je již definován" -#: plugins/sudoers/auth/bsdauth.c:75 +#: plugins/sudoers/auth/bsdauth.c:68 #, c-format msgid "unable to get login class for user %s" msgstr "nelze získat přihlašovací třídu uživatele %s" -#: plugins/sudoers/auth/bsdauth.c:80 +#: plugins/sudoers/auth/bsdauth.c:73 msgid "unable to begin bsd authentication" msgstr "nelze zahájit BSD autentizaci" -#: plugins/sudoers/auth/bsdauth.c:88 +#: plugins/sudoers/auth/bsdauth.c:81 msgid "invalid authentication type" msgstr "neplatný druh autentizace" -#: plugins/sudoers/auth/bsdauth.c:97 +#: plugins/sudoers/auth/bsdauth.c:90 msgid "unable to initialize BSD authentication" msgstr "nelze inicializovat BSD autentizaci" -#: plugins/sudoers/auth/fwtk.c:59 +#: plugins/sudoers/auth/fwtk.c:52 msgid "unable to read fwtk config" msgstr "nelze načíst konfiguraci FWTK" -#: plugins/sudoers/auth/fwtk.c:64 +#: plugins/sudoers/auth/fwtk.c:57 msgid "unable to connect to authentication server" msgstr "k autentizačnímu serveru se nelze připojit" -#: plugins/sudoers/auth/fwtk.c:70 plugins/sudoers/auth/fwtk.c:94 -#: plugins/sudoers/auth/fwtk.c:127 +#: plugins/sudoers/auth/fwtk.c:63 plugins/sudoers/auth/fwtk.c:87 +#: plugins/sudoers/auth/fwtk.c:121 msgid "lost connection to authentication server" msgstr "spojení k autentizačnímu serveru ztraceno" -#: plugins/sudoers/auth/fwtk.c:74 +#: plugins/sudoers/auth/fwtk.c:67 #, c-format msgid "" "authentication server error:\n" @@ -92,155 +218,155 @@ "chyba autentizačního serveru:\n" "%s" -#: plugins/sudoers/auth/kerb5.c:116 +#: plugins/sudoers/auth/kerb5.c:111 #, c-format msgid "%s: unable to convert principal to string ('%s'): %s" msgstr "%s: principála nelze převést na řetězec („%s“): %s" -#: plugins/sudoers/auth/kerb5.c:158 +#: plugins/sudoers/auth/kerb5.c:161 #, c-format msgid "%s: unable to parse '%s': %s" msgstr "%s: „%s“ nelze rozebrat: %s" -#: plugins/sudoers/auth/kerb5.c:167 +#: plugins/sudoers/auth/kerb5.c:170 #, c-format msgid "%s: unable to resolve credential cache: %s" msgstr "%s: nelze najít keš s pověřeními: %s" -#: plugins/sudoers/auth/kerb5.c:214 +#: plugins/sudoers/auth/kerb5.c:217 #, c-format msgid "%s: unable to allocate options: %s" msgstr "%s: nelze alokovat volby: %s" -#: plugins/sudoers/auth/kerb5.c:229 +#: plugins/sudoers/auth/kerb5.c:232 #, c-format msgid "%s: unable to get credentials: %s" msgstr "%s: nelze získat pověření: %s" -#: plugins/sudoers/auth/kerb5.c:242 +#: plugins/sudoers/auth/kerb5.c:245 #, c-format msgid "%s: unable to initialize credential cache: %s" msgstr "%s: nelze inicializovat keš s pověřeními: %s" -#: plugins/sudoers/auth/kerb5.c:245 +#: plugins/sudoers/auth/kerb5.c:248 #, c-format msgid "%s: unable to store credential in cache: %s" msgstr "%s: pověření nelze uložit do keše: %s" -#: plugins/sudoers/auth/kerb5.c:309 +#: plugins/sudoers/auth/kerb5.c:312 #, c-format msgid "%s: unable to get host principal: %s" msgstr "%s: nelze získat principála stroje: %s" -#: plugins/sudoers/auth/kerb5.c:323 +#: plugins/sudoers/auth/kerb5.c:326 #, c-format msgid "%s: Cannot verify TGT! Possible attack!: %s" msgstr "%s: TGT nelze ověřit! Podezření na útok!: %s" -#: plugins/sudoers/auth/pam.c:98 +#: plugins/sudoers/auth/pam.c:92 msgid "unable to initialize PAM" msgstr "PAM nelze inicializovat" -#: plugins/sudoers/auth/pam.c:149 +#: plugins/sudoers/auth/pam.c:164 msgid "account validation failure, is your account locked?" msgstr "ověření účtu selhalo, není váš účet zamknutý?" -#: plugins/sudoers/auth/pam.c:153 +#: plugins/sudoers/auth/pam.c:168 msgid "Account or password is expired, reset your password and try again" msgstr "Účtu nebo heslu vypršela platnost, nastavte si nové heslo a zkuste to znovu" -#: plugins/sudoers/auth/pam.c:161 +#: plugins/sudoers/auth/pam.c:176 #, c-format msgid "unable to change expired password: %s" msgstr "prošlé heslo nelze změnit: %s" -#: plugins/sudoers/auth/pam.c:166 +#: plugins/sudoers/auth/pam.c:181 msgid "Password expired, contact your system administrator" msgstr "Heslu vypršela platnost, kontaktujte správce svého systému" -#: plugins/sudoers/auth/pam.c:170 +#: plugins/sudoers/auth/pam.c:185 msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator" msgstr "Účtu vypršela platnost nebo v konfiguraci PAM pro sudo chybí sekce „account“. Kontaktujte správce svého systému" -#: plugins/sudoers/auth/pam.c:187 +#: plugins/sudoers/auth/pam.c:199 #, c-format msgid "PAM authentication error: %s" msgstr "Chyba autentizace PAM: %s" -#: plugins/sudoers/auth/rfc1938.c:103 plugins/sudoers/visudo.c:228 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:218 #, c-format msgid "you do not exist in the %s database" msgstr "v databázi %s neexistujete" -#: plugins/sudoers/auth/securid5.c:80 +#: plugins/sudoers/auth/securid5.c:73 msgid "failed to initialise the ACE API library" msgstr "inicializace knihovny ACE selhala" -#: plugins/sudoers/auth/securid5.c:106 +#: plugins/sudoers/auth/securid5.c:99 msgid "unable to contact the SecurID server" msgstr "nelze kontaktovat server SecurID" -#: plugins/sudoers/auth/securid5.c:115 +#: plugins/sudoers/auth/securid5.c:108 msgid "User ID locked for SecurID Authentication" msgstr "ID uživatele je pro autentizaci SecurID uzamčeno" -#: plugins/sudoers/auth/securid5.c:119 plugins/sudoers/auth/securid5.c:170 +#: plugins/sudoers/auth/securid5.c:112 plugins/sudoers/auth/securid5.c:163 msgid "invalid username length for SecurID" msgstr "neplatná délka uživatelského jména pro SecurID" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:175 +#: plugins/sudoers/auth/securid5.c:116 plugins/sudoers/auth/securid5.c:168 msgid "invalid Authentication Handle for SecurID" msgstr "neplatný deskriptor autentizace pro SecurID" -#: plugins/sudoers/auth/securid5.c:127 +#: plugins/sudoers/auth/securid5.c:120 msgid "SecurID communication failed" msgstr "komunikace se SecurID selhala" -#: plugins/sudoers/auth/securid5.c:131 plugins/sudoers/auth/securid5.c:214 +#: plugins/sudoers/auth/securid5.c:124 plugins/sudoers/auth/securid5.c:211 msgid "unknown SecurID error" msgstr "neznámá chyba SecurID" -#: plugins/sudoers/auth/securid5.c:165 +#: plugins/sudoers/auth/securid5.c:158 msgid "invalid passcode length for SecurID" msgstr "neplatná délka kódu pro SecurID" -#: plugins/sudoers/auth/sia.c:123 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:125 msgid "unable to initialize SIA session" msgstr "nelze inicializovat relaci SIA" -#: plugins/sudoers/auth/sudo_auth.c:115 +#: plugins/sudoers/auth/sudo_auth.c:126 msgid "invalid authentication methods" msgstr "neplatné autentizační metody" -#: plugins/sudoers/auth/sudo_auth.c:117 +#: plugins/sudoers/auth/sudo_auth.c:128 msgid "Invalid authentication methods compiled into sudo! You may not mix standalone and non-standalone authentication." msgstr "Sudo bylo sestaveno s neplatnými autentizačními metodami! Nesmíte míchat samostatnou a nesamostatnou autentizaci." -#: plugins/sudoers/auth/sudo_auth.c:203 plugins/sudoers/auth/sudo_auth.c:252 +#: plugins/sudoers/auth/sudo_auth.c:224 plugins/sudoers/auth/sudo_auth.c:274 msgid "no authentication methods" msgstr "žádné autentizační metody" -#: plugins/sudoers/auth/sudo_auth.c:205 +#: plugins/sudoers/auth/sudo_auth.c:226 msgid "There are no authentication methods compiled into sudo! If you want to turn off authentication, use the --disable-authentication configure option." msgstr "Sudo bylo sestaveno bez autentizačních metod! Chcete-li vypnout autentizaci, použijte při sestavování přepínač --disable-autentizaci." -#: plugins/sudoers/auth/sudo_auth.c:254 +#: plugins/sudoers/auth/sudo_auth.c:276 msgid "Unable to initialize authentication methods." msgstr "Nelze inicializovat metody autentizace." -#: plugins/sudoers/auth/sudo_auth.c:412 +#: plugins/sudoers/auth/sudo_auth.c:442 msgid "Authentication methods:" msgstr "Autentizační metody:" -#: plugins/sudoers/bsm_audit.c:95 plugins/sudoers/bsm_audit.c:184 +#: plugins/sudoers/bsm_audit.c:111 plugins/sudoers/bsm_audit.c:200 msgid "Could not determine audit condition" msgstr "Nebylo možné určit podmínku pro audit" -#: plugins/sudoers/bsm_audit.c:156 plugins/sudoers/bsm_audit.c:244 +#: plugins/sudoers/bsm_audit.c:172 plugins/sudoers/bsm_audit.c:260 msgid "unable to commit audit record" msgstr "auditní zprávu nelze odeslat" -#: plugins/sudoers/check.c:197 +#: plugins/sudoers/check.c:252 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -260,15 +386,15 @@ " 3. S velkými právy přichází velká zodpovědnost.\n" "\n" -#: plugins/sudoers/check.c:240 plugins/sudoers/check.c:250 -#: plugins/sudoers/sudoers.c:599 plugins/sudoers/sudoers.c:628 +#: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 +#: plugins/sudoers/sudoers.c:699 plugins/sudoers/sudoers.c:728 #, c-format msgid "unknown uid: %u" msgstr "neznámé UID: %u" -#: plugins/sudoers/check.c:245 plugins/sudoers/policy.c:683 -#: plugins/sudoers/sudoers.c:955 plugins/sudoers/testsudoers.c:212 -#: plugins/sudoers/testsudoers.c:364 +#: plugins/sudoers/check.c:300 plugins/sudoers/policy.c:774 +#: plugins/sudoers/sudoers.c:1095 plugins/sudoers/testsudoers.c:206 +#: plugins/sudoers/testsudoers.c:361 #, c-format msgid "unknown user: %s" msgstr "neznámý uživatel: %s" @@ -317,535 +443,550 @@ msgstr "Odešle e-mail, když uživatel nemá dovoleno spustit příkaz" #: plugins/sudoers/def_data.c:67 +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:71 msgid "Use a separate timestamp for each user/tty combo" msgstr "Pro každou kombinaci uživatele a TTY použije samostatný časovač" -#: plugins/sudoers/def_data.c:71 +#: plugins/sudoers/def_data.c:75 msgid "Lecture user the first time they run sudo" msgstr "Před prvním použitím sudo proškolí uživatele" -#: plugins/sudoers/def_data.c:75 +#: plugins/sudoers/def_data.c:79 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Soubor obsahující školení k sudo: %s" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:83 msgid "Require users to authenticate by default" msgstr "Standardně vyžaduje, aby se uživatelé autentizovali" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:87 msgid "Root may run sudo" msgstr "Root může spustit sudo" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:91 msgid "Log the hostname in the (non-syslog) log file" msgstr "Do (nesyslogového) protokolu zaznamenává název stroje" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:95 msgid "Log the year in the (non-syslog) log file" msgstr "Do (nesyslogového) protokolu zaznamenává rok" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:99 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Je-li sudo zavoláno bez argumentů, spustí shell" -#: plugins/sudoers/def_data.c:99 +#: plugins/sudoers/def_data.c:103 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Nastaví HOME na cílového uživatele, když se pouští shell s -s" -#: plugins/sudoers/def_data.c:103 +#: plugins/sudoers/def_data.c:107 msgid "Always set $HOME to the target user's home directory" msgstr "Vždy nastaví HOME na domovský adresář cílového uživatele" -#: plugins/sudoers/def_data.c:107 +#: plugins/sudoers/def_data.c:111 msgid "Allow some information gathering to give useful error messages" msgstr "Dovolí sběr některých údajů za účelem užitečných chybových zpráv" -#: plugins/sudoers/def_data.c:111 +#: plugins/sudoers/def_data.c:115 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Vyžaduje v souboru sudoers plně kvalifikované názvy strojů" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:119 msgid "Insult the user when they enter an incorrect password" msgstr "Urazí uživatele, pokud zadá chybné heslo" -#: plugins/sudoers/def_data.c:119 +#: plugins/sudoers/def_data.c:123 msgid "Only allow the user to run sudo if they have a tty" msgstr "Dovolí uživateli spustit sudo, pouze když má TTY" -#: plugins/sudoers/def_data.c:123 +#: plugins/sudoers/def_data.c:127 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo bude dodržovat proměnou prostředí EDITOR" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:131 msgid "Prompt for root's password, not the users's" msgstr "Ptá se heslo roota, ne na heslo uživatele" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:135 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Ptá se na heslo runas_default uživatele, ne na heslo uživatele" -#: plugins/sudoers/def_data.c:135 +#: plugins/sudoers/def_data.c:139 msgid "Prompt for the target user's password, not the users's" msgstr "Ptá se na heslo cílového uživatele, ne na heslo uživatele" -#: plugins/sudoers/def_data.c:139 +#: plugins/sudoers/def_data.c:143 msgid "Apply defaults in the target user's login class if there is one" msgstr "Použije výchozí nastavení v přihlašovací třídě cílového uživatele, existuje-li" -#: plugins/sudoers/def_data.c:143 +#: plugins/sudoers/def_data.c:147 msgid "Set the LOGNAME and USER environment variables" msgstr "Nastaví proměnné prostředí LOGNAME a USER" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:151 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Nastaví pouze efektivní UID na cílového uživatele, nikoliv reálné UID" -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:155 msgid "Don't initialize the group vector to that of the target user" msgstr "Neinicializuje vektor skupin na vektor cílového uživatele" -#: plugins/sudoers/def_data.c:155 +#: plugins/sudoers/def_data.c:159 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Délka zlomu řádků v protokolu (0 pro nezalamování): %u" -#: plugins/sudoers/def_data.c:159 +#: plugins/sudoers/def_data.c:163 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Limit na časové údaje autentizace: %.1f min" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:167 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Limit na výzvu k heslu: %.1f min" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:171 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Počet pokusů na zadání hesla: %u" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:175 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "Umask nebo 0777 pro hodnotu uživatele: 0%o" -#: plugins/sudoers/def_data.c:175 +#: plugins/sudoers/def_data.c:179 #, c-format msgid "Path to log file: %s" msgstr "Cesta k souboru s protokolem: %s" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:183 #, c-format msgid "Path to mail program: %s" msgstr "Cesta k poštovnímu programu: %s" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:187 #, c-format msgid "Flags for mail program: %s" msgstr "Přepínače pro poštovní program: %s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:191 #, c-format msgid "Address to send mail to: %s" msgstr "Adresa, kam zasílat poštu: %s" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:195 #, c-format msgid "Address to send mail from: %s" msgstr "Adrese, ze které zasílat poštu: %s" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:199 #, c-format msgid "Subject line for mail messages: %s" msgstr "Řádek s předmětem pro poštovní zprávy: %s" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:203 #, c-format msgid "Incorrect password message: %s" msgstr "Zpráva při chybném hesle: %s" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:207 #, c-format msgid "Path to lecture status dir: %s" msgstr "Cesta k adresáři se stavy lekcí: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:211 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Cesta k adresáři s časovými údaji autentizace: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:215 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Vlastník adresáře s časovými údaji autentizace: %s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:219 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Uživatelé v této skupině jsou vyjmuti z požadavků na heslo na PATH: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:223 #, c-format msgid "Default password prompt: %s" msgstr "Výchozí výzva pro heslo: %s" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:227 msgid "If set, passprompt will override system prompt in all cases." msgstr "Je-li nastaveno, passprompt přebije systémovou výzvu ve všech případech." -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:231 #, c-format msgid "Default user to run commands as: %s" msgstr "Výchozí uživatel, pro kterým spouštět příkazy: %s" -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:235 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Hodnota, kterou přebít PATH uživatele: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:239 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Cesta k editoru pro potřeby visudo: %s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:243 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Kdy vyžadovat heslo pro pseudopříkaz „list“: %s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:247 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Kdy vyžadovat heslo pro pseudopříkaz „verify“: %s" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:251 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Přednačíst prázdné spouštěcí funkce obsažené v knihovně sudo_noexec" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:255 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Pokud je adresář LDAP dostupný, ignorovat místní soubor sudoers" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:259 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Souborové deskriptory >= %d budou před spuštěním příkazu uzavřeny" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:263 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "Je-li nastaveno, uživatelé mohou přebít hodnotu „closefrom“ přepínačem -C" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:267 msgid "Allow users to set arbitrary environment variables" msgstr "Dovolit uživatelům nastavit libovolné proměnné prostředí" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:271 msgid "Reset the environment to a default set of variables" msgstr "Vrátit prostředí do výchozí množiny proměnných" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to check for sanity:" msgstr "Proměnné prostředí kontrolované na logičnost:" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to remove:" msgstr "Proměnné prostředí, které se mají odstranit:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:283 msgid "Environment variables to preserve:" msgstr "Proměnné prostředí, které se mají zachovat:" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:287 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "Selinuxový role, která se použije v novém bezpečnostním kontextu: %s" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:291 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "Selinuxový typ, který se použije v novém bezpečnostním kontextu: %s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:295 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Cesta k souboru s prostředím určeném pro sudo: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:299 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Národní prostředí, které se použije pro rozbor sudoers: %s" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:303 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Dovolit sudu ptát se na heslo, i kdyby bylo čitelné" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:307 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Indikovat vstup uživatele při dotazu na heslo" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:311 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Použit rychlejší expanzi globů, která je méně přesná, ale nepřistupuje k souborovému systému" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:315 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "Umask zadaná v sudoers přebije uživatelovu, i když je volnější" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:319 msgid "Log user's input for the command being run" msgstr "Zaznamenávat vstup uživatele pro spouštěný příkaz" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:323 msgid "Log the output of the command being run" msgstr "Zaznamenávat výstup spouštěného příkazu" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:327 msgid "Compress I/O logs using zlib" msgstr "Komprimovat protokoly o vstupu/výstupu pomocí zlib" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:331 msgid "Always run commands in a pseudo-tty" msgstr "Vždy spouštět příkazy v pseudoTTY" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:335 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Modul pro podporu neunixových skupin: %s" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:339 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Adresář, kam ukládat protokoly o vstupu/výstupu: %s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:343 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Soubor, do kterého ukládat protokol o vstupu/výstupu: %s" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:347 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Při alokaci PTY přidat záznam do souboru utmp/utmpx" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:351 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Do utmp zapisovat runas uživatele, nikoliv uživatele volajícího" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:355 msgid "Set of permitted privileges" msgstr "Množina povolujících práv" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:359 msgid "Set of limit privileges" msgstr "Množina omezujících práv" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:363 msgid "Run commands on a pty in the background" msgstr "Spouštět příkazy v PTY na pozadí" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:367 msgid "PAM service name to use" msgstr "Použít tuto službu PAM" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:371 msgid "PAM service name to use for login shells" msgstr "Název služby PAM, který se použije pro přihlašovací shelly" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:375 msgid "Attempt to establish PAM credentials for the target user" msgstr "Pokusit se získat pověření PAM pro cílového uživatele" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:379 msgid "Create a new PAM session for the command to run in" msgstr "Vytvořit pro spouštěný příkaz novou relaci PAM" -#: plugins/sudoers/def_data.c:379 +#: plugins/sudoers/def_data.c:383 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Maximální pořadové číslo protokolu o vstupu/výstupu: %u" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:387 msgid "Enable sudoers netgroup support" msgstr "Zapnout v sudoers podporu netgroup" -#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:601 -#: plugins/sudoers/visudo_json.c:642 plugins/sudoers/visudo_json.c:677 +#: plugins/sudoers/def_data.c:391 +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:395 +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:399 +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:403 +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/defaults.c:199 plugins/sudoers/defaults.c:610 +#: plugins/sudoers/visudo_json.c:633 plugins/sudoers/visudo_json.c:668 #, c-format msgid "unknown defaults entry `%s'" msgstr "neznámá položka defaults „%s“" -#: plugins/sudoers/defaults.c:218 plugins/sudoers/defaults.c:228 -#: plugins/sudoers/defaults.c:248 plugins/sudoers/defaults.c:261 -#: plugins/sudoers/defaults.c:274 plugins/sudoers/defaults.c:287 -#: plugins/sudoers/defaults.c:300 plugins/sudoers/defaults.c:320 -#: plugins/sudoers/defaults.c:330 +#: plugins/sudoers/defaults.c:207 plugins/sudoers/defaults.c:217 +#: plugins/sudoers/defaults.c:241 plugins/sudoers/defaults.c:256 +#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 +#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 +#: plugins/sudoers/defaults.c:325 #, c-format msgid "value `%s' is invalid for option `%s'" msgstr "hodnota „%s“ je pro volbu „%s“ neplatná" -#: plugins/sudoers/defaults.c:221 plugins/sudoers/defaults.c:231 -#: plugins/sudoers/defaults.c:239 plugins/sudoers/defaults.c:256 -#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 -#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 -#: plugins/sudoers/defaults.c:326 +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:220 +#: plugins/sudoers/defaults.c:228 plugins/sudoers/defaults.c:251 +#: plugins/sudoers/defaults.c:264 plugins/sudoers/defaults.c:277 +#: plugins/sudoers/defaults.c:290 plugins/sudoers/defaults.c:310 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "no value specified for `%s'" msgstr "u „%s“ nebyla zadána žádná hodnota" -#: plugins/sudoers/defaults.c:244 +#: plugins/sudoers/defaults.c:233 #, c-format msgid "values for `%s' must start with a '/'" msgstr "hodnota u „%s“ musí začínat na „/“" -#: plugins/sudoers/defaults.c:306 +#: plugins/sudoers/defaults.c:301 #, c-format msgid "option `%s' does not take a value" msgstr "volba „%s“ nebere hodnotu" -#: plugins/sudoers/env.c:276 plugins/sudoers/env.c:283 -#: plugins/sudoers/env.c:386 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:918 plugins/sudoers/policy.c:461 -#: plugins/sudoers/policy.c:470 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:708 plugins/sudoers/testsudoers.c:242 -#: plugins/sudoers/toke_util.c:174 +#: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 +#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:450 +#: plugins/sudoers/ldap.c:540 plugins/sudoers/ldap.c:1166 +#: plugins/sudoers/ldap.c:1388 plugins/sudoers/ldap.c:1704 +#: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:929 +#: plugins/sudoers/policy.c:511 plugins/sudoers/policy.c:520 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:815 +#: plugins/sudoers/testsudoers.c:236 plugins/sudoers/toke_util.c:162 #, c-format msgid "internal error, %s overflow" msgstr "vnitřní chyba, přetečení %s" -#: plugins/sudoers/env.c:359 +#: plugins/sudoers/env.c:377 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: poškozené pole envp, délka nesouhlasí" -#: plugins/sudoers/env.c:1054 +#: plugins/sudoers/env.c:1083 +msgid "unable to rebuild the environment" +msgstr "prostředí nelze znovu sestavit" + +#: plugins/sudoers/env.c:1157 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "je nám líto, ale nemáte dovoleno nastavovat následující proměnné prostředí: %s" -#: plugins/sudoers/group_plugin.c:94 +#: plugins/sudoers/group_plugin.c:86 #, c-format msgid "%s must be owned by uid %d" msgstr "%s musí být vlastněn UID %d" -#: plugins/sudoers/group_plugin.c:98 +#: plugins/sudoers/group_plugin.c:90 #, c-format msgid "%s must only be writable by owner" msgstr "%s smí být zapisovatelný jen pro vlastníka" -#: plugins/sudoers/group_plugin.c:105 plugins/sudoers/sssd.c:251 +#: plugins/sudoers/group_plugin.c:98 plugins/sudoers/sssd.c:331 #, c-format msgid "unable to load %s: %s" msgstr "nelze zavést %s: %s" -#: plugins/sudoers/group_plugin.c:110 +#: plugins/sudoers/group_plugin.c:104 #, c-format msgid "unable to find symbol \"group_plugin\" in %s" msgstr "v %s nelze nalézt symbol „group_plugin“" -#: plugins/sudoers/group_plugin.c:115 +#: plugins/sudoers/group_plugin.c:109 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: nekompatibilní hlavní verze modulu pro skupiny %d, očekávána %d" -#: plugins/sudoers/interfaces.c:116 +#: plugins/sudoers/interfaces.c:117 msgid "Local IP address and netmask pairs:\n" msgstr "Pár místní IP adresy a masky sítě:\n" -#: plugins/sudoers/iolog.c:101 plugins/sudoers/iolog.c:119 -#: plugins/sudoers/timestamp.c:233 +#: plugins/sudoers/iolog.c:92 plugins/sudoers/iolog.c:110 +#: plugins/sudoers/timestamp.c:169 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s existuje, ale nejedná se o adresář (0%o)" -#: plugins/sudoers/iolog.c:112 plugins/sudoers/iolog.c:133 -#: plugins/sudoers/iolog.c:140 plugins/sudoers/timestamp.c:227 -#: plugins/sudoers/timestamp.c:248 +#: plugins/sudoers/iolog.c:103 plugins/sudoers/iolog.c:124 +#: plugins/sudoers/iolog.c:131 plugins/sudoers/timestamp.c:163 +#: plugins/sudoers/timestamp.c:184 #, c-format msgid "unable to mkdir %s" msgstr "nelze vytvořit adresář %s" -#: plugins/sudoers/iolog.c:209 plugins/sudoers/sudoers.c:764 -#: plugins/sudoers/sudoreplay.c:348 plugins/sudoers/sudoreplay.c:819 -#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/timestamp.c:357 -#: plugins/sudoers/visudo.c:832 plugins/sudoers/visudo_json.c:1025 -#: plugins/sudoers/visudo_json.c:1038 +#: plugins/sudoers/iolog.c:200 plugins/sudoers/sudoers.c:871 +#: plugins/sudoers/sudoreplay.c:300 plugins/sudoers/sudoreplay.c:769 +#: plugins/sudoers/sudoreplay.c:973 plugins/sudoers/timestamp.c:399 +#: plugins/sudoers/visudo.c:904 plugins/sudoers/visudo_json.c:1012 +#: plugins/sudoers/visudo_json.c:1025 #, c-format msgid "unable to open %s" msgstr "nelze otevřít %s" -#: plugins/sudoers/iolog.c:250 plugins/sudoers/sudoers.c:768 -#: plugins/sudoers/sudoreplay.c:1123 +#: plugins/sudoers/iolog.c:241 plugins/sudoers/sudoers.c:875 +#: plugins/sudoers/sudoreplay.c:1084 #, c-format msgid "unable to read %s" msgstr "%s nelze číst" -#: plugins/sudoers/iolog.c:282 plugins/sudoers/sudoreplay.c:588 -#: plugins/sudoers/timestamp.c:186 plugins/sudoers/timestamp.c:189 +#: plugins/sudoers/iolog.c:277 plugins/sudoers/sudoreplay.c:550 +#: plugins/sudoers/timestamp.c:298 plugins/sudoers/timestamp.c:301 #, c-format msgid "unable to write to %s" msgstr "do %s nelze zapsat" -#: plugins/sudoers/iolog.c:347 plugins/sudoers/iolog.c:545 +#: plugins/sudoers/iolog.c:342 plugins/sudoers/iolog.c:540 #, c-format msgid "unable to create %s" msgstr "%s nelze vytvořit" -#: plugins/sudoers/ldap.c:406 +#: plugins/sudoers/iolog.c:723 +#, c-format +msgid "%s: internal error, file index %d not open" +msgstr "%s: vnitřní chyba, soubor číslo %d není otevřen" + +#: plugins/sudoers/ldap.c:428 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: port je příliš velký" -#: plugins/sudoers/ldap.c:431 -msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" -msgstr "sudo_ldap_conf_add_ports: nedostatek místa na rozšíření hostbuf" - -#: plugins/sudoers/ldap.c:464 +#: plugins/sudoers/ldap.c:488 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "nepodporovaný typ ldapového URI: %s" -#: plugins/sudoers/ldap.c:495 +#: plugins/sudoers/ldap.c:515 msgid "unable to mix ldap and ldaps URIs" msgstr "nelze míchat URI ldap a ldaps" -#: plugins/sudoers/ldap.c:499 plugins/sudoers/ldap.c:532 +#: plugins/sudoers/ldap.c:519 plugins/sudoers/ldap.c:555 msgid "starttls not supported when using ldaps" msgstr "při použití ldaps není starttls podporováno" -#: plugins/sudoers/ldap.c:517 -msgid "sudo_ldap_parse_uri: out of space building hostbuf" -msgstr "sudo_ldap_parse_uri: nedostatek místo pro vytvoření hostbuf" - -#: plugins/sudoers/ldap.c:599 +#: plugins/sudoers/ldap.c:626 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "nelze inicializovat certifikát SSL a databázi klíčů: %s" -#: plugins/sudoers/ldap.c:602 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "pro SSL musíte v %s nastavit TLS_CERT" -#: plugins/sudoers/ldap.c:1093 +#: plugins/sudoers/ldap.c:1152 msgid "unable to get GMT time" msgstr "nelze získat čas GMT" -#: plugins/sudoers/ldap.c:1099 +#: plugins/sudoers/ldap.c:1158 msgid "unable to format timestamp" msgstr "nelze naformátovat časový údaj" -#: plugins/sudoers/ldap.c:1107 -msgid "unable to build time filter" -msgstr "nelze vytvořit časový filtr" - -#: plugins/sudoers/ldap.c:1326 -msgid "sudo_ldap_build_pass1 allocation mismatch" -msgstr "nesouhlasí alokace sudo_ldap_build_pass1" - -#: plugins/sudoers/ldap.c:1469 +#: plugins/sudoers/ldap.c:1853 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:1963 +#: plugins/sudoers/ldap.c:2394 #, c-format msgid "" "\n" @@ -854,7 +995,7 @@ "\n" "Role LDAP: %s\n" -#: plugins/sudoers/ldap.c:1965 +#: plugins/sudoers/ldap.c:2396 #, c-format msgid "" "\n" @@ -863,108 +1004,108 @@ "\n" "Role LDAP: NEZNÁMÁ\n" -#: plugins/sudoers/ldap.c:2012 +#: plugins/sudoers/ldap.c:2443 #, c-format msgid " Order: %s\n" msgstr " Pořadí: %s\n" -#: plugins/sudoers/ldap.c:2020 plugins/sudoers/parse.c:512 -#: plugins/sudoers/sssd.c:1297 +#: plugins/sudoers/ldap.c:2451 plugins/sudoers/parse.c:555 +#: plugins/sudoers/sssd.c:1429 #, c-format msgid " Commands:\n" msgstr " Příkazy:\n" -#: plugins/sudoers/ldap.c:2570 +#: plugins/sudoers/ldap.c:3015 #, c-format msgid "unable to initialize LDAP: %s" msgstr "LDAP nelze inicializovat: %s" -#: plugins/sudoers/ldap.c:2612 +#: plugins/sudoers/ldap.c:3051 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:2845 +#: plugins/sudoers/ldap.c:3305 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "neplatný atribut sudoOrder: %s" -#: plugins/sudoers/linux_audit.c:57 +#: plugins/sudoers/linux_audit.c:52 msgid "unable to open audit system" msgstr "nelze otevřít auditní systém" -#: plugins/sudoers/linux_audit.c:94 +#: plugins/sudoers/linux_audit.c:93 msgid "unable to send audit message" msgstr "nelze odeslat auditní zprávu" -#: plugins/sudoers/logging.c:134 +#: plugins/sudoers/logging.c:106 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: plugins/sudoers/logging.c:162 +#: plugins/sudoers/logging.c:134 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s : (příkaz pokračuje) %s" -#: plugins/sudoers/logging.c:187 +#: plugins/sudoers/logging.c:159 #, c-format msgid "unable to open log file: %s: %s" msgstr "nelze otevřít soubor protokolu: %s: %s" -#: plugins/sudoers/logging.c:190 +#: plugins/sudoers/logging.c:162 #, c-format msgid "unable to lock log file: %s: %s" msgstr "nelze zamknout soubor protokolu: %s: %s" -#: plugins/sudoers/logging.c:242 +#: plugins/sudoers/logging.c:211 msgid "No user or host" msgstr "Žádný uživatel nebo stroj" -#: plugins/sudoers/logging.c:244 +#: plugins/sudoers/logging.c:213 msgid "validation failure" msgstr "selhání ověření" -#: plugins/sudoers/logging.c:251 +#: plugins/sudoers/logging.c:220 msgid "user NOT in sudoers" msgstr "uživatel NENÍ v sudoers" -#: plugins/sudoers/logging.c:253 +#: plugins/sudoers/logging.c:222 msgid "user NOT authorized on host" msgstr "uživatel NENÍ na stroji autorizován" -#: plugins/sudoers/logging.c:255 +#: plugins/sudoers/logging.c:224 msgid "command not allowed" msgstr "příkaz nedovolen" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:259 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "%s není v souboru sudoers. Tento událost bude ohlášena.\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:262 #, 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:266 #, 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:269 #, 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:407 -#: plugins/sudoers/sudoers.c:409 plugins/sudoers/sudoers.c:411 -#: plugins/sudoers/sudoers.c:413 plugins/sudoers/sudoers.c:1128 -#: plugins/sudoers/sudoers.c:1129 +#: plugins/sudoers/logging.c:306 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1222 +#: plugins/sudoers/sudoers.c:1224 #, c-format msgid "%s: command not found" msgstr "%s: příkaz nenalezen" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:403 +#: plugins/sudoers/logging.c:308 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring `%s' found in '.'\n" @@ -973,15 +1114,15 @@ "ignoruje se „%s“ nalezený v „.“\n" "Použijte „sudo ./%s„, je-li toto „%s“', který chcete spustit." -#: plugins/sudoers/logging.c:353 +#: plugins/sudoers/logging.c:325 msgid "authentication failure" msgstr "selhání autentizace" -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:351 msgid "a password is required" msgstr "je vyžadováno heslo" -#: plugins/sudoers/logging.c:446 plugins/sudoers/logging.c:501 +#: plugins/sudoers/logging.c:422 plugins/sudoers/logging.c:484 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" @@ -989,56 +1130,56 @@ msgstr[1] "%u chybné pokusy zadat heslo" msgstr[2] "%u chybných pokusů zadat heslo" -#: plugins/sudoers/logging.c:584 +#: plugins/sudoers/logging.c:572 msgid "unable to fork" msgstr "nelze vytvořit proces" -#: plugins/sudoers/logging.c:592 plugins/sudoers/logging.c:648 +#: plugins/sudoers/logging.c:580 plugins/sudoers/logging.c:640 #, c-format msgid "unable to fork: %m" msgstr "nelze vytvořit proces: %m" -#: plugins/sudoers/logging.c:638 +#: plugins/sudoers/logging.c:630 #, c-format msgid "unable to open pipe: %m" msgstr "nelze otevřít rouru: %m" -#: plugins/sudoers/logging.c:663 +#: plugins/sudoers/logging.c:655 #, c-format msgid "unable to dup stdin: %m" msgstr "nelze zdvojit standardní vstup: %m" -#: plugins/sudoers/logging.c:698 +#: plugins/sudoers/logging.c:693 #, c-format msgid "unable to execute %s: %m" msgstr "nelze spustit %s: %m" -#: plugins/sudoers/match.c:627 +#: plugins/sudoers/match.c:616 #, c-format msgid "unsupported digest type %d for %s" msgstr "nepodporovaný druh kontrolního součtu %d pro %s" -#: plugins/sudoers/match.c:656 +#: plugins/sudoers/match.c:657 #, c-format msgid "%s: read error" msgstr "%s: chyba při čtení" -#: plugins/sudoers/match.c:670 +#: plugins/sudoers/match.c:692 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "součet pro %s (%s) nemá tvar %s" -#: plugins/sudoers/parse.c:123 +#: plugins/sudoers/parse.c:114 #, c-format msgid "parse error in %s near line %d" msgstr "chyba rozboru v %s kolem řádku %d" -#: plugins/sudoers/parse.c:126 +#: plugins/sudoers/parse.c:117 #, c-format msgid "parse error in %s" msgstr "chyba rozboru v %s" -#: plugins/sudoers/parse.c:459 +#: plugins/sudoers/parse.c:502 #, c-format msgid "" "\n" @@ -1047,49 +1188,41 @@ "\n" "Položka v sudoers:\n" -#: plugins/sudoers/parse.c:460 +#: plugins/sudoers/parse.c:503 #, c-format msgid " RunAsUsers: " msgstr " RunAsUsers: " -#: plugins/sudoers/parse.c:474 +#: plugins/sudoers/parse.c:517 #, c-format msgid " RunAsGroups: " msgstr " RunAsGroups: " -#: plugins/sudoers/parse.c:483 +#: plugins/sudoers/parse.c:526 #, c-format msgid " Options: " msgstr " Volby: " -#: plugins/sudoers/policy.c:109 plugins/sudoers/policy.c:118 -#: plugins/sudoers/policy.c:127 plugins/sudoers/policy.c:151 -#: plugins/sudoers/policy.c:263 plugins/sudoers/policy.c:283 -#: plugins/sudoers/policy.c:292 plugins/sudoers/policy.c:322 -#: plugins/sudoers/policy.c:332 plugins/sudoers/policy.c:341 -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" +#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:253 +msgid "unable to parse network address list" +msgstr "nelze rozebrat seznam síťových adres" -#: plugins/sudoers/policy.c:569 plugins/sudoers/visudo.c:773 +#: plugins/sudoers/policy.c:659 plugins/sudoers/visudo.c:841 #, c-format msgid "unable to execute %s" msgstr "nelze vykonat %s" -#: plugins/sudoers/policy.c:701 +#: plugins/sudoers/policy.c:792 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Verze modulu s politikami sudoers je %s\n" -#: plugins/sudoers/policy.c:703 +#: plugins/sudoers/policy.c:794 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Verze gramatiky souboru sudoers je %d\n" -#: plugins/sudoers/policy.c:707 +#: plugins/sudoers/policy.c:798 #, c-format msgid "" "\n" @@ -1098,374 +1231,411 @@ "\n" "Cesta sudoers: %s\n" -#: plugins/sudoers/policy.c:710 +#: plugins/sudoers/policy.c:801 #, c-format msgid "nsswitch path: %s\n" msgstr "cesta k nsswitch: %s\n" -#: plugins/sudoers/policy.c:712 +#: plugins/sudoers/policy.c:803 #, c-format msgid "ldap.conf path: %s\n" msgstr "cesta k ldap.conf: %s\n" -#: plugins/sudoers/policy.c:713 +#: plugins/sudoers/policy.c:804 #, c-format msgid "ldap.secret path: %s\n" msgstr "cesta k ldap.secret: %s\n" -#: plugins/sudoers/pwutil.c:149 +#: plugins/sudoers/policy.c:837 +#, 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:158 plugins/sudoers/pwutil.c:176 +#, c-format +msgid "unable to cache uid %u, out of memory" +msgstr "nelze zapamatovat si UID %u, nedostatek paměti" + +#: plugins/sudoers/pwutil.c:170 #, c-format msgid "unable to cache uid %u, already exists" msgstr "nelze zapamatovat si UID %u, již existuje" -#: plugins/sudoers/pwutil.c:194 +#: plugins/sudoers/pwutil.c:222 plugins/sudoers/pwutil.c:239 +#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:334 +#, c-format +msgid "unable to cache user %s, out of memory" +msgstr "nelze zapamatovat si uživatele %s, nedostatek paměti" + +#: plugins/sudoers/pwutil.c:234 #, c-format msgid "unable to cache user %s, already exists" msgstr "nelze zapamatovat si uživatele %s, již existuje" -#: plugins/sudoers/pwutil.c:400 +#: plugins/sudoers/pwutil.c:474 plugins/sudoers/pwutil.c:492 +#, c-format +msgid "unable to cache gid %u, out of memory" +msgstr "nelze zapamatovat si GID %u, nedostatek paměti" + +#: plugins/sudoers/pwutil.c:486 #, c-format msgid "unable to cache gid %u, already exists" msgstr "nelze zapamatovat si GID %u, již existuje" -#: plugins/sudoers/pwutil.c:439 +#: plugins/sudoers/pwutil.c:532 plugins/sudoers/pwutil.c:549 +#: plugins/sudoers/pwutil.c:584 plugins/sudoers/pwutil.c:626 +#, c-format +msgid "unable to cache group %s, out of memory" +msgstr "nelze zapamatovat si skupinu %s, nedostatek paměti" + +#: plugins/sudoers/pwutil.c:544 #, c-format msgid "unable to cache group %s, already exists" msgstr "nelze zapamatovat si skupinu %s, již existuje" -#: plugins/sudoers/pwutil.c:605 plugins/sudoers/pwutil.c:631 +#: plugins/sudoers/pwutil.c:739 plugins/sudoers/pwutil.c:783 #, 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:627 +#: plugins/sudoers/pwutil.c:745 plugins/sudoers/pwutil.c:788 +#, c-format +msgid "unable to cache group list for %s, out of memory" +msgstr "nelze zapamatovat si seznam skupin pro %s, nedostatek paměti" + +#: plugins/sudoers/pwutil.c:777 #, c-format msgid "unable to parse groups for %s" msgstr "nelze rozebrat skupiny pro %s" -#: plugins/sudoers/set_perms.c:122 plugins/sudoers/set_perms.c:447 -#: plugins/sudoers/set_perms.c:850 plugins/sudoers/set_perms.c:1147 -#: plugins/sudoers/set_perms.c:1439 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 +#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 +#: plugins/sudoers/set_perms.c:1430 msgid "perm stack overflow" msgstr "přetečení zásobníku oprávnění" -#: plugins/sudoers/set_perms.c:130 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:1076 -#: plugins/sudoers/set_perms.c:1155 plugins/sudoers/set_perms.c:1372 -#: plugins/sudoers/set_perms.c:1447 plugins/sudoers/set_perms.c:1536 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 +#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 +#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 +#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 +#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 msgid "perm stack underflow" msgstr "podtečení zásobníku oprávnění" -#: plugins/sudoers/set_perms.c:189 plugins/sudoers/set_perms.c:502 -#: plugins/sudoers/set_perms.c:1206 plugins/sudoers/set_perms.c:1479 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:493 +#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 msgid "unable to change to root gid" msgstr "nelze přepnout GID na root" -#: plugins/sudoers/set_perms.c:278 plugins/sudoers/set_perms.c:599 -#: plugins/sudoers/set_perms.c:987 plugins/sudoers/set_perms.c:1283 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:590 +#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 msgid "unable to change to runas gid" msgstr "nelze přepnout na běhové GID" -#: plugins/sudoers/set_perms.c:283 plugins/sudoers/set_perms.c:604 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:595 +#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 msgid "unable to set runas group vector" msgstr "nelze nastavit vektor běhových skupin" -#: plugins/sudoers/set_perms.c:294 plugins/sudoers/set_perms.c:615 -#: plugins/sudoers/set_perms.c:1001 plugins/sudoers/set_perms.c:1297 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:606 +#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 msgid "unable to change to runas uid" msgstr "nelze přepnout na běhové UID" -#: plugins/sudoers/set_perms.c:312 plugins/sudoers/set_perms.c:633 -#: plugins/sudoers/set_perms.c:1017 plugins/sudoers/set_perms.c:1313 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:624 +#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 msgid "unable to change to sudoers gid" msgstr "nelze přepnout na GID sudoers" -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 msgid "too many processes" msgstr "příliš mnoho procesů" -#: plugins/sudoers/solaris_audit.c:47 +#: plugins/sudoers/solaris_audit.c:51 msgid "unable to get current working directory" msgstr "současný pracovní adresář nelze zjistit" -#: plugins/sudoers/solaris_audit.c:55 +#: plugins/sudoers/solaris_audit.c:59 #, c-format msgid "truncated audit path user_cmnd: %s" msgstr "zkrácená auditní cesta user_cmnd: %s" -#: plugins/sudoers/solaris_audit.c:62 +#: plugins/sudoers/solaris_audit.c:66 #, c-format msgid "truncated audit path argv[0]: %s" msgstr "zkrácená auditní cesta argv[0]: %s" -#: plugins/sudoers/solaris_audit.c:111 +#: plugins/sudoers/solaris_audit.c:115 msgid "audit_failure message too long" msgstr "zpráva audit_failure je příliš dlouhá" -#: plugins/sudoers/sssd.c:252 +#: plugins/sudoers/sssd.c:333 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "nelze inicializovat zdroj SSS. Je SSSD nainstalován na vašem stroji?" -#: plugins/sudoers/sssd.c:259 plugins/sudoers/sssd.c:267 -#: plugins/sudoers/sssd.c:275 plugins/sudoers/sssd.c:283 -#: plugins/sudoers/sssd.c:291 +#: plugins/sudoers/sssd.c:341 plugins/sudoers/sssd.c:350 +#: plugins/sudoers/sssd.c:359 plugins/sudoers/sssd.c:368 +#: plugins/sudoers/sssd.c:377 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "nelze nalézt symbol „%s“ v %s" -#: plugins/sudoers/sudo_nss.c:296 +#: plugins/sudoers/sudo_nss.c:290 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Odpovídající položky Defaults pro %s na %s:\n" -#: plugins/sudoers/sudo_nss.c:309 +#: plugins/sudoers/sudo_nss.c:308 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Výchozí hodnoty Runas a Command pro %s:\n" -#: plugins/sudoers/sudo_nss.c:322 +#: plugins/sudoers/sudo_nss.c:326 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "Uživatel %s smí spustit následující příkazy na %s:\n" -#: plugins/sudoers/sudo_nss.c:331 +#: plugins/sudoers/sudo_nss.c:339 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Uživatel %s nemá dovoleno spustit sudo na %s.\n" -#: plugins/sudoers/sudoers.c:160 plugins/sudoers/sudoers.c:201 -#: plugins/sudoers/sudoers.c:726 +#: plugins/sudoers/sudoers.c:172 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/visudo.c:223 plugins/sudoers/visudo.c:567 +msgid "unable to initialize sudoers default values" +msgstr "nelze inicializovat výchozí hodnoty sudoers" + +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:239 +#: plugins/sudoers/sudoers.c:833 msgid "problem with defaults entries" msgstr "problém s položkami defaults" -#: plugins/sudoers/sudoers.c:167 +#: plugins/sudoers/sudoers.c:205 msgid "no valid sudoers sources found, quitting" msgstr "nenalezen žádné platné zdroje sudoers, končí se" -#: plugins/sudoers/sudoers.c:233 +#: plugins/sudoers/sudoers.c:275 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:278 +#: plugins/sudoers/sudoers.c:332 msgid "you are not permitted to use the -C option" msgstr "nemáte dovoleno použít přepínač -C" -#: plugins/sudoers/sudoers.c:336 +#: plugins/sudoers/sudoers.c:396 #, c-format msgid "timestamp owner (%s): No such user" msgstr "vlastník časového údaje (%s): Takový uživatel neexistuje" -#: plugins/sudoers/sudoers.c:350 +#: plugins/sudoers/sudoers.c:410 msgid "no tty" msgstr "žádné TTY" -#: plugins/sudoers/sudoers.c:351 +#: plugins/sudoers/sudoers.c:411 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:402 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "příkaz v aktuálním adresáři" -#: plugins/sudoers/sudoers.c:422 +#: plugins/sudoers/sudoers.c:486 msgid "sorry, you are not allowed to preserve the environment" msgstr "je nám líto, ale nemáte dovoleno zachovat prostředí" -#: plugins/sudoers/sudoers.c:674 +#: plugins/sudoers/sudoers.c:778 msgid "command too long" msgstr "příkaz je příliš dlouhý" -#: plugins/sudoers/sudoers.c:779 plugins/sudoers/visudo.c:333 -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/sudoers.c:886 plugins/sudoers/visudo.c:427 +#: plugins/sudoers/visudo.c:667 #, c-format msgid "unable to stat %s" msgstr "nelze zjistit údaje o %s" -#: plugins/sudoers/sudoers.c:783 +#: plugins/sudoers/sudoers.c:890 #, c-format msgid "%s is not a regular file" msgstr "%s není běžný soubor" -#: plugins/sudoers/sudoers.c:787 plugins/sudoers/timestamp.c:289 toke.l:945 +#: plugins/sudoers/sudoers.c:894 plugins/sudoers/timestamp.c:225 toke.l:947 #, 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:791 toke.l:952 +#: plugins/sudoers/sudoers.c:898 toke.l:954 #, c-format msgid "%s is world writable" msgstr "%s je zapisovatelný pro všechny" -#: plugins/sudoers/sudoers.c:795 toke.l:957 +#: plugins/sudoers/sudoers.c:902 toke.l:959 #, 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:826 +#: plugins/sudoers/sudoers.c:933 #, c-format msgid "only root can use `-c %s'" msgstr "pouze root může použít „-c %s“" -#: plugins/sudoers/sudoers.c:845 +#: plugins/sudoers/sudoers.c:952 #, c-format msgid "unknown login class: %s" msgstr "neznáma přihlašovací třída: %s" -#: plugins/sudoers/sudoers.c:889 plugins/sudoers/sudoers.c:904 +#: plugins/sudoers/sudoers.c:1031 plugins/sudoers/sudoers.c:1059 #, c-format msgid "unable to resolve host %s" msgstr "nelze přeložit název stroje %s" -#: plugins/sudoers/sudoers.c:986 plugins/sudoers/testsudoers.c:388 +#: plugins/sudoers/sudoers.c:1126 plugins/sudoers/testsudoers.c:385 #, c-format msgid "unknown group: %s" msgstr "neznámá skupina: %s" -#: plugins/sudoers/sudoreplay.c:280 +#: plugins/sudoers/sudoreplay.c:232 #, c-format msgid "invalid filter option: %s" msgstr "neplatná volba filtru: %s" -#: plugins/sudoers/sudoreplay.c:293 +#: plugins/sudoers/sudoreplay.c:245 #, c-format msgid "invalid max wait: %s" msgstr "neplatná maximální doba čekání: %s" -#: plugins/sudoers/sudoreplay.c:299 +#: plugins/sudoers/sudoreplay.c:251 #, c-format msgid "invalid speed factor: %s" msgstr "neplatný násobek rychlosti: %s" -#: plugins/sudoers/sudoreplay.c:302 plugins/sudoers/visudo.c:190 +#: plugins/sudoers/sudoreplay.c:254 plugins/sudoers/visudo.c:180 #, c-format msgid "%s version %s\n" msgstr "%s verze %s\n" -#: plugins/sudoers/sudoreplay.c:334 +#: plugins/sudoers/sudoreplay.c:286 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/časování: %s" -#: plugins/sudoers/sudoreplay.c:340 +#: plugins/sudoers/sudoreplay.c:292 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/časování: %s" -#: plugins/sudoers/sudoreplay.c:356 +#: plugins/sudoers/sudoreplay.c:308 #, c-format msgid "Replaying sudo session: %s\n" msgstr "Přehrává se relace sudo: %s\n" -#: plugins/sudoers/sudoreplay.c:362 +#: plugins/sudoers/sudoreplay.c:314 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Pozor: váš terminál je příliš malý pro správné zobrazení záznamu.\n" -#: plugins/sudoers/sudoreplay.c:363 +#: plugins/sudoers/sudoreplay.c:315 #, 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:418 +#: plugins/sudoers/sudoreplay.c:368 msgid "unable to set tty to raw mode" msgstr "TTY nelze nastavit do přímého režimu" -#: plugins/sudoers/sudoreplay.c:449 +#: plugins/sudoers/sudoreplay.c:401 #, c-format msgid "invalid timing file line: %s" msgstr "neplatný řádek s časovacím souborem: %s" -#: plugins/sudoers/sudoreplay.c:655 plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:611 plugins/sudoers/sudoreplay.c:636 #, c-format msgid "ambiguous expression \"%s\"" msgstr "nejednoznačný výraz „%s“" -#: plugins/sudoers/sudoreplay.c:702 +#: plugins/sudoers/sudoreplay.c:658 msgid "unmatched ')' in expression" msgstr "ve výrazu neodpovídá „)“" -#: plugins/sudoers/sudoreplay.c:706 +#: plugins/sudoers/sudoreplay.c:662 #, c-format msgid "unknown search term \"%s\"" msgstr "neznámý vyhledávací výraz „%s“" -#: plugins/sudoers/sudoreplay.c:720 +#: plugins/sudoers/sudoreplay.c:677 #, c-format msgid "%s requires an argument" msgstr "%s vyžaduje argument" -#: plugins/sudoers/sudoreplay.c:724 plugins/sudoers/sudoreplay.c:1096 +#: plugins/sudoers/sudoreplay.c:680 plugins/sudoers/sudoreplay.c:1060 #, c-format msgid "invalid regular expression: %s" msgstr "neplatný regulární výraz: %s" -#: plugins/sudoers/sudoreplay.c:730 +#: plugins/sudoers/sudoreplay.c:684 #, c-format msgid "could not parse date \"%s\"" msgstr "datum „%s“ se nepodařilo rozebrat" -#: plugins/sudoers/sudoreplay.c:739 +#: plugins/sudoers/sudoreplay.c:693 msgid "unmatched '(' in expression" msgstr "ve výrazu neodpovídá „(“" -#: plugins/sudoers/sudoreplay.c:741 +#: plugins/sudoers/sudoreplay.c:695 msgid "illegal trailing \"or\"" msgstr "zakázané zakončení „or“" -#: plugins/sudoers/sudoreplay.c:743 +#: plugins/sudoers/sudoreplay.c:697 msgid "illegal trailing \"!\"" msgstr "zakázané zakončení „!“" -#: plugins/sudoers/sudoreplay.c:796 +#: plugins/sudoers/sudoreplay.c:746 #, c-format msgid "unknown search type %d" msgstr "neznámý vyhledávácí typ %d" -#: plugins/sudoers/sudoreplay.c:833 +#: plugins/sudoers/sudoreplay.c:784 #, c-format msgid "%s: invalid log file" msgstr "%s: neplatný soubor s protokolem" -#: plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:802 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: chybí položka s časovým údajem" -#: plugins/sudoers/sudoreplay.c:858 +#: plugins/sudoers/sudoreplay.c:809 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: čas %s: %s" -#: plugins/sudoers/sudoreplay.c:865 +#: plugins/sudoers/sudoreplay.c:816 #, c-format msgid "%s: user field is missing" msgstr "%s: chybí položka s uživatelem" -#: plugins/sudoers/sudoreplay.c:873 +#: plugins/sudoers/sudoreplay.c:825 #, c-format msgid "%s: runas user field is missing" msgstr "%s: chybí položka s runas uživatelem" -#: plugins/sudoers/sudoreplay.c:881 +#: plugins/sudoers/sudoreplay.c:834 #, c-format msgid "%s: runas group field is missing" msgstr "%s chybí položka s runas skupinou" -#: plugins/sudoers/sudoreplay.c:1236 +#: plugins/sudoers/sudoreplay.c:1197 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "použití: %s [-h] [-d adresář] [-m číslo] [-s číslo] ID\n" -#: plugins/sudoers/sudoreplay.c:1239 +#: plugins/sudoers/sudoreplay.c:1200 #, 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:1248 +#: plugins/sudoers/sudoreplay.c:1209 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1474,7 +1644,7 @@ "%s – přehraje záznam relace sudo\n" "\n" -#: plugins/sudoers/sudoreplay.c:1250 +#: plugins/sudoers/sudoreplay.c:1211 msgid "" "\n" "Options:\n" @@ -1497,11 +1667,11 @@ " -s, --speed=číslo zrychlí nebo zpomalí výstup\n" " -V, --version zobrazí údaje o verzi a skončí" -#: plugins/sudoers/testsudoers.c:327 +#: plugins/sudoers/testsudoers.c:324 msgid "\thost unmatched" msgstr "\tstroj se neshoduje" -#: plugins/sudoers/testsudoers.c:330 +#: plugins/sudoers/testsudoers.c:327 msgid "" "\n" "Command allowed" @@ -1509,7 +1679,7 @@ "\n" "Příkaz povolen" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command denied" @@ -1517,7 +1687,7 @@ "\n" "Příkaz odepřen" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command unmatched" @@ -1525,115 +1695,131 @@ "\n" "Příkaz se neshoduje" -# TODO: pluralize -#: plugins/sudoers/timestamp.c:197 -#, c-format -msgid "unable to truncate time stamp file to %lld bytes" -msgstr "nelze zkrátit soubor s časovými údaji na %lld bajtů" - -#: plugins/sudoers/timestamp.c:297 +#: plugins/sudoers/timestamp.c:233 #, c-format msgid "%s is group writable" msgstr "%s je zapisovatelný pro skupinu" -#: plugins/sudoers/timestamp.c:318 +# TODO: pluralize +#: plugins/sudoers/timestamp.c:309 #, c-format -msgid "timestamp path too long: %s/%s" -msgstr "cesta k časovým údajům je příliš dlouhá: %s/%s" +msgid "unable to truncate time stamp file to %lld bytes" +msgstr "nelze zkrátit soubor s časovými údaji na %lld bajtů" + +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:488 plugins/sudoers/visudo.c:494 +msgid "unable to read the clock" +msgstr "nelze přečíst hodiny" -#: plugins/sudoers/timestamp.c:498 +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "časový údaj z budoucnosti se ignoruje" -#: plugins/sudoers/timestamp.c:510 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "časový údaj ukazuje příliš do budoucna: %20.20s" -#: plugins/sudoers/timestamp.c:613 plugins/sudoers/timestamp.c:634 +# TODO: pluralize +#: plugins/sudoers/timestamp.c:863 +#, c-format +msgid "unable to lock time stamp file %s" +msgstr "soubor s časovými údaji %s nelze zamknout" + +#: plugins/sudoers/timestamp.c:906 plugins/sudoers/timestamp.c:926 #, c-format msgid "lecture status path too long: %s/%s" msgstr "cesta ke stavům lekce je příliš dlouhý: %s/%s" -#: plugins/sudoers/visudo.c:192 +#: plugins/sudoers/visudo.c:182 #, c-format msgid "%s grammar version %d\n" msgstr "verze gramatiky %s je %d\n" -#: plugins/sudoers/visudo.c:263 plugins/sudoers/visudo.c:552 +#: plugins/sudoers/visudo.c:254 plugins/sudoers/visudo.c:619 #, c-format msgid "press return to edit %s: " msgstr "pro úpravu %s stiskněte enter: " -#: plugins/sudoers/visudo.c:349 plugins/sudoers/visudo.c:355 +#: plugins/sudoers/visudo.c:320 +#, c-format +msgid "specified editor (%s) doesn't exist" +msgstr "zadaný editor (%s) neexistuje" + +#: plugins/sudoers/visudo.c:338 +#, c-format +msgid "no editor found (editor path = %s)" +msgstr "žádný editor nenalezen (cesta k editoru = %s)" + +#: plugins/sudoers/visudo.c:447 plugins/sudoers/visudo.c:455 msgid "write error" msgstr "chyba zápisu" -#: plugins/sudoers/visudo.c:439 +#: plugins/sudoers/visudo.c:501 #, 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:444 +#: plugins/sudoers/visudo.c:508 #, 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:450 +#: plugins/sudoers/visudo.c:514 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "editor (%s) selhal, %s nezměněno" -#: plugins/sudoers/visudo.c:472 +#: plugins/sudoers/visudo.c:536 #, c-format msgid "%s unchanged" msgstr "%s nezměněno" -#: plugins/sudoers/visudo.c:497 +#: plugins/sudoers/visudo.c:562 #, 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:507 +#: plugins/sudoers/visudo.c:573 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "nebylo možné rozebrat dočasný soubor (%s), neznámá chyba" -#: plugins/sudoers/visudo.c:543 +#: plugins/sudoers/visudo.c:610 #, 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:601 plugins/sudoers/visudo.c:610 +#: plugins/sudoers/visudo.c:669 plugins/sudoers/visudo.c:678 #, 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:605 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:673 plugins/sudoers/visudo.c:683 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "nelze změnit práva %s na 0%o" -#: plugins/sudoers/visudo.c:632 +#: plugins/sudoers/visudo.c:700 #, 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:646 +#: plugins/sudoers/visudo.c:714 #, 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:656 +#: plugins/sudoers/visudo.c:724 #, c-format msgid "error renaming %s, %s unchanged" msgstr "chyba při přejmenování %s, %s nezměněno" -#: plugins/sudoers/visudo.c:718 +#: plugins/sudoers/visudo.c:786 msgid "What now? " msgstr "Co teď? " -#: plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:800 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1645,87 +1831,72 @@ " (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:780 +#: plugins/sudoers/visudo.c:848 #, c-format msgid "unable to run %s" msgstr "nelze spustit %s" -#: plugins/sudoers/visudo.c:806 +#: plugins/sudoers/visudo.c:878 #, 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:813 +#: plugins/sudoers/visudo.c:885 #, 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:838 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:910 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "failed to parse %s file, unknown error" msgstr "rozbor souboru %s se nezdařil, neznámá chyba" -#: plugins/sudoers/visudo.c:854 plugins/sudoers/visudo_json.c:1054 +#: plugins/sudoers/visudo.c:926 plugins/sudoers/visudo_json.c:1041 #, c-format msgid "parse error in %s near line %d\n" msgstr "chyba při rozboru %s kolem řádku %d\n" -#: plugins/sudoers/visudo.c:857 plugins/sudoers/visudo_json.c:1057 +#: plugins/sudoers/visudo.c:929 plugins/sudoers/visudo_json.c:1044 #, c-format msgid "parse error in %s\n" msgstr "chyba při rozboru %s\n" -#: plugins/sudoers/visudo.c:865 plugins/sudoers/visudo.c:872 +#: plugins/sudoers/visudo.c:937 plugins/sudoers/visudo.c:944 #, c-format msgid "%s: parsed OK\n" msgstr "%s: rozbor úspěšný\n" -#: plugins/sudoers/visudo.c:918 +#: plugins/sudoers/visudo.c:991 #, c-format msgid "%s busy, try again later" msgstr "%s je zaneprázdněn, zkuste to později" -#: plugins/sudoers/visudo.c:962 -#, c-format -msgid "specified editor (%s) doesn't exist" -msgstr "zadaný editor (%s) neexistuje" - -#: plugins/sudoers/visudo.c:985 -#, c-format -msgid "unable to stat editor (%s)" -msgstr "nelze zjisti údaje o editoru (%s)" - -#: plugins/sudoers/visudo.c:1033 -#, c-format -msgid "no editor found (editor path = %s)" -msgstr "žádný editor nenalezen (cesta k editoru = %s)" - -#: plugins/sudoers/visudo.c:1136 +#: plugins/sudoers/visudo.c:1087 #, c-format msgid "Error: cycle in %s `%s'" msgstr "Chyba: smyčka v %s „%s“" -#: plugins/sudoers/visudo.c:1137 +#: plugins/sudoers/visudo.c:1088 #, c-format msgid "Warning: cycle in %s `%s'" msgstr "Pozor: smyčka v %s „%s“" -#: plugins/sudoers/visudo.c:1141 +#: plugins/sudoers/visudo.c:1092 #, c-format msgid "Error: %s `%s' referenced but not defined" msgstr "Chyba: %s „%s“ použit, ale nedefinován" -#: plugins/sudoers/visudo.c:1142 +#: plugins/sudoers/visudo.c:1093 #, c-format msgid "Warning: %s `%s' referenced but not defined" msgstr "Pozor: %s „%s“ použit, ale nedefinován" -#: plugins/sudoers/visudo.c:1281 +#: plugins/sudoers/visudo.c:1236 #, c-format msgid "Warning: unused %s `%s'" msgstr "Pozor: nepožitý %s „%s“" -#: plugins/sudoers/visudo.c:1394 +#: plugins/sudoers/visudo.c:1349 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -1734,7 +1905,7 @@ "%s – bezpečně upraví soubor sudoers\n" "\n" -#: plugins/sudoers/visudo.c:1396 +#: plugins/sudoers/visudo.c:1351 msgid "" "\n" "Options:\n" @@ -1758,15 +1929,33 @@ " -x, --export=výstupní_soubor\n" " exportuje sudoers ve formátu JSON do výstupního_souboru" -#: plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo_json.c:1018 #, c-format msgid "%s: input and output files must be different" msgstr "%s: vstupní a výstupní soubory se musí lišit" -#: toke.l:915 +#: toke.l:918 msgid "too many levels of includes" msgstr "příliš mnoho úrovní zanoření" +#~ msgid "unable allocate memory" +#~ msgstr "nelze alokovat paměť" + +#~ msgid "timestamp path too long: %s/%s" +#~ msgstr "cesta k časovým údajům je příliš dlouhá: %s/%s" + +#~ msgid "unable to stat editor (%s)" +#~ msgstr "nelze zjisti údaje o editoru (%s)" + +#~ msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" +#~ msgstr "sudo_ldap_conf_add_ports: nedostatek místa na rozšíření hostbuf" + +#~ msgid "sudo_ldap_parse_uri: out of space building hostbuf" +#~ msgstr "sudo_ldap_parse_uri: nedostatek místo pro vytvoření hostbuf" + +#~ msgid "sudo_ldap_build_pass1 allocation mismatch" +#~ msgstr "nesouhlasí alokace sudo_ldap_build_pass1" + #~ msgid "internal error: insufficient space for log line" #~ msgstr "vnitřní chyba: nedostatek místa pro řádek protokolu" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/plugins/sudoers/po/da.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/plugins/sudoers/po/da.mo differ diff -Nru sudo-1.8.12/plugins/sudoers/po/da.po sudo-1.8.16/plugins/sudoers/po/da.po --- sudo-1.8.12/plugins/sudoers/po/da.po 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/po/da.po 2015-10-31 23:35:24.000000000 +0000 @@ -1,6 +1,6 @@ # Danish translation of sudoers. # This file is put in the public domain. -# Joe Hansen , 2011, 2012, 2013, 2014. +# Joe Hansen , 2011, 2012, 2013, 2014, 2015. # # audit -> overvågning # dummy -> attrap @@ -16,10 +16,10 @@ # msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.12b1\n" +"Project-Id-Version: sudoers 1.8.15rc3\n" "Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-10-23 07:54-0600\n" -"PO-Revision-Date: 2014-11-13 23:06+0100\n" +"POT-Creation-Date: 2015-10-24 06:26-0600\n" +"PO-Revision-Date: 2015-10-31 23:17+0100\n" "Last-Translator: Joe Hansen \n" "Language-Team: Danish \n" "Language: da\n" @@ -52,42 +52,172 @@ msgid "Sorry, try again." msgstr "Beklager, prøv igen." -#: plugins/sudoers/alias.c:136 +#: gram.y:183 gram.y:201 gram.y:207 gram.y:213 gram.y:219 gram.y:225 +#: gram.y:241 gram.y:248 gram.y:255 gram.y:262 gram.y:269 gram.y:285 +#: gram.y:308 gram.y:315 gram.y:322 gram.y:329 gram.y:336 gram.y:391 +#: gram.y:399 gram.y:409 gram.y:439 gram.y:446 gram.y:453 gram.y:460 +#: gram.y:572 gram.y:579 gram.y:588 gram.y:597 gram.y:614 gram.y:670 +#: gram.y:677 gram.y:684 gram.y:692 gram.y:784 gram.y:791 gram.y:798 +#: gram.y:805 gram.y:812 gram.y:838 gram.y:845 gram.y:852 gram.y:1136 +#: gram.y:1143 plugins/sudoers/alias.c:123 plugins/sudoers/alias.c:136 +#: plugins/sudoers/auth/bsdauth.c:141 plugins/sudoers/auth/kerb5.c:119 +#: plugins/sudoers/auth/kerb5.c:145 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/pam.c:449 plugins/sudoers/auth/rfc1938.c:109 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:516 +#: plugins/sudoers/defaults.c:720 plugins/sudoers/defaults.c:880 +#: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 +#: plugins/sudoers/editor.c:92 plugins/sudoers/env.c:233 +#: plugins/sudoers/group_plugin.c:133 plugins/sudoers/iolog.c:586 +#: plugins/sudoers/iolog.c:618 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:446 plugins/sudoers/ldap.c:477 +#: plugins/sudoers/ldap.c:529 plugins/sudoers/ldap.c:562 +#: plugins/sudoers/ldap.c:914 plugins/sudoers/ldap.c:1061 +#: plugins/sudoers/ldap.c:1348 plugins/sudoers/ldap.c:1521 +#: plugins/sudoers/ldap.c:1597 plugins/sudoers/ldap.c:1733 +#: plugins/sudoers/ldap.c:1757 plugins/sudoers/ldap.c:1787 +#: plugins/sudoers/ldap.c:1840 plugins/sudoers/ldap.c:1855 +#: plugins/sudoers/ldap.c:1951 plugins/sudoers/ldap.c:1984 +#: plugins/sudoers/ldap.c:2137 plugins/sudoers/ldap.c:2234 +#: plugins/sudoers/ldap.c:3041 plugins/sudoers/ldap.c:3074 +#: plugins/sudoers/ldap.c:3388 plugins/sudoers/ldap.c:3416 +#: plugins/sudoers/ldap.c:3427 plugins/sudoers/ldap.c:3517 +#: plugins/sudoers/ldap.c:3533 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:666 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:501 +#: plugins/sudoers/match.c:537 plugins/sudoers/match.c:699 +#: plugins/sudoers/match.c:756 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:384 +#: plugins/sudoers/policy.c:583 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/sssd.c:160 plugins/sudoers/sssd.c:192 +#: plugins/sudoers/sssd.c:235 plugins/sudoers/sssd.c:242 +#: plugins/sudoers/sssd.c:278 plugins/sudoers/sssd.c:323 +#: plugins/sudoers/sssd.c:917 plugins/sudoers/sssd.c:1050 +#: plugins/sudoers/sudoers.c:159 plugins/sudoers/sudoers.c:294 +#: plugins/sudoers/sudoers.c:304 plugins/sudoers/sudoers.c:312 +#: plugins/sudoers/sudoers.c:365 plugins/sudoers/sudoers.c:663 +#: plugins/sudoers/sudoers.c:749 plugins/sudoers/sudoers.c:793 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:472 +#: plugins/sudoers/sudoreplay.c:668 plugins/sudoers/sudoreplay.c:780 +#: plugins/sudoers/sudoreplay.c:820 plugins/sudoers/sudoreplay.c:829 +#: plugins/sudoers/sudoreplay.c:839 plugins/sudoers/sudoreplay.c:847 +#: plugins/sudoers/sudoreplay.c:851 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1011 plugins/sudoers/testsudoers.c:130 +#: plugins/sudoers/testsudoers.c:188 plugins/sudoers/testsudoers.c:215 +#: plugins/sudoers/testsudoers.c:232 plugins/sudoers/timestamp.c:390 +#: plugins/sudoers/timestamp.c:426 plugins/sudoers/timestamp.c:838 +#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 +#: plugins/sudoers/toke_util.c:147 plugins/sudoers/visudo.c:152 +#: plugins/sudoers/visudo.c:213 plugins/sudoers/visudo.c:297 +#: plugins/sudoers/visudo.c:303 plugins/sudoers/visudo.c:433 +#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo.c:1023 +#: plugins/sudoers/visudo.c:1119 toke.l:785 toke.l:806 toke.l:816 toke.l:924 +#: toke.l:1082 +msgid "unable to allocate memory" +msgstr "kan ikke tildele hukommelse" + +#: gram.y:471 +msgid "a digest requires a path name" +msgstr "et sammendrag kræver et stinavn" + +#: gram.y:1136 gram.y:1143 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/pam.c:449 plugins/sudoers/auth/rfc1938.c:109 +#: plugins/sudoers/defaults.c:516 plugins/sudoers/defaults.c:720 +#: plugins/sudoers/defaults.c:880 plugins/sudoers/editor.c:64 +#: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:92 +#: plugins/sudoers/env.c:233 plugins/sudoers/group_plugin.c:133 +#: plugins/sudoers/iolog.c:586 plugins/sudoers/iolog.c:618 +#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:446 +#: plugins/sudoers/ldap.c:477 plugins/sudoers/ldap.c:529 +#: plugins/sudoers/ldap.c:562 plugins/sudoers/ldap.c:914 +#: plugins/sudoers/ldap.c:1061 plugins/sudoers/ldap.c:1348 +#: plugins/sudoers/ldap.c:1521 plugins/sudoers/ldap.c:1597 +#: plugins/sudoers/ldap.c:1733 plugins/sudoers/ldap.c:1757 +#: plugins/sudoers/ldap.c:1787 plugins/sudoers/ldap.c:1840 +#: plugins/sudoers/ldap.c:1855 plugins/sudoers/ldap.c:1951 +#: plugins/sudoers/ldap.c:1984 plugins/sudoers/ldap.c:2137 +#: plugins/sudoers/ldap.c:2234 plugins/sudoers/ldap.c:3041 +#: plugins/sudoers/ldap.c:3074 plugins/sudoers/ldap.c:3388 +#: plugins/sudoers/ldap.c:3416 plugins/sudoers/ldap.c:3427 +#: plugins/sudoers/ldap.c:3517 plugins/sudoers/ldap.c:3533 +#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:501 +#: plugins/sudoers/match.c:537 plugins/sudoers/match.c:699 +#: plugins/sudoers/match.c:756 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:97 +#: plugins/sudoers/policy.c:106 plugins/sudoers/policy.c:115 +#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:250 +#: plugins/sudoers/policy.c:271 plugins/sudoers/policy.c:280 +#: plugins/sudoers/policy.c:319 plugins/sudoers/policy.c:329 +#: plugins/sudoers/policy.c:338 plugins/sudoers/policy.c:384 +#: plugins/sudoers/policy.c:583 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:160 +#: plugins/sudoers/sssd.c:192 plugins/sudoers/sssd.c:235 +#: plugins/sudoers/sssd.c:242 plugins/sudoers/sssd.c:278 +#: plugins/sudoers/sssd.c:323 plugins/sudoers/sssd.c:917 +#: plugins/sudoers/sssd.c:1050 plugins/sudoers/sudoers.c:159 +#: plugins/sudoers/sudoers.c:294 plugins/sudoers/sudoers.c:304 +#: plugins/sudoers/sudoers.c:312 plugins/sudoers/sudoers.c:365 +#: plugins/sudoers/sudoers.c:663 plugins/sudoers/sudoers.c:749 +#: plugins/sudoers/sudoers.c:793 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sudoreplay.c:472 plugins/sudoers/sudoreplay.c:668 +#: plugins/sudoers/sudoreplay.c:780 plugins/sudoers/sudoreplay.c:820 +#: plugins/sudoers/sudoreplay.c:829 plugins/sudoers/sudoreplay.c:839 +#: plugins/sudoers/sudoreplay.c:847 plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:1007 plugins/sudoers/sudoreplay.c:1011 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:188 +#: plugins/sudoers/testsudoers.c:215 plugins/sudoers/testsudoers.c:232 +#: plugins/sudoers/timestamp.c:390 plugins/sudoers/timestamp.c:426 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:147 +#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:213 +#: plugins/sudoers/visudo.c:297 plugins/sudoers/visudo.c:303 +#: plugins/sudoers/visudo.c:433 plugins/sudoers/visudo.c:979 +#: plugins/sudoers/visudo.c:1023 plugins/sudoers/visudo.c:1119 toke.l:785 +#: toke.l:806 toke.l:816 toke.l:924 toke.l:1082 +#, c-format +msgid "%s: %s" +msgstr "%s: %s" + +#: plugins/sudoers/alias.c:132 #, c-format msgid "Alias `%s' already defined" msgstr "Alias »%s« er allerede defineret" -#: plugins/sudoers/auth/bsdauth.c:75 +#: plugins/sudoers/auth/bsdauth.c:68 #, c-format msgid "unable to get login class for user %s" msgstr "kan ikke hente logindklasse for bruger %s" -#: plugins/sudoers/auth/bsdauth.c:80 +#: plugins/sudoers/auth/bsdauth.c:73 msgid "unable to begin bsd authentication" msgstr "kan ikke starte bsd-godkendelse" -#: plugins/sudoers/auth/bsdauth.c:88 +#: plugins/sudoers/auth/bsdauth.c:81 msgid "invalid authentication type" msgstr "ugyldig godkendelsestype" -#: plugins/sudoers/auth/bsdauth.c:97 +#: plugins/sudoers/auth/bsdauth.c:90 msgid "unable to initialize BSD authentication" msgstr "kan ikke initialisere BSD-godkendelse" -#: plugins/sudoers/auth/fwtk.c:59 +#: plugins/sudoers/auth/fwtk.c:52 msgid "unable to read fwtk config" msgstr "kan ikke læse fwtk-konfiguration" -#: plugins/sudoers/auth/fwtk.c:64 +#: plugins/sudoers/auth/fwtk.c:57 msgid "unable to connect to authentication server" msgstr "kan ikke forbinde til godkendelsesserver" -#: plugins/sudoers/auth/fwtk.c:70 plugins/sudoers/auth/fwtk.c:94 -#: plugins/sudoers/auth/fwtk.c:127 +#: plugins/sudoers/auth/fwtk.c:63 plugins/sudoers/auth/fwtk.c:87 +#: plugins/sudoers/auth/fwtk.c:120 msgid "lost connection to authentication server" msgstr "mistede forbindelsen til godkendelseserveren" -#: plugins/sudoers/auth/fwtk.c:74 +#: plugins/sudoers/auth/fwtk.c:67 #, c-format msgid "" "authentication server error:\n" @@ -96,155 +226,155 @@ "godkendelsesserverfejl:\n" "%s" -#: plugins/sudoers/auth/kerb5.c:116 +#: plugins/sudoers/auth/kerb5.c:111 #, c-format msgid "%s: unable to convert principal to string ('%s'): %s" msgstr "%s: Kan ikke konvertere værtshovedstol til streng (»%s«): %s" -#: plugins/sudoers/auth/kerb5.c:158 +#: plugins/sudoers/auth/kerb5.c:161 #, c-format msgid "%s: unable to parse '%s': %s" msgstr "%s: Kan ikke fortolke »%s«: %s" -#: plugins/sudoers/auth/kerb5.c:167 +#: plugins/sudoers/auth/kerb5.c:170 #, c-format msgid "%s: unable to resolve credential cache: %s" msgstr "%s: Kan ikke slå akkreditivmellemlager op: %s" -#: plugins/sudoers/auth/kerb5.c:214 +#: plugins/sudoers/auth/kerb5.c:217 #, c-format msgid "%s: unable to allocate options: %s" msgstr "%s: Kan ikke allokere tilvalg: %s" -#: plugins/sudoers/auth/kerb5.c:229 +#: plugins/sudoers/auth/kerb5.c:232 #, c-format msgid "%s: unable to get credentials: %s" msgstr "%s: Kan ikke indhente akkreditiver: %s" -#: plugins/sudoers/auth/kerb5.c:242 +#: plugins/sudoers/auth/kerb5.c:245 #, c-format msgid "%s: unable to initialize credential cache: %s" msgstr "%s: Kan ikke initialisere akkreditivmellemlager: %s" -#: plugins/sudoers/auth/kerb5.c:245 +#: plugins/sudoers/auth/kerb5.c:248 #, c-format msgid "%s: unable to store credential in cache: %s" msgstr "%s: Kan ikke gemme akkreditiver i mellemlager: %s" -#: plugins/sudoers/auth/kerb5.c:309 +#: plugins/sudoers/auth/kerb5.c:312 #, c-format msgid "%s: unable to get host principal: %s" msgstr "%s: Kan ikke indhente værtshovedstol: %s" -#: plugins/sudoers/auth/kerb5.c:323 +#: plugins/sudoers/auth/kerb5.c:326 #, c-format msgid "%s: Cannot verify TGT! Possible attack!: %s" msgstr "%s: Kan ikke verifiere TGT! Muligt angreb!: %s" -#: plugins/sudoers/auth/pam.c:98 +#: plugins/sudoers/auth/pam.c:92 msgid "unable to initialize PAM" msgstr "kan ikke initialisere PAM" -#: plugins/sudoers/auth/pam.c:149 +#: plugins/sudoers/auth/pam.c:164 msgid "account validation failure, is your account locked?" msgstr "valideringsfejl for konto, er din konto låst?" -#: plugins/sudoers/auth/pam.c:153 +#: plugins/sudoers/auth/pam.c:168 msgid "Account or password is expired, reset your password and try again" msgstr "Konto eller adgangskoder er udløbet, nulstil din adgangskode og forsøg igen" -#: plugins/sudoers/auth/pam.c:161 +#: plugins/sudoers/auth/pam.c:176 #, c-format msgid "unable to change expired password: %s" msgstr "kan ikke ændre udløbet adgangskode: %s" -#: plugins/sudoers/auth/pam.c:166 +#: plugins/sudoers/auth/pam.c:181 msgid "Password expired, contact your system administrator" msgstr "Adgangskode udløbet, kontakt din systemadministrator" -#: plugins/sudoers/auth/pam.c:170 +#: plugins/sudoers/auth/pam.c:185 msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator" msgstr "Konto udløbet eller PAM-konfiguration mangler et »kontoafsnit« for sudo. Kontakt din systemadministrator" -#: plugins/sudoers/auth/pam.c:187 +#: plugins/sudoers/auth/pam.c:199 #, c-format msgid "PAM authentication error: %s" msgstr "PAM-godkendelsesserverfejl: %s" -#: plugins/sudoers/auth/rfc1938.c:103 plugins/sudoers/visudo.c:222 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:218 #, c-format msgid "you do not exist in the %s database" msgstr "du findes ikke i %s-databasen" -#: plugins/sudoers/auth/securid5.c:80 +#: plugins/sudoers/auth/securid5.c:73 msgid "failed to initialise the ACE API library" msgstr "kunne ikke initialisere ACE API-biblioteket" -#: plugins/sudoers/auth/securid5.c:106 +#: plugins/sudoers/auth/securid5.c:99 msgid "unable to contact the SecurID server" msgstr "kan ikke kontakte SecurID-serveren" -#: plugins/sudoers/auth/securid5.c:115 +#: plugins/sudoers/auth/securid5.c:108 msgid "User ID locked for SecurID Authentication" msgstr "Bruger-ID låst for SecurID-godkendelse" -#: plugins/sudoers/auth/securid5.c:119 plugins/sudoers/auth/securid5.c:170 +#: plugins/sudoers/auth/securid5.c:112 plugins/sudoers/auth/securid5.c:163 msgid "invalid username length for SecurID" msgstr "ugyldigt brugernavnslængde for SecurID" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:175 +#: plugins/sudoers/auth/securid5.c:116 plugins/sudoers/auth/securid5.c:168 msgid "invalid Authentication Handle for SecurID" msgstr "ugyldigt godkendelseshåndtag for SecurID" -#: plugins/sudoers/auth/securid5.c:127 +#: plugins/sudoers/auth/securid5.c:120 msgid "SecurID communication failed" msgstr "SecurID-kommunikation fejlede" -#: plugins/sudoers/auth/securid5.c:131 plugins/sudoers/auth/securid5.c:214 +#: plugins/sudoers/auth/securid5.c:124 plugins/sudoers/auth/securid5.c:207 msgid "unknown SecurID error" msgstr "ukendt SecurID-fejl" -#: plugins/sudoers/auth/securid5.c:165 +#: plugins/sudoers/auth/securid5.c:158 msgid "invalid passcode length for SecurID" msgstr "ugyldig adgangskodelængde for SecurID" -#: plugins/sudoers/auth/sia.c:123 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:124 msgid "unable to initialize SIA session" msgstr "kan ikke initialisere SIA-session" -#: plugins/sudoers/auth/sudo_auth.c:115 +#: plugins/sudoers/auth/sudo_auth.c:126 msgid "invalid authentication methods" msgstr "ugyldige godkendelsesmetoder" -#: plugins/sudoers/auth/sudo_auth.c:117 +#: plugins/sudoers/auth/sudo_auth.c:128 msgid "Invalid authentication methods compiled into sudo! You may not mix standalone and non-standalone authentication." msgstr "Ugyldige godkendelsesmetoder kompileret ind i sudo! Du kan ikke blande uafhængig og ikkeuafhængig godkendelse." -#: plugins/sudoers/auth/sudo_auth.c:203 plugins/sudoers/auth/sudo_auth.c:252 +#: plugins/sudoers/auth/sudo_auth.c:225 plugins/sudoers/auth/sudo_auth.c:274 msgid "no authentication methods" msgstr "ingen godkendelsesmetoder" -#: plugins/sudoers/auth/sudo_auth.c:205 +#: plugins/sudoers/auth/sudo_auth.c:227 msgid "There are no authentication methods compiled into sudo! If you want to turn off authentication, use the --disable-authentication configure option." msgstr "Der er ingen godkendelsesmetoder kompileret ind i sudo! Hvis du ønsker at fravælge godkendelse så brug konfigurationstilvalget --disable-authentication." -#: plugins/sudoers/auth/sudo_auth.c:254 +#: plugins/sudoers/auth/sudo_auth.c:276 msgid "Unable to initialize authentication methods." msgstr "Kan ikke initialisere godkendelsesmetoder." -#: plugins/sudoers/auth/sudo_auth.c:412 +#: plugins/sudoers/auth/sudo_auth.c:435 msgid "Authentication methods:" msgstr "Godkendelsesmetoder:" -#: plugins/sudoers/bsm_audit.c:100 plugins/sudoers/bsm_audit.c:189 +#: plugins/sudoers/bsm_audit.c:111 plugins/sudoers/bsm_audit.c:200 msgid "Could not determine audit condition" msgstr "Kunne ikke bestemme overvågningsbetingelse" -#: plugins/sudoers/bsm_audit.c:161 plugins/sudoers/bsm_audit.c:249 +#: plugins/sudoers/bsm_audit.c:172 plugins/sudoers/bsm_audit.c:260 msgid "unable to commit audit record" msgstr "kan ikke indsende overvågningspost" -#: plugins/sudoers/check.c:197 +#: plugins/sudoers/check.c:252 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -264,15 +394,15 @@ " #3) Med stor magt følger stort ansvar.\n" "\n" -#: plugins/sudoers/check.c:240 plugins/sudoers/check.c:250 -#: plugins/sudoers/sudoers.c:599 plugins/sudoers/sudoers.c:628 +#: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 +#: plugins/sudoers/sudoers.c:699 plugins/sudoers/sudoers.c:728 #, c-format msgid "unknown uid: %u" msgstr "ukendt uid: %u" -#: plugins/sudoers/check.c:245 plugins/sudoers/policy.c:710 -#: plugins/sudoers/sudoers.c:918 plugins/sudoers/testsudoers.c:211 -#: plugins/sudoers/testsudoers.c:363 +#: plugins/sudoers/check.c:300 plugins/sudoers/policy.c:755 +#: plugins/sudoers/sudoers.c:1095 plugins/sudoers/testsudoers.c:206 +#: plugins/sudoers/testsudoers.c:361 #, c-format msgid "unknown user: %s" msgstr "ukendt bruger: %s" @@ -321,536 +451,543 @@ msgstr "Send post hvis brugeren ikke har tilladelse til at køre en kommando" #: plugins/sudoers/def_data.c:67 +msgid "Send mail if the user tries to run a command" +msgstr "Send post hvis brugeren forsøger at køre en kommando" + +#: plugins/sudoers/def_data.c:71 msgid "Use a separate timestamp for each user/tty combo" msgstr "Brug et separat tidsstempel for hver bruger/tty-kombination" -#: plugins/sudoers/def_data.c:71 +#: plugins/sudoers/def_data.c:75 msgid "Lecture user the first time they run sudo" msgstr "Undervis brugere den første gang de kører sudo" -#: plugins/sudoers/def_data.c:75 +#: plugins/sudoers/def_data.c:79 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Fil indeholdende sudo-undervisningen: %s" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:83 msgid "Require users to authenticate by default" msgstr "Kræv som standard at brugere skal godkendes" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:87 msgid "Root may run sudo" msgstr "Root kan køre sudo" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:91 msgid "Log the hostname in the (non-syslog) log file" msgstr "Log værtsnavnet i logfilen (non-syslog)" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:95 msgid "Log the year in the (non-syslog) log file" msgstr "Log året i logfilen (non-syslog)" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:99 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Hvis sudo er startet op uden argumenter så start en skal" -#: plugins/sudoers/def_data.c:99 +#: plugins/sudoers/def_data.c:103 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Angiv $HOME for målbrugeren når der startes en skal med -s" -#: plugins/sudoers/def_data.c:103 +#: plugins/sudoers/def_data.c:107 msgid "Always set $HOME to the target user's home directory" msgstr "Angiv altid $HOME for målbrugerens hjemmemappe" -#: plugins/sudoers/def_data.c:107 +#: plugins/sudoers/def_data.c:111 msgid "Allow some information gathering to give useful error messages" msgstr "Tillad lidt informationsindsamling for at lave brugbare fejlbeskeder" -#: plugins/sudoers/def_data.c:111 +#: plugins/sudoers/def_data.c:115 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Kræv fuldkvalificerede værtsnavne i sudoersfilen" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:119 msgid "Insult the user when they enter an incorrect password" msgstr "Fornærm brugeren når de indtaster en forkert adgangskode" -#: plugins/sudoers/def_data.c:119 +#: plugins/sudoers/def_data.c:123 msgid "Only allow the user to run sudo if they have a tty" msgstr "Tillad kun brugeren at køre sudo hvis de har en tty" -#: plugins/sudoers/def_data.c:123 +#: plugins/sudoers/def_data.c:127 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo vil overholde EDITOR-miljøvariablen" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:131 msgid "Prompt for root's password, not the users's" msgstr "Spørg om adgangskoden for root, ikke brugerens" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:135 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Spørg om brugerens kør som_standard adgangskode, ikke brugernes" -#: plugins/sudoers/def_data.c:135 +#: plugins/sudoers/def_data.c:139 msgid "Prompt for the target user's password, not the users's" msgstr "Spørg om målbrugerens adgangskode, ikke brugernes" -#: plugins/sudoers/def_data.c:139 +#: plugins/sudoers/def_data.c:143 msgid "Apply defaults in the target user's login class if there is one" msgstr "Brug standarder i målbrugerens logindklasse hvis der er en" -#: plugins/sudoers/def_data.c:143 +#: plugins/sudoers/def_data.c:147 msgid "Set the LOGNAME and USER environment variables" msgstr "Angiv LOGNAME- og USER-miljøvariablerne" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:151 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Angiv kun den effektive uid til målbrugeren, ikke den reelle uid" -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:155 msgid "Don't initialize the group vector to that of the target user" msgstr "Initialiser ikke gruppevektoren til målbrugerens" -#: plugins/sudoers/def_data.c:155 +#: plugins/sudoers/def_data.c:159 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Længde hvor logfillinjer skal ombrydes (0 for ingen ombrydning): %u" -#: plugins/sudoers/def_data.c:159 +#: plugins/sudoers/def_data.c:163 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Tidsudløb for godkendelsestidsstempel: %.1f minutter" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:167 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Tidsudløb for adgangskodeprompt: %.1f minutter" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:171 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Antal forsøg for indtastning af adgangskode: %u" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:175 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "Umask at bruge eller 0777 for at bruge brugers: 0%o" -#: plugins/sudoers/def_data.c:175 +#: plugins/sudoers/def_data.c:179 #, c-format msgid "Path to log file: %s" msgstr "Sti til logfil: %s" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:183 #, c-format msgid "Path to mail program: %s" msgstr "Stil til postprogram: %s" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:187 #, c-format msgid "Flags for mail program: %s" msgstr "Flag for postprogram: %s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:191 #, c-format msgid "Address to send mail to: %s" msgstr "Adresse at sende post til: %s" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:195 #, c-format msgid "Address to send mail from: %s" msgstr "Adresse at sende post fra: %s" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:199 #, c-format msgid "Subject line for mail messages: %s" msgstr "Emnelinje for postbeskeder: %s" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:203 #, c-format msgid "Incorrect password message: %s" msgstr "Ugyldig adgangskodebesked: %s" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:207 #, c-format msgid "Path to lecture status dir: %s" msgstr "Sti til undervisningsstatusmappen: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:211 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Sti til mappe for godkendelsestidsstempel: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:215 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Ejer af mappen for godkendelsestidsstempel: %s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:219 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Brugere i denne gruppe er undtaget fra adgangskode og STI-krav: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:223 #, c-format msgid "Default password prompt: %s" msgstr "Standard for adgangskodeprompt: %s" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:227 msgid "If set, passprompt will override system prompt in all cases." msgstr "Hvis angivet vil adgangsprompt overskrive systemprompt i alle tilfælde." -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:231 #, c-format msgid "Default user to run commands as: %s" msgstr "Standardbruger at køre kommandoer som: %s" -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:235 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Værdi at overskrive brugers $PATH med: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:239 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Sti til redigeringsprogrammet for brug af visudo: %s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:243 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Hvornår der skal kræves en adgangskode for »list« pseudokommando: %s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:247 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Hvornår der skal kræves en adgangskode for »verify« pseudokommando: %s" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:251 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Præindlæs attrap-udførelsesfunktioner indeholdt i biblioteket sudo_noexec" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:255 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Hvis LDAP-mappe er sat op, ignorer vi så lokal sudoersfil" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:259 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Filbeskrivelser >= %d vil blive lukket før udførelse af en kommando" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:263 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "Hvis angivet kan brugere overskrive værdien af »closeform« med tilvalget -C" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:267 msgid "Allow users to set arbitrary environment variables" msgstr "Tillad at brugere kan angive arbitrære miljøvariabler" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:271 msgid "Reset the environment to a default set of variables" msgstr "Nulstil miljøet til et standardsæt af variabler" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to check for sanity:" msgstr "Miljøvariabler at indstillingskontrollere:" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to remove:" msgstr "Miljøvariabler at fjerne:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:283 msgid "Environment variables to preserve:" msgstr "Miljøvariabler at bevare:" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:287 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "SELinux-rolle at bruge i den nye sikkerhedskontekst: %s" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:291 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "SELinux-type at bruge i den nye sikkerhedskontekst: %s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:295 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Sti til den sudo-specifikke miljøfil: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:299 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Sprog at bruge under fortolkning af sudoers: %s" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:303 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Tillad at sudo spørger om en adgangskode selv om den vil være synlig" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:307 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Tilbyd visuel tilbagemeldning ved adgangskodeprompten når der er brugerinddata" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:311 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Brug hurtigere globbing som er mindre præcis, men som ikke tilgår filsystemet" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:315 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "Umask'en angivet i sudoers vil overskrive brugerens, også selv om den er mere tilladende" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:319 msgid "Log user's input for the command being run" msgstr "Log brugers inddata for kommandoen der bliver kørt" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:323 msgid "Log the output of the command being run" msgstr "Log uddata for kommandoen der bliver kørt" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:327 msgid "Compress I/O logs using zlib" msgstr "Komprimer I/O-log med brug af zlib" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:331 msgid "Always run commands in a pseudo-tty" msgstr "Kør altid kommandoer i en pseudo-tty" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:335 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Udvidelsesmodul for ikke-Unix-gruppeunderstøttelse: %s" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:339 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Mappe at gemme inddata-/uddatalogge i: %s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:343 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Fil at gemme inddata-/uddatalog i: %s" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:347 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Tilføjer et punkt til utmp/utmpx-filen når der allokeres en pty" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:351 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Angiv brugeren i utmp til brugeren kør som, ikke den opstartende bruger" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:355 msgid "Set of permitted privileges" msgstr "Sæt af tilladte privilegier" # engelsk fejl? Set of limited ... -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:359 msgid "Set of limit privileges" msgstr "Sæt af begræns privilegier" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:363 msgid "Run commands on a pty in the background" msgstr "Kør kommandoer på en pty i baggrunden" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:367 msgid "PAM service name to use" msgstr "PAM-tjenestenavn der skal bruges" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:371 msgid "PAM service name to use for login shells" msgstr "PAM-tjenestenavn der skal bruges for logindskaller" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:375 msgid "Attempt to establish PAM credentials for the target user" msgstr "Forsøg på at etablere PAM-akkreditiver for målbrugeren" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:379 msgid "Create a new PAM session for the command to run in" msgstr "Opret en ny PAM-session som kommandoen kan køre i" -#: plugins/sudoers/def_data.c:379 +#: plugins/sudoers/def_data.c:383 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Maksimalt I/O-logsekvenstal: %u" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:387 msgid "Enable sudoers netgroup support" msgstr "Aktiver sudoers netgroup-understøttelse" -#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:601 -#: plugins/sudoers/visudo_json.c:642 plugins/sudoers/visudo_json.c:677 +#: plugins/sudoers/def_data.c:391 +msgid "Check the parent directory for writability when editing files with sudoedit" +msgstr "Kontroller overmappen for skrivbarhed når filer redigeres med sudoedit" + +#: plugins/sudoers/def_data.c:395 +msgid "Follow symbolic links when editing files with sudoedit" +msgstr "Følg symbolske henvisninger når filer redigeres med sudoedit" + +#: plugins/sudoers/def_data.c:399 +msgid "Query the group plugin for unknown system groups" +msgstr "Forespørg gruppe-udvidelsesmodulet for ukendte systemgrupper" + +#: plugins/sudoers/defaults.c:199 plugins/sudoers/defaults.c:608 +#: plugins/sudoers/visudo_json.c:633 plugins/sudoers/visudo_json.c:668 #, c-format msgid "unknown defaults entry `%s'" msgstr "ukendt standardpunkt »%s«" -#: plugins/sudoers/defaults.c:218 plugins/sudoers/defaults.c:228 -#: plugins/sudoers/defaults.c:248 plugins/sudoers/defaults.c:261 -#: plugins/sudoers/defaults.c:274 plugins/sudoers/defaults.c:287 -#: plugins/sudoers/defaults.c:300 plugins/sudoers/defaults.c:320 -#: plugins/sudoers/defaults.c:330 +#: plugins/sudoers/defaults.c:207 plugins/sudoers/defaults.c:217 +#: plugins/sudoers/defaults.c:241 plugins/sudoers/defaults.c:256 +#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 +#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 +#: plugins/sudoers/defaults.c:325 #, c-format msgid "value `%s' is invalid for option `%s'" msgstr "værdi »%s« er ugyldig for indstilling »%s«" -#: plugins/sudoers/defaults.c:221 plugins/sudoers/defaults.c:231 -#: plugins/sudoers/defaults.c:239 plugins/sudoers/defaults.c:256 -#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 -#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 -#: plugins/sudoers/defaults.c:326 +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:220 +#: plugins/sudoers/defaults.c:228 plugins/sudoers/defaults.c:251 +#: plugins/sudoers/defaults.c:264 plugins/sudoers/defaults.c:277 +#: plugins/sudoers/defaults.c:290 plugins/sudoers/defaults.c:310 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "no value specified for `%s'" msgstr "ingen værdi angivet for »%s«" -#: plugins/sudoers/defaults.c:244 +#: plugins/sudoers/defaults.c:233 #, c-format msgid "values for `%s' must start with a '/'" msgstr "værdier for »%s« skal begynde med en »/«" -#: plugins/sudoers/defaults.c:306 +#: plugins/sudoers/defaults.c:301 #, c-format msgid "option `%s' does not take a value" msgstr "indstilling »%s« kan ikke modtage en værdi" -#: plugins/sudoers/env.c:276 plugins/sudoers/env.c:283 -#: plugins/sudoers/env.c:386 plugins/sudoers/linux_audit.c:89 -#: plugins/sudoers/logging.c:918 plugins/sudoers/policy.c:475 -#: plugins/sudoers/policy.c:484 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:708 plugins/sudoers/testsudoers.c:241 -#: plugins/sudoers/toke_util.c:174 +#: plugins/sudoers/env.c:295 plugins/sudoers/env.c:302 +#: plugins/sudoers/env.c:407 plugins/sudoers/ldap.c:450 +#: plugins/sudoers/ldap.c:540 plugins/sudoers/ldap.c:1152 +#: plugins/sudoers/ldap.c:1354 plugins/sudoers/ldap.c:1526 +#: plugins/sudoers/ldap.c:1682 plugins/sudoers/linux_audit.c:82 +#: plugins/sudoers/logging.c:929 plugins/sudoers/policy.c:502 +#: plugins/sudoers/policy.c:511 plugins/sudoers/prompt.c:161 +#: plugins/sudoers/sudoers.c:815 plugins/sudoers/testsudoers.c:236 +#: plugins/sudoers/toke_util.c:160 #, c-format msgid "internal error, %s overflow" msgstr "intern fejl, %s-overløb" -#: plugins/sudoers/env.c:359 +#: plugins/sudoers/env.c:376 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: ødelagt envp, forskellig længde" -#: plugins/sudoers/env.c:1054 +#: plugins/sudoers/env.c:1076 +msgid "unable to rebuild the environment" +msgstr "kan ikke genopbygge miljøet" + +#: plugins/sudoers/env.c:1150 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "beklager, du har ikke tilladelse til at angive de følgende miljøvariabler: %s" -#: plugins/sudoers/group_plugin.c:94 +#: plugins/sudoers/group_plugin.c:85 #, c-format msgid "%s must be owned by uid %d" msgstr "%s skal være ejet af uid %d" -#: plugins/sudoers/group_plugin.c:98 +#: plugins/sudoers/group_plugin.c:89 #, c-format msgid "%s must only be writable by owner" msgstr "%s skal være skrivbar af ejer" -#: plugins/sudoers/group_plugin.c:105 plugins/sudoers/sssd.c:251 +#: plugins/sudoers/group_plugin.c:97 plugins/sudoers/sssd.c:331 #, c-format msgid "unable to load %s: %s" msgstr "kan ikke indlæse %s: %s" -#: plugins/sudoers/group_plugin.c:110 +#: plugins/sudoers/group_plugin.c:103 #, c-format msgid "unable to find symbol \"group_plugin\" in %s" msgstr "kan ikke finde symbol »group_plugin« i %s" -#: plugins/sudoers/group_plugin.c:115 +#: plugins/sudoers/group_plugin.c:108 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: inkompatibel gruppeudvidelsesmodul for hovedversion %d, forventede %d" -#: plugins/sudoers/interfaces.c:116 +#: plugins/sudoers/interfaces.c:117 msgid "Local IP address and netmask pairs:\n" msgstr "Lokal IP-adresse og netmaskepar:\n" -#: plugins/sudoers/iolog.c:101 plugins/sudoers/iolog.c:119 -#: plugins/sudoers/timestamp.c:233 +#: plugins/sudoers/iolog.c:92 plugins/sudoers/iolog.c:110 +#: plugins/sudoers/timestamp.c:169 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s findes men er ikke en mappe (0%o)" -#: plugins/sudoers/iolog.c:112 plugins/sudoers/iolog.c:133 -#: plugins/sudoers/iolog.c:140 plugins/sudoers/timestamp.c:227 -#: plugins/sudoers/timestamp.c:248 +#: plugins/sudoers/iolog.c:103 plugins/sudoers/iolog.c:124 +#: plugins/sudoers/iolog.c:131 plugins/sudoers/timestamp.c:163 +#: plugins/sudoers/timestamp.c:184 #, c-format msgid "unable to mkdir %s" msgstr "kan ikke mkdir %s" -#: plugins/sudoers/iolog.c:209 plugins/sudoers/sudoers.c:764 -#: plugins/sudoers/sudoreplay.c:344 plugins/sudoers/sudoreplay.c:815 -#: plugins/sudoers/sudoreplay.c:1012 plugins/sudoers/timestamp.c:357 -#: plugins/sudoers/visudo.c:826 plugins/sudoers/visudo_json.c:1025 -#: plugins/sudoers/visudo_json.c:1038 +#: plugins/sudoers/iolog.c:200 plugins/sudoers/sudoers.c:871 +#: plugins/sudoers/sudoreplay.c:300 plugins/sudoers/sudoreplay.c:769 +#: plugins/sudoers/sudoreplay.c:973 plugins/sudoers/timestamp.c:399 +#: plugins/sudoers/visudo.c:903 plugins/sudoers/visudo_json.c:1012 +#: plugins/sudoers/visudo_json.c:1025 #, c-format msgid "unable to open %s" msgstr "kan ikke åbne %s" -#: plugins/sudoers/iolog.c:250 plugins/sudoers/sudoers.c:768 -#: plugins/sudoers/sudoreplay.c:1119 +#: plugins/sudoers/iolog.c:241 plugins/sudoers/sudoers.c:875 +#: plugins/sudoers/sudoreplay.c:1084 #, c-format msgid "unable to read %s" msgstr "kan ikke læse %s" -#: plugins/sudoers/iolog.c:282 plugins/sudoers/sudoreplay.c:584 -#: plugins/sudoers/timestamp.c:186 plugins/sudoers/timestamp.c:189 +#: plugins/sudoers/iolog.c:277 plugins/sudoers/sudoreplay.c:550 +#: plugins/sudoers/timestamp.c:298 plugins/sudoers/timestamp.c:301 #, c-format msgid "unable to write to %s" msgstr "kan ikke skrive til %s" -#: plugins/sudoers/iolog.c:347 plugins/sudoers/iolog.c:545 +#: plugins/sudoers/iolog.c:342 plugins/sudoers/iolog.c:540 #, c-format msgid "unable to create %s" msgstr "kan ikke oprette %s" -#: plugins/sudoers/ldap.c:406 +#: plugins/sudoers/ldap.c:428 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: port for stor" -#: plugins/sudoers/ldap.c:431 -msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" -msgstr "sudo_ldap_conf_add_ports: stigende mellemlager for vært (hostbuf) har ikke nok plads" - -#: plugins/sudoers/ldap.c:464 +#: plugins/sudoers/ldap.c:488 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "ikkeunderstøttet LDAP uri-type: %s" -#: plugins/sudoers/ldap.c:495 +#: plugins/sudoers/ldap.c:515 msgid "unable to mix ldap and ldaps URIs" msgstr "kan ikke blande ldap og ldaps URI'er" -#: plugins/sudoers/ldap.c:499 plugins/sudoers/ldap.c:532 +#: plugins/sudoers/ldap.c:519 plugins/sudoers/ldap.c:555 msgid "starttls not supported when using ldaps" msgstr "starttls er ikke understøttet, når der bruges ldaps" -#: plugins/sudoers/ldap.c:517 -msgid "sudo_ldap_parse_uri: out of space building hostbuf" -msgstr "sudo_ldap_parse_uri: opbyggende mellemlager for vært (hostbuf) har ikke nok plads" - -#: plugins/sudoers/ldap.c:599 +#: plugins/sudoers/ldap.c:626 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "kan ikke initialisere SSL-cert og key db: %s" -#: plugins/sudoers/ldap.c:602 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "du skal angive at TLS_CERT i %s skal bruge SSL" -#: plugins/sudoers/ldap.c:1093 +#: plugins/sudoers/ldap.c:1138 msgid "unable to get GMT time" msgstr "kan ikke indhente GMT-tid" -#: plugins/sudoers/ldap.c:1099 +#: plugins/sudoers/ldap.c:1144 msgid "unable to format timestamp" msgstr "kan ikke formatere tidsstempel" -#: plugins/sudoers/ldap.c:1107 -msgid "unable to build time filter" -msgstr "kan ikke bygge tidsfilter" - -#: plugins/sudoers/ldap.c:1326 -msgid "sudo_ldap_build_pass1 allocation mismatch" -msgstr "sudo_ldap_build_pass1 forskellige allokeringer" - -#: plugins/sudoers/ldap.c:1469 +#: plugins/sudoers/ldap.c:1830 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:1963 +#: plugins/sudoers/ldap.c:2372 #, c-format msgid "" "\n" @@ -859,7 +996,7 @@ "\n" "LDAP-rolle: %s\n" -#: plugins/sudoers/ldap.c:1965 +#: plugins/sudoers/ldap.c:2374 #, c-format msgid "" "\n" @@ -868,108 +1005,108 @@ "\n" "LDAP-rolle: UKENDT\n" -#: plugins/sudoers/ldap.c:2012 +#: plugins/sudoers/ldap.c:2421 #, c-format msgid " Order: %s\n" msgstr " Rækkefølge: %s\n" -#: plugins/sudoers/ldap.c:2020 plugins/sudoers/parse.c:512 -#: plugins/sudoers/sssd.c:1297 +#: plugins/sudoers/ldap.c:2429 plugins/sudoers/parse.c:555 +#: plugins/sudoers/sssd.c:1417 #, c-format msgid " Commands:\n" msgstr " Kommandoer:\n" -#: plugins/sudoers/ldap.c:2570 +#: plugins/sudoers/ldap.c:2993 #, c-format msgid "unable to initialize LDAP: %s" msgstr "kan ikke initialisere LDAP: %s" -#: plugins/sudoers/ldap.c:2612 +#: plugins/sudoers/ldap.c:3029 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "start_tls angivet men LDAP libs understøtter ikke ldap_start_tls_s() eller ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:2845 +#: plugins/sudoers/ldap.c:3286 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "ugyldig sudoOrder-attribut: %s" -#: plugins/sudoers/linux_audit.c:63 +#: plugins/sudoers/linux_audit.c:52 msgid "unable to open audit system" msgstr "kan ikke åbne overvågningssystem" -#: plugins/sudoers/linux_audit.c:100 +#: plugins/sudoers/linux_audit.c:93 msgid "unable to send audit message" msgstr "kan ikke sende overvågningsbesked" -#: plugins/sudoers/logging.c:134 +#: plugins/sudoers/logging.c:106 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: plugins/sudoers/logging.c:162 +#: plugins/sudoers/logging.c:134 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s: (kommando fortsat) %s" -#: plugins/sudoers/logging.c:187 +#: plugins/sudoers/logging.c:159 #, c-format msgid "unable to open log file: %s: %s" msgstr "kan ikke åbne logfil: %s: %s" -#: plugins/sudoers/logging.c:190 +#: plugins/sudoers/logging.c:162 #, c-format msgid "unable to lock log file: %s: %s" msgstr "kan ikke låse logfil: %s: %s" -#: plugins/sudoers/logging.c:242 +#: plugins/sudoers/logging.c:211 msgid "No user or host" msgstr "Ingen bruger eller vært" -#: plugins/sudoers/logging.c:244 +#: plugins/sudoers/logging.c:213 msgid "validation failure" msgstr "valideringsfejl" -#: plugins/sudoers/logging.c:251 +#: plugins/sudoers/logging.c:220 msgid "user NOT in sudoers" msgstr "bruger IKKE i sudoers" -#: plugins/sudoers/logging.c:253 +#: plugins/sudoers/logging.c:222 msgid "user NOT authorized on host" msgstr "bruger IKKE autoriseret på vært" -#: plugins/sudoers/logging.c:255 +#: plugins/sudoers/logging.c:224 msgid "command not allowed" msgstr "kommando ikke tilladt" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:259 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "%s er ikke sudoersfilen. Denne handling vil blive rapporteret.\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:262 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "%s har ikke tilladelse til at køre sudo på %s. Denne handling vil blive rapporteret.\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:266 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Beklager. Bruger %s må ikke køre sudo på %s.\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:269 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "Beklager. Bruger %s har ikke tilladelse til at køre »%s%s%s« som %s%s%s på %s.\n" -#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:407 -#: plugins/sudoers/sudoers.c:409 plugins/sudoers/sudoers.c:411 -#: plugins/sudoers/sudoers.c:413 plugins/sudoers/sudoers.c:1091 -#: plugins/sudoers/sudoers.c:1092 +#: plugins/sudoers/logging.c:306 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1222 +#: plugins/sudoers/sudoers.c:1224 #, c-format msgid "%s: command not found" msgstr "%s: Kommando ikke fundet" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:403 +#: plugins/sudoers/logging.c:308 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring `%s' found in '.'\n" @@ -978,71 +1115,71 @@ "ignorerer »%s« fundet i ».«\n" "Brug »sudo ./%s« hvis dette er »%s«, du ønsker at køre." -#: plugins/sudoers/logging.c:353 +#: plugins/sudoers/logging.c:325 msgid "authentication failure" msgstr "godkendelsesfejl" -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:351 msgid "a password is required" msgstr "der kræves en adgangskode" -#: plugins/sudoers/logging.c:446 plugins/sudoers/logging.c:501 +#: plugins/sudoers/logging.c:422 plugins/sudoers/logging.c:484 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "%u ukorrekt adgangskodeforsøg" msgstr[1] "%u ukorrekte adgangskodeforsøg" -#: plugins/sudoers/logging.c:584 +#: plugins/sudoers/logging.c:572 msgid "unable to fork" msgstr "kan ikke forgrene" -#: plugins/sudoers/logging.c:592 plugins/sudoers/logging.c:648 +#: plugins/sudoers/logging.c:580 plugins/sudoers/logging.c:640 #, c-format msgid "unable to fork: %m" msgstr "kan ikke forgrene: %m" -#: plugins/sudoers/logging.c:638 +#: plugins/sudoers/logging.c:630 #, c-format msgid "unable to open pipe: %m" msgstr "kan ikke åbne datakanal: %m" -#: plugins/sudoers/logging.c:663 +#: plugins/sudoers/logging.c:655 #, c-format msgid "unable to dup stdin: %m" msgstr "kan ikke dup stdin: %m" -#: plugins/sudoers/logging.c:698 +#: plugins/sudoers/logging.c:693 #, c-format msgid "unable to execute %s: %m" msgstr "kan ikke køre %s: %m" -#: plugins/sudoers/match.c:627 +#: plugins/sudoers/match.c:606 #, c-format msgid "unsupported digest type %d for %s" msgstr "ej understøttet sammendragstype %d for %s" -#: plugins/sudoers/match.c:656 +#: plugins/sudoers/match.c:639 #, c-format msgid "%s: read error" msgstr "%s: læsefejl" -#: plugins/sudoers/match.c:670 +#: plugins/sudoers/match.c:653 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "sammendrag for %s (%s) er ikke i %s-form" -#: plugins/sudoers/parse.c:123 +#: plugins/sudoers/parse.c:114 #, c-format msgid "parse error in %s near line %d" msgstr "fortolkningsfejl i %s nær linje %d" -#: plugins/sudoers/parse.c:126 +#: plugins/sudoers/parse.c:117 #, c-format msgid "parse error in %s" msgstr "fortolkningsfejl i %s" -#: plugins/sudoers/parse.c:459 +#: plugins/sudoers/parse.c:502 #, c-format msgid "" "\n" @@ -1051,49 +1188,41 @@ "\n" "Sudoers-punkt:\n" -#: plugins/sudoers/parse.c:460 +#: plugins/sudoers/parse.c:503 #, c-format msgid " RunAsUsers: " msgstr " KørSomBrugere: " -#: plugins/sudoers/parse.c:474 +#: plugins/sudoers/parse.c:517 #, c-format msgid " RunAsGroups: " msgstr " KørSomGrupper: " -#: plugins/sudoers/parse.c:483 +#: plugins/sudoers/parse.c:526 #, c-format msgid " Options: " msgstr " Tilvalg: " -#: plugins/sudoers/policy.c:111 plugins/sudoers/policy.c:120 -#: plugins/sudoers/policy.c:129 plugins/sudoers/policy.c:153 -#: plugins/sudoers/policy.c:270 plugins/sudoers/policy.c:294 -#: plugins/sudoers/policy.c:303 plugins/sudoers/policy.c:333 -#: plugins/sudoers/policy.c:343 plugins/sudoers/policy.c:352 -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" +#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:253 +msgid "unable to parse network address list" +msgstr "kan ikke fortolke netværksadresseliste" -#: plugins/sudoers/policy.c:575 plugins/sudoers/visudo.c:767 +#: plugins/sudoers/policy.c:640 plugins/sudoers/visudo.c:840 #, c-format msgid "unable to execute %s" msgstr "kan ikke udføre %s" -#: plugins/sudoers/policy.c:733 +#: plugins/sudoers/policy.c:773 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Udvidelsesmodulversion %s for sudoerspolitik\n" -#: plugins/sudoers/policy.c:735 +#: plugins/sudoers/policy.c:775 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Grammatikversion %d for sudoersfil\n" -#: plugins/sudoers/policy.c:739 +#: plugins/sudoers/policy.c:779 #, c-format msgid "" "\n" @@ -1102,374 +1231,414 @@ "\n" "Sudoers-sti: %s\n" -#: plugins/sudoers/policy.c:742 +#: plugins/sudoers/policy.c:782 #, c-format msgid "nsswitch path: %s\n" msgstr "nsswitch-sti: %s\n" -#: plugins/sudoers/policy.c:744 +#: plugins/sudoers/policy.c:784 #, c-format msgid "ldap.conf path: %s\n" msgstr "ldap.conf-sti: %s\n" -#: plugins/sudoers/policy.c:745 +#: plugins/sudoers/policy.c:785 #, c-format msgid "ldap.secret path: %s\n" msgstr "ldap.secret-sti: %s\n" -#: plugins/sudoers/pwutil.c:149 +# lidt i tvivl om hvad hook er her, så har beholdt den uoversat +# Er OK. Er enig med hensyn til hook, skal nok forstås som +# fastgøringspunkt, men lyder for bøvlet +#: plugins/sudoers/policy.c:818 +#, c-format +msgid "unable to register hook of type %d (version %d.%d)" +msgstr "kan ikke registrere »hook« af typen %d (version %d.%d)" + +#: plugins/sudoers/pwutil.c:136 plugins/sudoers/pwutil.c:153 +#, c-format +msgid "unable to cache uid %u, out of memory" +msgstr "kan ikke cache uid %u, ikke nok hukommelse" + +#: plugins/sudoers/pwutil.c:147 #, c-format msgid "unable to cache uid %u, already exists" msgstr "kan ikke cache uid %u, findes allerede" -#: plugins/sudoers/pwutil.c:194 +#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:207 +#: plugins/sudoers/pwutil.c:250 plugins/sudoers/pwutil.c:294 +#, c-format +msgid "unable to cache user %s, out of memory" +msgstr "kan ikke cache bruger %s, ikke nok hukommelse" + +#: plugins/sudoers/pwutil.c:202 #, c-format msgid "unable to cache user %s, already exists" msgstr "kan ikke cache bruger %s, findes allerede" -#: plugins/sudoers/pwutil.c:400 +#: plugins/sudoers/pwutil.c:427 plugins/sudoers/pwutil.c:444 +#, c-format +msgid "unable to cache gid %u, out of memory" +msgstr "kan ikke cache gid %u, ikke nok hukommelse" + +#: plugins/sudoers/pwutil.c:438 #, c-format msgid "unable to cache gid %u, already exists" msgstr "kan ikke cache gid %u, findes allerede" -#: plugins/sudoers/pwutil.c:439 +#: plugins/sudoers/pwutil.c:476 plugins/sudoers/pwutil.c:492 +#: plugins/sudoers/pwutil.c:524 plugins/sudoers/pwutil.c:565 +#, c-format +msgid "unable to cache group %s, out of memory" +msgstr "kan ikke cache gruppe %s, ikke nok hukommelse" + +#: plugins/sudoers/pwutil.c:487 #, c-format msgid "unable to cache group %s, already exists" msgstr "kan ikke cache gruppe %s, findes allerede" -#: plugins/sudoers/pwutil.c:605 plugins/sudoers/pwutil.c:631 +#: plugins/sudoers/pwutil.c:676 plugins/sudoers/pwutil.c:710 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "kan ikke cache gruppeliste for %s, findes allerede" -#: plugins/sudoers/pwutil.c:627 +#: plugins/sudoers/pwutil.c:682 plugins/sudoers/pwutil.c:715 +#, c-format +msgid "unable to cache group list for %s, out of memory" +msgstr "kan ikke cache gruppeliste for %s, ikke nok hukommelse" + +#: plugins/sudoers/pwutil.c:705 #, c-format msgid "unable to parse groups for %s" msgstr "kan ikke fortolke grupper for %s" -#: plugins/sudoers/set_perms.c:122 plugins/sudoers/set_perms.c:447 -#: plugins/sudoers/set_perms.c:850 plugins/sudoers/set_perms.c:1147 -#: plugins/sudoers/set_perms.c:1439 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 +#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 +#: plugins/sudoers/set_perms.c:1430 msgid "perm stack overflow" msgstr "permanent stakoverløb" -#: plugins/sudoers/set_perms.c:130 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:1076 -#: plugins/sudoers/set_perms.c:1155 plugins/sudoers/set_perms.c:1372 -#: plugins/sudoers/set_perms.c:1447 plugins/sudoers/set_perms.c:1536 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 +#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 +#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 +#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 +#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 msgid "perm stack underflow" msgstr "permanent stakunderløb" -#: plugins/sudoers/set_perms.c:189 plugins/sudoers/set_perms.c:502 -#: plugins/sudoers/set_perms.c:1206 plugins/sudoers/set_perms.c:1479 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:493 +#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 msgid "unable to change to root gid" msgstr "kan ikke ændre til root gid" -#: plugins/sudoers/set_perms.c:278 plugins/sudoers/set_perms.c:599 -#: plugins/sudoers/set_perms.c:987 plugins/sudoers/set_perms.c:1283 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:590 +#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 msgid "unable to change to runas gid" msgstr "kan ikke ændre til kør som gid" -#: plugins/sudoers/set_perms.c:283 plugins/sudoers/set_perms.c:604 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:595 +#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 msgid "unable to set runas group vector" msgstr "kan ikke angive kør som gruppevektor" -#: plugins/sudoers/set_perms.c:294 plugins/sudoers/set_perms.c:615 -#: plugins/sudoers/set_perms.c:1001 plugins/sudoers/set_perms.c:1297 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:606 +#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 msgid "unable to change to runas uid" msgstr "kan ikke ændre til kør som uid" -#: plugins/sudoers/set_perms.c:312 plugins/sudoers/set_perms.c:633 -#: plugins/sudoers/set_perms.c:1017 plugins/sudoers/set_perms.c:1313 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:624 +#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 msgid "unable to change to sudoers gid" msgstr "kan ikke ændre til sudoers gid" -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 msgid "too many processes" msgstr "for mange processer" -#: plugins/sudoers/solaris_audit.c:47 +#: plugins/sudoers/solaris_audit.c:51 msgid "unable to get current working directory" msgstr "kan ikke hente nuværende arbejdsmappe" -#: plugins/sudoers/solaris_audit.c:55 +#: plugins/sudoers/solaris_audit.c:59 #, c-format msgid "truncated audit path user_cmnd: %s" msgstr "afkortet revisionssti user_cmnd: %s" -#: plugins/sudoers/solaris_audit.c:62 +#: plugins/sudoers/solaris_audit.c:66 #, c-format msgid "truncated audit path argv[0]: %s" msgstr "afkortet revisionssti argv[0]: %s" -#: plugins/sudoers/solaris_audit.c:111 +#: plugins/sudoers/solaris_audit.c:115 msgid "audit_failure message too long" msgstr "audit_failure-besked er for lang" -#: plugins/sudoers/sssd.c:252 +#: plugins/sudoers/sssd.c:333 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "kan ikke initialisere SSS-kilde. Er SSSD installeret på din maskine?" -#: plugins/sudoers/sssd.c:259 plugins/sudoers/sssd.c:267 -#: plugins/sudoers/sssd.c:275 plugins/sudoers/sssd.c:283 -#: plugins/sudoers/sssd.c:291 +#: plugins/sudoers/sssd.c:341 plugins/sudoers/sssd.c:350 +#: plugins/sudoers/sssd.c:359 plugins/sudoers/sssd.c:368 +#: plugins/sudoers/sssd.c:377 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "kan ikke finde symbol »%s« i %s" -#: plugins/sudoers/sudo_nss.c:296 +#: plugins/sudoers/sudo_nss.c:290 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Matchende standardpunkter for %s på %s:\n" -#: plugins/sudoers/sudo_nss.c:309 +#: plugins/sudoers/sudo_nss.c:308 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Kør som og kommandospecifikke standarder for %s:\n" -#: plugins/sudoers/sudo_nss.c:322 +#: plugins/sudoers/sudo_nss.c:326 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "Bruger %s må køre de følgende kommandoer på %s:\n" -#: plugins/sudoers/sudo_nss.c:331 +#: plugins/sudoers/sudo_nss.c:339 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Bruger %s har ikke tilladelse til at køre sudo på %s.\n" -#: plugins/sudoers/sudoers.c:160 plugins/sudoers/sudoers.c:201 -#: plugins/sudoers/sudoers.c:726 +#: plugins/sudoers/sudoers.c:172 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/visudo.c:223 plugins/sudoers/visudo.c:566 +msgid "unable to initialize sudoers default values" +msgstr "kan ikke initialisere sudoers' standardværdier" + +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:239 +#: plugins/sudoers/sudoers.c:833 msgid "problem with defaults entries" msgstr "problem med standardpunkter" -#: plugins/sudoers/sudoers.c:167 +#: plugins/sudoers/sudoers.c:205 msgid "no valid sudoers sources found, quitting" msgstr "ingen gyldige sudoerskilder fundet, afslutter" -#: plugins/sudoers/sudoers.c:233 +#: plugins/sudoers/sudoers.c:275 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers angiver at administrator (root) ikke har tilladelse til sudo" -#: plugins/sudoers/sudoers.c:278 +#: plugins/sudoers/sudoers.c:332 msgid "you are not permitted to use the -C option" msgstr "du har ikke tilladelse til at bruge tilvalget -C" -#: plugins/sudoers/sudoers.c:336 +#: plugins/sudoers/sudoers.c:396 #, c-format msgid "timestamp owner (%s): No such user" msgstr "tidsstempelejer (%s): Ingen sådan bruger" -#: plugins/sudoers/sudoers.c:350 +#: plugins/sudoers/sudoers.c:410 msgid "no tty" msgstr "ingen tty" -#: plugins/sudoers/sudoers.c:351 +#: plugins/sudoers/sudoers.c:411 msgid "sorry, you must have a tty to run sudo" msgstr "beklager, du skal bruge en tty for at køre sudo" -#: plugins/sudoers/sudoers.c:402 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "kommando i aktuel mappe" -#: plugins/sudoers/sudoers.c:422 +#: plugins/sudoers/sudoers.c:486 msgid "sorry, you are not allowed to preserve the environment" msgstr "beklager men du har ikke tilladelse til at bevare miljøet" -#: plugins/sudoers/sudoers.c:674 +#: plugins/sudoers/sudoers.c:778 msgid "command too long" msgstr "kommando er for lang" -#: plugins/sudoers/sudoers.c:779 plugins/sudoers/visudo.c:327 -#: plugins/sudoers/visudo.c:593 +#: plugins/sudoers/sudoers.c:886 plugins/sudoers/visudo.c:426 +#: plugins/sudoers/visudo.c:666 #, c-format msgid "unable to stat %s" msgstr "kan ikke stat %s" -#: plugins/sudoers/sudoers.c:783 +#: plugins/sudoers/sudoers.c:890 #, c-format msgid "%s is not a regular file" msgstr "%s er ikke en regulær fil" -#: plugins/sudoers/sudoers.c:787 plugins/sudoers/timestamp.c:289 toke.l:945 +#: plugins/sudoers/sudoers.c:894 plugins/sudoers/timestamp.c:225 toke.l:947 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s er ejet af uid %u, bør være %u" -#: plugins/sudoers/sudoers.c:791 toke.l:952 +#: plugins/sudoers/sudoers.c:898 toke.l:954 #, c-format msgid "%s is world writable" msgstr "%s er skrivbar for alle" -#: plugins/sudoers/sudoers.c:795 toke.l:957 +#: plugins/sudoers/sudoers.c:902 toke.l:959 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s er eget af gid %u, bør være %u" -#: plugins/sudoers/sudoers.c:826 +#: plugins/sudoers/sudoers.c:933 #, c-format msgid "only root can use `-c %s'" msgstr "kun administrator (root) kan bruge »-c %s«" -#: plugins/sudoers/sudoers.c:845 +#: plugins/sudoers/sudoers.c:952 #, c-format msgid "unknown login class: %s" msgstr "ukendt logindklasse: %s" -#: plugins/sudoers/sudoers.c:882 +#: plugins/sudoers/sudoers.c:1031 plugins/sudoers/sudoers.c:1059 #, c-format msgid "unable to resolve host %s" msgstr "kan ikke slå vært %s op" -#: plugins/sudoers/sudoers.c:949 plugins/sudoers/testsudoers.c:387 +#: plugins/sudoers/sudoers.c:1126 plugins/sudoers/testsudoers.c:385 #, c-format msgid "unknown group: %s" msgstr "ukendt gruppe: %s" -#: plugins/sudoers/sudoreplay.c:276 +#: plugins/sudoers/sudoreplay.c:232 #, c-format msgid "invalid filter option: %s" msgstr "ugyldigt filtertilvalg: %s" -#: plugins/sudoers/sudoreplay.c:289 +#: plugins/sudoers/sudoreplay.c:245 #, c-format msgid "invalid max wait: %s" msgstr "ugyldig maks ventetid: %s" -#: plugins/sudoers/sudoreplay.c:295 +#: plugins/sudoers/sudoreplay.c:251 #, c-format msgid "invalid speed factor: %s" msgstr "ugyldig hastighedsfaktor: %s" -#: plugins/sudoers/sudoreplay.c:298 plugins/sudoers/visudo.c:184 +#: plugins/sudoers/sudoreplay.c:254 plugins/sudoers/visudo.c:180 #, c-format msgid "%s version %s\n" msgstr "%s version %s\n" -#: plugins/sudoers/sudoreplay.c:330 +#: plugins/sudoers/sudoreplay.c:286 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/timing: %s" -#: plugins/sudoers/sudoreplay.c:336 +#: plugins/sudoers/sudoreplay.c:292 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/timing: %s" -#: plugins/sudoers/sudoreplay.c:352 +#: plugins/sudoers/sudoreplay.c:308 #, c-format msgid "Replaying sudo session: %s\n" msgstr "Genafspiller sudosession: %s\n" -#: plugins/sudoers/sudoreplay.c:358 +#: plugins/sudoers/sudoreplay.c:314 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Advarsel: Din terminal er for lille til korrekt at afspille loggen.\n" -#: plugins/sudoers/sudoreplay.c:359 +#: plugins/sudoers/sudoreplay.c:315 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "Loggeometri er %d x %d, din terminals geometri er %d x %d." -#: plugins/sudoers/sudoreplay.c:414 +#: plugins/sudoers/sudoreplay.c:368 msgid "unable to set tty to raw mode" msgstr "kan ikke angive tty til rå (raw) tilstand" -#: plugins/sudoers/sudoreplay.c:445 +#: plugins/sudoers/sudoreplay.c:401 #, c-format msgid "invalid timing file line: %s" msgstr "ugyldig timingfillinje: %s" -#: plugins/sudoers/sudoreplay.c:651 plugins/sudoers/sudoreplay.c:676 +#: plugins/sudoers/sudoreplay.c:611 plugins/sudoers/sudoreplay.c:636 #, c-format msgid "ambiguous expression \"%s\"" msgstr "tvetydigt udtryk »%s«" -#: plugins/sudoers/sudoreplay.c:698 +#: plugins/sudoers/sudoreplay.c:658 msgid "unmatched ')' in expression" msgstr "manglende »)« i udtryk" -#: plugins/sudoers/sudoreplay.c:702 +#: plugins/sudoers/sudoreplay.c:662 #, c-format msgid "unknown search term \"%s\"" msgstr "ukendt søgeterm »%s«" -#: plugins/sudoers/sudoreplay.c:716 +#: plugins/sudoers/sudoreplay.c:677 #, c-format msgid "%s requires an argument" msgstr "%s kræver et argument" -#: plugins/sudoers/sudoreplay.c:720 plugins/sudoers/sudoreplay.c:1092 +#: plugins/sudoers/sudoreplay.c:680 plugins/sudoers/sudoreplay.c:1060 #, c-format msgid "invalid regular expression: %s" msgstr "ugyldigt regulært udtryk: %s" -#: plugins/sudoers/sudoreplay.c:726 +#: plugins/sudoers/sudoreplay.c:684 #, c-format msgid "could not parse date \"%s\"" msgstr "kunne ikke fortolke dato »%s«" -#: plugins/sudoers/sudoreplay.c:735 +#: plugins/sudoers/sudoreplay.c:693 msgid "unmatched '(' in expression" msgstr "mangler »(« i udtryk" -#: plugins/sudoers/sudoreplay.c:737 +#: plugins/sudoers/sudoreplay.c:695 msgid "illegal trailing \"or\"" msgstr "ugyldig kæde »or« (eller)" -#: plugins/sudoers/sudoreplay.c:739 +#: plugins/sudoers/sudoreplay.c:697 msgid "illegal trailing \"!\"" msgstr "ugyldig kæde »!«" -#: plugins/sudoers/sudoreplay.c:792 +#: plugins/sudoers/sudoreplay.c:746 #, c-format msgid "unknown search type %d" msgstr "ukendt søgeterm %d" -#: plugins/sudoers/sudoreplay.c:829 +#: plugins/sudoers/sudoreplay.c:784 #, c-format msgid "%s: invalid log file" msgstr "%s: Ugyldig logfil" -#: plugins/sudoers/sudoreplay.c:847 +#: plugins/sudoers/sudoreplay.c:802 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: Tidsstempelfelt mangler" -#: plugins/sudoers/sudoreplay.c:854 +#: plugins/sudoers/sudoreplay.c:809 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: Tidsstempel %s: %s" -#: plugins/sudoers/sudoreplay.c:861 +#: plugins/sudoers/sudoreplay.c:816 #, c-format msgid "%s: user field is missing" msgstr "%s: Brugerfelt mangler" -#: plugins/sudoers/sudoreplay.c:869 +#: plugins/sudoers/sudoreplay.c:825 #, c-format msgid "%s: runas user field is missing" msgstr "%s: runas-brugerfelt mangler" -#: plugins/sudoers/sudoreplay.c:877 +#: plugins/sudoers/sudoreplay.c:834 #, c-format msgid "%s: runas group field is missing" msgstr "%s: runas-gruppefelt mangler" -#: plugins/sudoers/sudoreplay.c:1232 +#: plugins/sudoers/sudoreplay.c:1197 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "brug: %s [-h] [-d mappe] [-m num] [-s num] ID\n" -#: plugins/sudoers/sudoreplay.c:1235 +#: plugins/sudoers/sudoreplay.c:1200 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "brug: %s [-h] [-d mappe] -l [søgeudtryk]\n" -#: plugins/sudoers/sudoreplay.c:1244 +#: plugins/sudoers/sudoreplay.c:1209 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1478,7 +1647,7 @@ "%s - genafspil sudosessionslogge\n" "\n" -#: plugins/sudoers/sudoreplay.c:1246 +#: plugins/sudoers/sudoreplay.c:1211 msgid "" "\n" "Options:\n" @@ -1500,11 +1669,11 @@ " -s, --speed=num øg eller sænk uddata\n" " -V, --version vis versionsinformation og afslut" -#: plugins/sudoers/testsudoers.c:326 +#: plugins/sudoers/testsudoers.c:324 msgid "\thost unmatched" msgstr "\thost matchede ikke" -#: plugins/sudoers/testsudoers.c:329 +#: plugins/sudoers/testsudoers.c:327 msgid "" "\n" "Command allowed" @@ -1512,7 +1681,7 @@ "\n" "Kommando tilladt" -#: plugins/sudoers/testsudoers.c:330 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command denied" @@ -1520,7 +1689,7 @@ "\n" "Kommando nægtet" -#: plugins/sudoers/testsudoers.c:330 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command unmatched" @@ -1528,114 +1697,129 @@ "\n" "Kommando ikke matchet" -#: plugins/sudoers/timestamp.c:197 -#, c-format -msgid "unable to truncate time stamp file to %lld bytes" -msgstr "kan ikke afkorte tidsstempelfil til %lld byte" - -#: plugins/sudoers/timestamp.c:297 +#: plugins/sudoers/timestamp.c:233 #, c-format msgid "%s is group writable" msgstr "%s er gruppe-skrivbar" -#: plugins/sudoers/timestamp.c:318 +#: plugins/sudoers/timestamp.c:309 #, c-format -msgid "timestamp path too long: %s/%s" -msgstr "tidsstempelsti er for lang: %s/%s" +msgid "unable to truncate time stamp file to %lld bytes" +msgstr "kan ikke afkorte tidsstempelfil til %lld byte" -#: plugins/sudoers/timestamp.c:498 +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:487 plugins/sudoers/visudo.c:493 +msgid "unable to read the clock" +msgstr "kan ikke læse uret" + +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "ignorerer tidsstempel fra fremtiden" -#: plugins/sudoers/timestamp.c:510 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "tidsstempel for langt ude i fremtiden: %20.20s" -#: plugins/sudoers/timestamp.c:613 plugins/sudoers/timestamp.c:634 +#: plugins/sudoers/timestamp.c:863 +#, c-format +msgid "unable to lock time stamp file %s" +msgstr "kan ikke låse tidsstempelfilen %s" + +#: plugins/sudoers/timestamp.c:906 plugins/sudoers/timestamp.c:926 #, c-format msgid "lecture status path too long: %s/%s" msgstr "undervisningsstatussti er for lang: %s/%s" -#: plugins/sudoers/visudo.c:186 +#: plugins/sudoers/visudo.c:182 #, c-format msgid "%s grammar version %d\n" msgstr "%s grammatikversion %d\n" -#: plugins/sudoers/visudo.c:257 plugins/sudoers/visudo.c:546 +#: plugins/sudoers/visudo.c:254 plugins/sudoers/visudo.c:618 #, c-format msgid "press return to edit %s: " msgstr "tryk retur for at redigere %s: " -#: plugins/sudoers/visudo.c:343 plugins/sudoers/visudo.c:349 +#: plugins/sudoers/visudo.c:319 +#, c-format +msgid "specified editor (%s) doesn't exist" +msgstr "angivet redigeringsprogram (%s) findes ikke" + +#: plugins/sudoers/visudo.c:337 +#, c-format +msgid "no editor found (editor path = %s)" +msgstr "intet redigeringsprogram fundet (sti for redigeringsprogram = %s)" + +#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:454 msgid "write error" msgstr "skrivefejl" -#: plugins/sudoers/visudo.c:433 +#: plugins/sudoers/visudo.c:500 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "kan ikke stat midlertidig fil (%s), %s unchanged" -#: plugins/sudoers/visudo.c:438 +#: plugins/sudoers/visudo.c:507 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "midlertidig fil med nullængde (%s), %s uændret" -#: plugins/sudoers/visudo.c:444 +#: plugins/sudoers/visudo.c:513 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "redigeringsprogram (%s) fejlede, %s uændret" -#: plugins/sudoers/visudo.c:466 +#: plugins/sudoers/visudo.c:535 #, c-format msgid "%s unchanged" msgstr "%s uændret" -#: plugins/sudoers/visudo.c:491 +#: plugins/sudoers/visudo.c:561 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "kan ikke genåbne midlertidig fil (%s), %s uændrede." -#: plugins/sudoers/visudo.c:501 +#: plugins/sudoers/visudo.c:572 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "kan ikke fortolke midlertidig fil (%s), ukendt fejl" -#: plugins/sudoers/visudo.c:537 +#: plugins/sudoers/visudo.c:609 #, c-format msgid "internal error, unable to find %s in list!" msgstr "intern fejl, kan ikke finde %s på listen!" -#: plugins/sudoers/visudo.c:595 plugins/sudoers/visudo.c:604 +#: plugins/sudoers/visudo.c:668 plugins/sudoers/visudo.c:677 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "kan ikke angive (uid, gid) af %s til (%u, %u)" -#: plugins/sudoers/visudo.c:599 plugins/sudoers/visudo.c:609 +#: plugins/sudoers/visudo.c:672 plugins/sudoers/visudo.c:682 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "kan ikke ændre tilstand på %s til 0%o" -#: plugins/sudoers/visudo.c:626 +#: plugins/sudoers/visudo.c:699 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s og %s er ikke på det samme filsystem, bruger mv til at omdøbe" -#: plugins/sudoers/visudo.c:640 +#: plugins/sudoers/visudo.c:713 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "kommando fejlede: »%s %s %s«, %s uændret" -#: plugins/sudoers/visudo.c:650 +#: plugins/sudoers/visudo.c:723 #, c-format msgid "error renaming %s, %s unchanged" msgstr "fejl under omdøbing af %s, %s uændret" -#: plugins/sudoers/visudo.c:712 +#: plugins/sudoers/visudo.c:785 msgid "What now? " msgstr "Hvad nu? " -#: plugins/sudoers/visudo.c:726 +#: plugins/sudoers/visudo.c:799 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1647,87 +1831,72 @@ " afslut(x) uden at gemme ændringer til sudoersfil\n" " afslut(Q) og gem ændringer til sudoersfil (FARLIGT!)\n" -#: plugins/sudoers/visudo.c:774 +#: plugins/sudoers/visudo.c:847 #, c-format msgid "unable to run %s" msgstr "kan ikke køre %s" -#: plugins/sudoers/visudo.c:800 +#: plugins/sudoers/visudo.c:877 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: forkert ejer (uid, gid) bør være (%u, %u)\n" -#: plugins/sudoers/visudo.c:807 +#: plugins/sudoers/visudo.c:884 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: ugyldige rettigheder, bør være tilstand 0%o\n" -#: plugins/sudoers/visudo.c:832 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:909 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "failed to parse %s file, unknown error" msgstr "kunne ikke fortolke %s-fil, ukendt fejl" -#: plugins/sudoers/visudo.c:848 plugins/sudoers/visudo_json.c:1054 +#: plugins/sudoers/visudo.c:925 plugins/sudoers/visudo_json.c:1041 #, c-format msgid "parse error in %s near line %d\n" msgstr "fortolkningsfejl i %s nær linje %d\n" -#: plugins/sudoers/visudo.c:851 plugins/sudoers/visudo_json.c:1057 +#: plugins/sudoers/visudo.c:928 plugins/sudoers/visudo_json.c:1044 #, c-format msgid "parse error in %s\n" msgstr "fortolkningsfejl i %s\n" -#: plugins/sudoers/visudo.c:859 plugins/sudoers/visudo.c:866 +#: plugins/sudoers/visudo.c:936 plugins/sudoers/visudo.c:943 #, c-format msgid "%s: parsed OK\n" msgstr "%s: fortolket o.k.\n" -#: plugins/sudoers/visudo.c:912 +#: plugins/sudoers/visudo.c:990 #, c-format msgid "%s busy, try again later" msgstr "%s travl, forsøg igen senere" -#: plugins/sudoers/visudo.c:956 -#, c-format -msgid "specified editor (%s) doesn't exist" -msgstr "angivet redigeringsprogram (%s) findes ikke" - -#: plugins/sudoers/visudo.c:979 -#, c-format -msgid "unable to stat editor (%s)" -msgstr "kan ikke stat redigeringsprogram (%s)" - -#: plugins/sudoers/visudo.c:1027 -#, c-format -msgid "no editor found (editor path = %s)" -msgstr "intet redigeringsprogram fundet (sti for redigeringsprogram = %s)" - -#: plugins/sudoers/visudo.c:1130 +#: plugins/sudoers/visudo.c:1086 #, c-format msgid "Error: cycle in %s `%s'" msgstr "Fejl: Cyklus i %s »%s«" -#: plugins/sudoers/visudo.c:1131 +#: plugins/sudoers/visudo.c:1087 #, c-format msgid "Warning: cycle in %s `%s'" msgstr "Advarsel: Cyklus i %s »%s«" -#: plugins/sudoers/visudo.c:1135 +#: plugins/sudoers/visudo.c:1091 #, c-format msgid "Error: %s `%s' referenced but not defined" msgstr "Fejl: %s »%s« refereret men ikke defineret" -#: plugins/sudoers/visudo.c:1136 +#: plugins/sudoers/visudo.c:1092 #, c-format msgid "Warning: %s `%s' referenced but not defined" msgstr "Advarsel: %s »%s« refereret men ikke defineret" -#: plugins/sudoers/visudo.c:1275 +#: plugins/sudoers/visudo.c:1235 #, c-format msgid "Warning: unused %s `%s'" msgstr "Advarsel: ubrugte %s »%s«" -#: plugins/sudoers/visudo.c:1335 +#: plugins/sudoers/visudo.c:1348 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -1736,7 +1905,7 @@ "%s - rediger sikkert sudoersfilen\n" "\n" -#: plugins/sudoers/visudo.c:1337 +#: plugins/sudoers/visudo.c:1350 msgid "" "\n" "Options:\n" @@ -1758,11 +1927,11 @@ " -V, --version vis information om version og afslut\n" " -x, --export=uddatafil skriv sudoers i JSON-format til uddatafilen" -#: plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo_json.c:1018 #, c-format msgid "%s: input and output files must be different" msgstr "%s: inddata- og uddatafiler skal være forskellige" -#: toke.l:915 +#: toke.l:918 msgid "too many levels of includes" msgstr "for mange niveauer af includes (inkluderinger)" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/plugins/sudoers/po/de.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/plugins/sudoers/po/de.mo differ diff -Nru sudo-1.8.12/plugins/sudoers/po/de.po sudo-1.8.16/plugins/sudoers/po/de.po --- sudo-1.8.12/plugins/sudoers/po/de.po 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/po/de.po 2016-03-17 16:13:10.000000000 +0000 @@ -2,13 +2,14 @@ # This file is put in the public domain. # Todd C. Miller , 2011-2013 # Hendrik Knackstedt , 2013 -# Jochen Hein , 2001-2014. +# Jochen Hein , 2001-2016. +# Mario Blättermann , 2015. msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.12b3\n" -"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-11-20 13:33-0700\n" -"PO-Revision-Date: 2014-11-21 22:34+0100\n" +"Project-Id-Version: sudoers 1.8.16b1\n" +"Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" +"POT-Creation-Date: 2016-02-19 15:48-0700\n" +"PO-Revision-Date: 2016-02-27 07:14+0100\n" "Last-Translator: Jochen Hein \n" "Language-Team: German \n" "Language: German\n" @@ -19,7 +20,7 @@ #: confstr.sh:1 msgid "syntax error" -msgstr "Syntax Fehler" +msgstr "Syntax-Fehler" #: confstr.sh:2 msgid "%p's password: " @@ -37,213 +38,334 @@ msgid "*** SECURITY information for %h ***" msgstr "*** Sicherheits-Information für %h ***" -# XXX #: confstr.sh:6 msgid "Sorry, try again." msgstr "Das hat nicht funktioniert, bitte nochmal probieren." -#: gram.y:379 +#: gram.y:183 gram.y:201 gram.y:207 gram.y:213 gram.y:219 gram.y:225 +#: gram.y:241 gram.y:248 gram.y:255 gram.y:262 gram.y:269 gram.y:285 +#: gram.y:308 gram.y:315 gram.y:322 gram.y:329 gram.y:336 gram.y:391 +#: gram.y:399 gram.y:409 gram.y:439 gram.y:446 gram.y:453 gram.y:460 +#: gram.y:572 gram.y:579 gram.y:588 gram.y:597 gram.y:614 gram.y:670 +#: gram.y:677 gram.y:684 gram.y:692 gram.y:784 gram.y:791 gram.y:798 +#: gram.y:805 gram.y:812 gram.y:838 gram.y:845 gram.y:852 gram.y:1136 +#: gram.y:1143 plugins/sudoers/alias.c:123 plugins/sudoers/alias.c:136 +#: plugins/sudoers/auth/bsdauth.c:141 plugins/sudoers/auth/kerb5.c:119 +#: plugins/sudoers/auth/kerb5.c:145 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/auth/sia.c:59 +#: plugins/sudoers/defaults.c:518 plugins/sudoers/defaults.c:722 +#: plugins/sudoers/defaults.c:882 plugins/sudoers/editor.c:64 +#: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:92 +#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/iolog.c:586 +#: plugins/sudoers/iolog.c:618 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:446 plugins/sudoers/ldap.c:477 +#: plugins/sudoers/ldap.c:529 plugins/sudoers/ldap.c:562 +#: plugins/sudoers/ldap.c:917 plugins/sudoers/ldap.c:1064 +#: plugins/sudoers/ldap.c:1384 plugins/sudoers/ldap.c:1542 +#: plugins/sudoers/ldap.c:1620 plugins/sudoers/ldap.c:1756 +#: plugins/sudoers/ldap.c:1780 plugins/sudoers/ldap.c:1810 +#: plugins/sudoers/ldap.c:1863 plugins/sudoers/ldap.c:1878 +#: plugins/sudoers/ldap.c:1974 plugins/sudoers/ldap.c:2007 +#: plugins/sudoers/ldap.c:2160 plugins/sudoers/ldap.c:2257 +#: plugins/sudoers/ldap.c:3063 plugins/sudoers/ldap.c:3096 +#: plugins/sudoers/ldap.c:3407 plugins/sudoers/ldap.c:3435 +#: plugins/sudoers/ldap.c:3451 plugins/sudoers/ldap.c:3540 +#: plugins/sudoers/ldap.c:3556 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:666 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:508 +#: plugins/sudoers/match.c:544 plugins/sudoers/match.c:742 +#: plugins/sudoers/match.c:799 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:393 +#: plugins/sudoers/policy.c:602 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/sssd.c:160 plugins/sudoers/sssd.c:192 +#: plugins/sudoers/sssd.c:235 plugins/sudoers/sssd.c:242 +#: plugins/sudoers/sssd.c:278 plugins/sudoers/sssd.c:323 +#: plugins/sudoers/sssd.c:920 plugins/sudoers/sssd.c:1053 +#: plugins/sudoers/sudoers.c:159 plugins/sudoers/sudoers.c:294 +#: plugins/sudoers/sudoers.c:304 plugins/sudoers/sudoers.c:312 +#: plugins/sudoers/sudoers.c:365 plugins/sudoers/sudoers.c:663 +#: plugins/sudoers/sudoers.c:749 plugins/sudoers/sudoers.c:793 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:472 +#: plugins/sudoers/sudoreplay.c:668 plugins/sudoers/sudoreplay.c:780 +#: plugins/sudoers/sudoreplay.c:820 plugins/sudoers/sudoreplay.c:829 +#: plugins/sudoers/sudoreplay.c:839 plugins/sudoers/sudoreplay.c:847 +#: plugins/sudoers/sudoreplay.c:851 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1011 plugins/sudoers/testsudoers.c:130 +#: plugins/sudoers/testsudoers.c:188 plugins/sudoers/testsudoers.c:215 +#: plugins/sudoers/testsudoers.c:232 plugins/sudoers/timestamp.c:390 +#: plugins/sudoers/timestamp.c:426 plugins/sudoers/timestamp.c:838 +#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 +#: plugins/sudoers/toke_util.c:147 plugins/sudoers/visudo.c:152 +#: plugins/sudoers/visudo.c:213 plugins/sudoers/visudo.c:298 +#: plugins/sudoers/visudo.c:304 plugins/sudoers/visudo.c:434 +#: plugins/sudoers/visudo.c:980 plugins/sudoers/visudo.c:1024 +#: plugins/sudoers/visudo.c:1120 toke.l:785 toke.l:806 toke.l:816 toke.l:924 +#: toke.l:1082 +msgid "unable to allocate memory" +msgstr "Es kann kein Speicher mehr alloziert werden" + +#: gram.y:471 msgid "a digest requires a path name" -msgstr "Ein Digest erfordert ein Pfadname" +msgstr "Eine Prüfsumme erfordert einen Pfadnamen" + +#: gram.y:1136 gram.y:1143 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/defaults.c:518 +#: plugins/sudoers/defaults.c:722 plugins/sudoers/defaults.c:882 +#: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 +#: plugins/sudoers/editor.c:92 plugins/sudoers/env.c:234 +#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 +#: plugins/sudoers/iolog.c:586 plugins/sudoers/iolog.c:618 +#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:446 +#: plugins/sudoers/ldap.c:477 plugins/sudoers/ldap.c:529 +#: plugins/sudoers/ldap.c:562 plugins/sudoers/ldap.c:917 +#: plugins/sudoers/ldap.c:1064 plugins/sudoers/ldap.c:1384 +#: plugins/sudoers/ldap.c:1542 plugins/sudoers/ldap.c:1620 +#: plugins/sudoers/ldap.c:1756 plugins/sudoers/ldap.c:1780 +#: plugins/sudoers/ldap.c:1810 plugins/sudoers/ldap.c:1863 +#: plugins/sudoers/ldap.c:1878 plugins/sudoers/ldap.c:1974 +#: plugins/sudoers/ldap.c:2007 plugins/sudoers/ldap.c:2160 +#: plugins/sudoers/ldap.c:2257 plugins/sudoers/ldap.c:3063 +#: plugins/sudoers/ldap.c:3096 plugins/sudoers/ldap.c:3407 +#: plugins/sudoers/ldap.c:3434 plugins/sudoers/ldap.c:3450 +#: plugins/sudoers/ldap.c:3540 plugins/sudoers/ldap.c:3556 +#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:508 +#: plugins/sudoers/match.c:544 plugins/sudoers/match.c:742 +#: plugins/sudoers/match.c:799 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:97 +#: plugins/sudoers/policy.c:106 plugins/sudoers/policy.c:115 +#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:250 +#: plugins/sudoers/policy.c:277 plugins/sudoers/policy.c:286 +#: plugins/sudoers/policy.c:325 plugins/sudoers/policy.c:335 +#: plugins/sudoers/policy.c:344 plugins/sudoers/policy.c:393 +#: plugins/sudoers/policy.c:602 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:160 +#: plugins/sudoers/sssd.c:192 plugins/sudoers/sssd.c:235 +#: plugins/sudoers/sssd.c:242 plugins/sudoers/sssd.c:278 +#: plugins/sudoers/sssd.c:323 plugins/sudoers/sssd.c:920 +#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sudoers.c:159 +#: plugins/sudoers/sudoers.c:294 plugins/sudoers/sudoers.c:304 +#: plugins/sudoers/sudoers.c:312 plugins/sudoers/sudoers.c:365 +#: plugins/sudoers/sudoers.c:663 plugins/sudoers/sudoers.c:749 +#: plugins/sudoers/sudoers.c:793 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sudoreplay.c:472 plugins/sudoers/sudoreplay.c:668 +#: plugins/sudoers/sudoreplay.c:780 plugins/sudoers/sudoreplay.c:820 +#: plugins/sudoers/sudoreplay.c:829 plugins/sudoers/sudoreplay.c:839 +#: plugins/sudoers/sudoreplay.c:847 plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:1007 plugins/sudoers/sudoreplay.c:1011 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:188 +#: plugins/sudoers/testsudoers.c:215 plugins/sudoers/testsudoers.c:232 +#: plugins/sudoers/timestamp.c:390 plugins/sudoers/timestamp.c:426 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:147 +#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:213 +#: plugins/sudoers/visudo.c:298 plugins/sudoers/visudo.c:304 +#: plugins/sudoers/visudo.c:434 plugins/sudoers/visudo.c:980 +#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1120 toke.l:785 +#: toke.l:806 toke.l:816 toke.l:924 toke.l:1082 +#, c-format +msgid "%s: %s" +msgstr "%s: %s" -#: plugins/sudoers/alias.c:136 +#: plugins/sudoers/alias.c:132 #, c-format msgid "Alias `%s' already defined" msgstr "Alias »%s« ist bereits definiert" -#: plugins/sudoers/auth/bsdauth.c:75 +#: plugins/sudoers/auth/bsdauth.c:68 #, c-format msgid "unable to get login class for user %s" -msgstr "Kann die Login-Klasse des Benutzers »%s« nicht lesen" +msgstr "Die Anmeldeklasse des Benutzers »%s« kann nicht gelesen werden" -#: plugins/sudoers/auth/bsdauth.c:80 +#: plugins/sudoers/auth/bsdauth.c:73 msgid "unable to begin bsd authentication" -msgstr "Kann die BSD-Authentisierung nicht beginnen" +msgstr "Die BSD-Authentifizierung kann nicht begonnen werden" -#: plugins/sudoers/auth/bsdauth.c:88 +#: plugins/sudoers/auth/bsdauth.c:81 msgid "invalid authentication type" -msgstr "ungültiger Authentisierungstyp" +msgstr "Ungültiger Authentifizierungstyp" -#: plugins/sudoers/auth/bsdauth.c:97 +#: plugins/sudoers/auth/bsdauth.c:90 msgid "unable to initialize BSD authentication" -msgstr "Kann die BSD-Authentisierung nicht beginnen" +msgstr "Die BSD-Authentifizierung kann nicht begonnen werden" -#: plugins/sudoers/auth/fwtk.c:59 +#: plugins/sudoers/auth/fwtk.c:52 msgid "unable to read fwtk config" -msgstr "Kann die fwtk-Konfiguration nicht lesen" +msgstr "Die fwtk-Konfiguration kann nicht gelesen werden" -#: plugins/sudoers/auth/fwtk.c:64 +#: plugins/sudoers/auth/fwtk.c:57 msgid "unable to connect to authentication server" -msgstr "Kann nicht zum Authentisierungsserver verbinden" +msgstr "Verbindung zum Authentifizierungsserver kann nicht aufgebaut werden" -#: plugins/sudoers/auth/fwtk.c:70 plugins/sudoers/auth/fwtk.c:94 -#: plugins/sudoers/auth/fwtk.c:127 +#: plugins/sudoers/auth/fwtk.c:63 plugins/sudoers/auth/fwtk.c:87 +#: plugins/sudoers/auth/fwtk.c:121 msgid "lost connection to authentication server" msgstr "Verbindung zum Authentisierungsserver verloren" -#: plugins/sudoers/auth/fwtk.c:74 +#: plugins/sudoers/auth/fwtk.c:67 #, c-format msgid "" "authentication server error:\n" "%s" msgstr "" -"Fehler des Authentisierungsservers:\n" +"Fehler des Authentifizierungsservers:\n" "%s" -#: plugins/sudoers/auth/kerb5.c:116 +#: plugins/sudoers/auth/kerb5.c:111 #, c-format msgid "%s: unable to convert principal to string ('%s'): %s" -msgstr "%s: kann den Principal nicht in eine Zeichenkette konvertieren (»%s«): %s" +msgstr "%s: Principal kann nicht in eine Zeichenkette umgewandelt werden (»%s«): %s" -#: plugins/sudoers/auth/kerb5.c:158 +#: plugins/sudoers/auth/kerb5.c:161 #, c-format msgid "%s: unable to parse '%s': %s" -msgstr "%s: kann »%s« nicht parsen: %s" +msgstr "%s: »%s« kann nicht ausgewertet werden: %s" # XXX check source? -#: plugins/sudoers/auth/kerb5.c:167 +#: plugins/sudoers/auth/kerb5.c:170 #, c-format msgid "%s: unable to resolve credential cache: %s" -msgstr "%s: kann den Credential-Cache nicht auflösen: %s" +msgstr "%s: Anmeldedaten-Zwischenspeicher kann nicht aufgelöst werden: %s" -#: plugins/sudoers/auth/kerb5.c:214 +#: plugins/sudoers/auth/kerb5.c:217 #, c-format msgid "%s: unable to allocate options: %s" -msgstr "%s: kann die Optionen nicht allozieren: %s" +msgstr "%s: Optionen können nicht zugewiesen werden: %s" -#: plugins/sudoers/auth/kerb5.c:229 +#: plugins/sudoers/auth/kerb5.c:232 #, c-format msgid "%s: unable to get credentials: %s" -msgstr "%s: kann die Credentials nicht bekommen: %s" +msgstr "%s: Anmeldedaten können nicht bekommen werden: %s" -#: plugins/sudoers/auth/kerb5.c:242 +#: plugins/sudoers/auth/kerb5.c:245 #, c-format msgid "%s: unable to initialize credential cache: %s" -msgstr "%s: kann den Credential-Cache nicht initialisieren: %s" +msgstr "%s: Anmeldedaten-Zwischenspeicher kann nicht initialisiert werden: %s" -#: plugins/sudoers/auth/kerb5.c:245 +#: plugins/sudoers/auth/kerb5.c:248 #, c-format msgid "%s: unable to store credential in cache: %s" -msgstr "%s: kann die Credentials nicht im Credential-Cache speichern: %s" +msgstr "%s: Anmeldedaten können nicht im Zwischenspeicher abgelegt werden: %s" -#: plugins/sudoers/auth/kerb5.c:309 +#: plugins/sudoers/auth/kerb5.c:312 #, c-format msgid "%s: unable to get host principal: %s" -msgstr "%s: kann das Rechner-Principal nicht bekommen: %s" +msgstr "%s: Rechner-Principal kann nicht bekommen werden: %s" -#: plugins/sudoers/auth/kerb5.c:323 +#: plugins/sudoers/auth/kerb5.c:326 #, c-format msgid "%s: Cannot verify TGT! Possible attack!: %s" -msgstr "%s: kann das TGT nicht verifizieren! Möglicher Angriff!: %s" +msgstr "%s: TGT kann nicht verifiziert werden! Möglicher Angriff!: %s" -#: plugins/sudoers/auth/pam.c:98 +#: plugins/sudoers/auth/pam.c:92 msgid "unable to initialize PAM" -msgstr "Kann PAM nicht initialisieren" +msgstr "PAM kann nicht initialisiert werden" -# XXX wie account übersetzen? -#: plugins/sudoers/auth/pam.c:149 +#: plugins/sudoers/auth/pam.c:164 msgid "account validation failure, is your account locked?" -msgstr "Fehler bei der Validierung des Zugangs, ist der Zugang gesperrt?" +msgstr "Fehler bei der Validierung des Kontos, ist das Konto gesperrt?" -#: plugins/sudoers/auth/pam.c:153 +#: plugins/sudoers/auth/pam.c:168 msgid "Account or password is expired, reset your password and try again" -msgstr "Zugang oder Password ist abgelaufen, bitte Passwort zurücksetzen und nochmal probieren" +msgstr "Konto oder Passwort ist abgelaufen, bitte Passwort zurücksetzen und nochmal probieren" -#: plugins/sudoers/auth/pam.c:161 +#: plugins/sudoers/auth/pam.c:176 #, c-format msgid "unable to change expired password: %s" -msgstr "kann das abgelaufene Passwort nicht ändern: %s«" +msgstr "Das abgelaufene Passwort kann nicht geändert werden: %s«" -#: plugins/sudoers/auth/pam.c:166 +#: plugins/sudoers/auth/pam.c:181 msgid "Password expired, contact your system administrator" -msgstr "Dass Passwort ist abgelaufen, bitte wenden Sie sich an den Systemadministrator" +msgstr "Das Passwort ist abgelaufen, bitte wenden Sie sich an den Systemadministrator" -#: plugins/sudoers/auth/pam.c:170 +#: plugins/sudoers/auth/pam.c:185 msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator" -msgstr "Der Zugang ist abgelaufen oder in der PAM-Konfiguration fehlt der »account«-Abschnitt für sudo. Bitte wenden Sie sich an den Systemadministrator" +msgstr "Das Konto ist abgelaufen oder in der PAM-Konfiguration fehlt der »account«-Abschnitt für sudo. Bitte wenden Sie sich an den Systemadministrator" -#: plugins/sudoers/auth/pam.c:187 +#: plugins/sudoers/auth/pam.c:199 #, c-format msgid "PAM authentication error: %s" -msgstr "Fehler bei der PAM-Authentisierung: %s" +msgstr "Fehler bei der PAM-Authentifizierung: %s" -# XXX Karl fragen -#: plugins/sudoers/auth/rfc1938.c:103 plugins/sudoers/visudo.c:228 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:218 #, c-format msgid "you do not exist in the %s database" -msgstr "Der Benutzer existiert nicht in der %s Datenbank" +msgstr "Der Benutzer existiert in der %s-Datenbank nicht" -#: plugins/sudoers/auth/securid5.c:80 +#: plugins/sudoers/auth/securid5.c:73 msgid "failed to initialise the ACE API library" -msgstr "Die ACE API Bibliothen konnte nicht initialisiert werden" +msgstr "Die ACE-API-Bibliothek konnte nicht initialisiert werden" -#: plugins/sudoers/auth/securid5.c:106 +#: plugins/sudoers/auth/securid5.c:99 msgid "unable to contact the SecurID server" -msgstr "Kann den SecurID-Server nicht erreichen" +msgstr "SecurID-Server kann nicht erreicht werden" -#: plugins/sudoers/auth/securid5.c:115 +#: plugins/sudoers/auth/securid5.c:108 msgid "User ID locked for SecurID Authentication" -msgstr "Benutzer-ID ist für SecurID-Authentisierung gesperrt" +msgstr "Benutzer-ID ist für SecurID-Authentifizierung gesperrt" -#: plugins/sudoers/auth/securid5.c:119 plugins/sudoers/auth/securid5.c:170 +#: plugins/sudoers/auth/securid5.c:112 plugins/sudoers/auth/securid5.c:163 msgid "invalid username length for SecurID" -msgstr "ungültige Länge des Benutzernamens für SecurID" +msgstr "Ungültige Länge des Benutzernamens für SecurID" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:175 +#: plugins/sudoers/auth/securid5.c:116 plugins/sudoers/auth/securid5.c:168 msgid "invalid Authentication Handle for SecurID" -msgstr "ungültiges Authentication Handle für SecurID" +msgstr "Ungültiges Authentifizierungs-Handle für SecurID" -#: plugins/sudoers/auth/securid5.c:127 +#: plugins/sudoers/auth/securid5.c:120 msgid "SecurID communication failed" -msgstr "SecurID Kommunikation fehlgeschlagen" +msgstr "SecurID-Kommunikation fehlgeschlagen" -#: plugins/sudoers/auth/securid5.c:131 plugins/sudoers/auth/securid5.c:214 +#: plugins/sudoers/auth/securid5.c:124 plugins/sudoers/auth/securid5.c:211 msgid "unknown SecurID error" -msgstr "unbekannter SecurID Fehler" +msgstr "Unbekannter SecurID-Fehler" -#: plugins/sudoers/auth/securid5.c:165 +#: plugins/sudoers/auth/securid5.c:158 msgid "invalid passcode length for SecurID" -msgstr "ungültige Passcode Länge für SecurID" +msgstr "Ungültige Länge des Passcodes für SecurID" -#: plugins/sudoers/auth/sia.c:123 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:125 msgid "unable to initialize SIA session" -msgstr "kann die SIA Sitzung nicht initialisieren" +msgstr "Die SIA-Sitzung kann nicht initialisiert werden" -#: plugins/sudoers/auth/sudo_auth.c:115 +#: plugins/sudoers/auth/sudo_auth.c:126 msgid "invalid authentication methods" -msgstr "ungültige Authentisierungsmethoden" +msgstr "Ungültige Authentifizierungsmethoden" -#: plugins/sudoers/auth/sudo_auth.c:117 +#: plugins/sudoers/auth/sudo_auth.c:128 msgid "Invalid authentication methods compiled into sudo! You may not mix standalone and non-standalone authentication." -msgstr "Ungültige Authentifizierungsmethoden sind in sudo einkompiliert! Standalone und nicht-standalone Authentifizierung können nicht zusammen verwendet werden." +msgstr "Ungültige Authentifizierungsmethoden sind in sudo einkompiliert! Standalone- und Nicht-Standalone-Authentifizierung können nicht zusammen verwendet werden." -#: plugins/sudoers/auth/sudo_auth.c:203 plugins/sudoers/auth/sudo_auth.c:252 +#: plugins/sudoers/auth/sudo_auth.c:224 plugins/sudoers/auth/sudo_auth.c:274 msgid "no authentication methods" -msgstr "keine Authentisierungsmethoden" +msgstr "Keine Authentifizierungsmethoden" -#: plugins/sudoers/auth/sudo_auth.c:205 +#: plugins/sudoers/auth/sudo_auth.c:226 msgid "There are no authentication methods compiled into sudo! If you want to turn off authentication, use the --disable-authentication configure option." -msgstr "Es sind keine Authentifizierungsmethoden in sudo einkompiliert! Wenn Sie Authentifizierung wirklich abschalten wollen, verwenden Sie bitte die configure-Option »--disable-athentication«." +msgstr "Es sind keine Authentifizierungsmethoden in sudo einkompiliert! Wenn Sie die Authentifizierung wirklich abschalten wollen, verwenden Sie bitte die configure-Option »--disable-authentication«." -#: plugins/sudoers/auth/sudo_auth.c:254 +#: plugins/sudoers/auth/sudo_auth.c:276 msgid "Unable to initialize authentication methods." -msgstr "Kann die Authentisierungsmethoden nicht initialisieren." +msgstr "Die Authentifizierungsmethoden können nicht initialisiert werden." -#: plugins/sudoers/auth/sudo_auth.c:412 +#: plugins/sudoers/auth/sudo_auth.c:442 msgid "Authentication methods:" -msgstr "Authentisierungsmethoden:" +msgstr "Authentifizierungsmethoden:" -# XXX unklar -#: plugins/sudoers/bsm_audit.c:95 plugins/sudoers/bsm_audit.c:184 +#: plugins/sudoers/bsm_audit.c:111 plugins/sudoers/bsm_audit.c:200 msgid "Could not determine audit condition" -msgstr "Kann den Audit-Zustand nicht bestimmen" +msgstr "Der Audit-Zustand kann nicht bestimmt werden" -# XXX error at close -#: plugins/sudoers/bsm_audit.c:156 plugins/sudoers/bsm_audit.c:244 +#: plugins/sudoers/bsm_audit.c:172 plugins/sudoers/bsm_audit.c:260 msgid "unable to commit audit record" msgstr "Audit-Satz kann nicht auf Platte geschrieben werden" -#: plugins/sudoers/check.c:197 +#: plugins/sudoers/check.c:252 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -259,603 +381,611 @@ "Regeln erklärt hat. Normalerweise läuft es auf drei Regeln hinaus:\n" "\n" " #1) Respektieren Sie die Privatsphäre anderer.\n" -" #2) Denken Sie nach bevor Sie tippen.\n" +" #2) Denken Sie nach, bevor Sie tippen.\n" " #3) Mit großer Macht kommt große Verantwortung.\n" "\n" -#: plugins/sudoers/check.c:240 plugins/sudoers/check.c:250 -#: plugins/sudoers/sudoers.c:599 plugins/sudoers/sudoers.c:628 +#: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 +#: plugins/sudoers/sudoers.c:699 plugins/sudoers/sudoers.c:728 #, c-format msgid "unknown uid: %u" -msgstr "unbekannte uid: %u" +msgstr "Unbekannte Benutzer-ID: %u" -#: plugins/sudoers/check.c:245 plugins/sudoers/policy.c:683 -#: plugins/sudoers/sudoers.c:955 plugins/sudoers/testsudoers.c:212 -#: plugins/sudoers/testsudoers.c:364 +#: plugins/sudoers/check.c:300 plugins/sudoers/policy.c:774 +#: plugins/sudoers/sudoers.c:1095 plugins/sudoers/testsudoers.c:206 +#: plugins/sudoers/testsudoers.c:361 #, c-format msgid "unknown user: %s" -msgstr "unbekannter Benutzer: %s" +msgstr "Unbekannter Benutzer: %s" #: plugins/sudoers/def_data.c:27 #, c-format msgid "Syslog facility if syslog is being used for logging: %s" -msgstr "Syslog Facility wenn syslog für Protokollierung verwendet wird: %s" +msgstr "Syslog Facility, wenn syslog für Protokollierung verwendet wird: %s" #: plugins/sudoers/def_data.c:31 #, c-format msgid "Syslog priority to use when user authenticates successfully: %s" -msgstr "Syslog Priorität wenn der Benutzer sich erfolgreich authentifiziert: %s" +msgstr "Syslog-Priorität, wenn sich der Benutzer erfolgreich authentifiziert: %s" #: plugins/sudoers/def_data.c:35 #, c-format msgid "Syslog priority to use when user authenticates unsuccessfully: %s" -msgstr "Syslog Priorität wenn der Benutzer sich nicht erfolgreich authentifiziert: %s" +msgstr "Syslog-Priorität, wenn sich der Benutzer nicht erfolgreich authentifiziert: %s" #: plugins/sudoers/def_data.c:39 msgid "Put OTP prompt on its own line" -msgstr "Schreibe den OTP (One-Time-Passwords) Prompt in eine eigene Zeile" +msgstr "Die OTP-Eingabeaufforderung (One-Time-Passwords) in eine eigene Zeile schreiben" #: plugins/sudoers/def_data.c:43 msgid "Ignore '.' in $PATH" -msgstr "Ignoriere ».« in $PATH" +msgstr "».« in $PATH ignorieren" #: plugins/sudoers/def_data.c:47 msgid "Always send mail when sudo is run" -msgstr "Sende immer eine Mail wenn sudo gestartet wird" +msgstr "Immer eine Mail senden, wenn sudo gestartet wird" #: plugins/sudoers/def_data.c:51 msgid "Send mail if user authentication fails" -msgstr "Sende eine Mail wenn die Authentifizierung des Benutzers fehlschlägt" +msgstr "Eine Mail senden, wenn die Authentifizierung des Benutzers fehlschlägt" #: plugins/sudoers/def_data.c:55 msgid "Send mail if the user is not in sudoers" -msgstr "Sende eine Mail wenn der Benutzer nicht in der sudoers Datei steht" +msgstr "Eine Mail senden, wenn der Benutzer nicht in der sudoers-Datei steht" #: plugins/sudoers/def_data.c:59 msgid "Send mail if the user is not in sudoers for this host" -msgstr "Sende eine Mail wenn der Benutzer nicht in der sudoers Datei für diesen Rechner steht" +msgstr "Eine Mail senden, wenn der Benutzer nicht in der sudoers-Datei für diesen Rechner steht" #: plugins/sudoers/def_data.c:63 msgid "Send mail if the user is not allowed to run a command" -msgstr "Sende eine Mail wenn der Benutzer nicht berechtigt ist ein Kommando auszuführen" +msgstr "Eine Mail senden, wenn der Benutzer nicht berechtigt ist, einen Befehl auszuführen" #: plugins/sudoers/def_data.c:67 -msgid "Use a separate timestamp for each user/tty combo" -msgstr "Verwende getrennte Zeitstempel für jede Benutzer/tty Kombination" +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:71 -msgid "Lecture user the first time they run sudo" -msgstr "Belehre den Benutzer beim ersten Aufruf von sudo" +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:75 +msgid "Lecture user the first time they run sudo" +msgstr "Den Benutzer beim ersten Aufruf von sudo belehren" + +#: plugins/sudoers/def_data.c:79 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Datei mit der sudo-Belehrung: %s" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:83 msgid "Require users to authenticate by default" -msgstr "Standardmäßig muss der Benutzer sich authentifizieren" +msgstr "Standardmäßig muss sich der Benutzer authentifizieren" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:87 msgid "Root may run sudo" msgstr "Root darf sudo verwenden" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:91 msgid "Log the hostname in the (non-syslog) log file" -msgstr "Protokolliere den Hostname in der (nicht-syslog) Log-Datei" +msgstr "Den Hostnamen in der (nicht-syslog-)Protokolldatei speichern" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:95 msgid "Log the year in the (non-syslog) log file" -msgstr "Protokolliere das Jahr in der (nicht-syslog) Log-Datei" +msgstr "Das Jahr in der (nicht-syslog-)Protokolldatei speichern" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:99 msgid "If sudo is invoked with no arguments, start a shell" -msgstr "Starte eine Shell, wenn sudo ohne Parameter aufgerufen wird" +msgstr "Eine Shell starten, wenn sudo ohne Parameter aufgerufen wird" -#: plugins/sudoers/def_data.c:99 +#: plugins/sudoers/def_data.c:103 msgid "Set $HOME to the target user when starting a shell with -s" -msgstr "Setze die Umgebungsvariable $HOME beim Starten einer Shell mit »-s«" +msgstr "Die Umgebungsvariable $HOME beim Starten einer Shell mit »-s« setzen" -#: plugins/sudoers/def_data.c:103 +#: plugins/sudoers/def_data.c:107 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:107 +#: plugins/sudoers/def_data.c:111 msgid "Allow some information gathering to give useful error messages" -msgstr "Erlaube Informationssammlung für nützliche Fehlermeldungen" +msgstr "Informationssammlung für nützliche Fehlermeldungen erlauben" -#: plugins/sudoers/def_data.c:111 +#: plugins/sudoers/def_data.c:115 msgid "Require fully-qualified hostnames in the sudoers file" -msgstr "Sind voll qualifizierte Hostnamen in der sudoers-Datei notwendig" +msgstr "Vollständige Hostnamen in der sudoers-Datei erfordern" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:119 msgid "Insult the user when they enter an incorrect password" msgstr "»Beschimpfung« bei Eingabe eines falschen Passwortes" -#: plugins/sudoers/def_data.c:119 +#: plugins/sudoers/def_data.c:123 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" +msgstr "Der Benutzer darf sudo nur aufrufen, wenn ein tty vorhanden ist" -#: plugins/sudoers/def_data.c:123 +#: plugins/sudoers/def_data.c:127 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo beachtet die Umgebungsvariable »EDITOR«" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:131 msgid "Prompt for root's password, not the users's" -msgstr "Frage nach dem root-Passwort, nicht dem Passwort des Benutzers" +msgstr "Nach dem root-Passwort fragen, nicht nach dem Passwort des Benutzers" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:135 msgid "Prompt for the runas_default user's password, not the users's" -msgstr "Frage nach dem Passwort des Benutzers »runas_default«, nicht dem Passwort des aufrufenden Benutzers" +msgstr "Nach dem Passwort des Benutzers »runas_default« fragen, nicht nach dem Passwort des aufrufenden Benutzers" -#: plugins/sudoers/def_data.c:135 +#: plugins/sudoers/def_data.c:139 msgid "Prompt for the target user's password, not the users's" -msgstr "Frage nach dem Passwort des Ziel-Benutzers, nicht dem Passwort des aufrufenden Benutzers" +msgstr "Nach dem Passwort des Ziel-Benutzers fragen, nicht nach dem Passwort des aufrufenden Benutzers" -#: plugins/sudoers/def_data.c:139 +#: plugins/sudoers/def_data.c:143 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:143 +#: plugins/sudoers/def_data.c:147 msgid "Set the LOGNAME and USER environment variables" -msgstr "Setze die Umgebungsvariablen »LOGNAME« und »USER«" +msgstr "Die Umgebungsvariablen »LOGNAME« und »USER« setzen" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:151 msgid "Only set the effective uid to the target user, not the real uid" -msgstr "Setze nur die effektive UID auf den Ziel-Benutzer, nicht die reale UID" +msgstr "Nur die effektive UID auf den Ziel-Benutzer setzen, nicht die reale UID" -# XXX Keep the group list of the logged in user? -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:155 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:155 +#: plugins/sudoers/def_data.c:159 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" -msgstr "Zeilenlänge des Logdatei für Zeilenumbruch (0 für keinen Zeilenumbruch): %u" +msgstr "Zeilenlänge der Protokolldatei für Zeilenumbruch (0 für keinen Zeilenumbruch): %u" -#: plugins/sudoers/def_data.c:159 +#: plugins/sudoers/def_data.c:163 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Zeitlimit für den Authentifizierungszeitstempel: %.1f Minuten" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:167 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Zeitlimit bei der Eingabe des Passwortes: %.1f Minuten" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:171 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Anzahl Versuche zur Eingabe des Passwortes: %u" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:175 #, 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:175 +#: plugins/sudoers/def_data.c:179 #, c-format msgid "Path to log file: %s" -msgstr "Pfad zur Log-Datei: %s" +msgstr "Pfad zur Protokolldatei: %s" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:183 #, c-format msgid "Path to mail program: %s" msgstr "Pfad zum Mail-Programm: %s" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:187 #, c-format msgid "Flags for mail program: %s" msgstr "Parameter für das Mail-Programm: %s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:191 #, c-format msgid "Address to send mail to: %s" msgstr "Mail-Adresse des Empfängers: %s" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:195 #, c-format msgid "Address to send mail from: %s" msgstr "Mail-Adresse des Absenders: %s" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:199 #, c-format msgid "Subject line for mail messages: %s" -msgstr "Subject:-Zeile für Mails: %s" +msgstr "Betreffzeile für Mails: %s" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:203 #, c-format msgid "Incorrect password message: %s" msgstr "Meldung bei Eingabe eines falschen Passwortes: %s" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:207 #, c-format msgid "Path to lecture status dir: %s" msgstr "Verzeichnis für den Belehrungsstatus: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:211 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Pfad zum Authentifizierungszeitstempel-Verzeichnis: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:215 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Besitzer des Authentifizierungszeitstempelverzeichnisses: %s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:219 #, 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:219 +#: plugins/sudoers/def_data.c:223 #, c-format msgid "Default password prompt: %s" -msgstr "Standard Passwort-Prompt: %s" +msgstr "Standard-Eingabeaufforderung für das Passwort: %s" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:227 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:227 +#: plugins/sudoers/def_data.c:231 #, 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:231 +#: plugins/sudoers/def_data.c:235 #, c-format msgid "Value to override user's $PATH with: %s" -msgstr "Wert, mit dem der $PATH des Benutzers überschrieben werden soll: %s" +msgstr "Wert, mit dem der Inhalt von $PATH des Benutzers überschrieben werden soll: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:239 #, c-format msgid "Path to the editor for use by visudo: %s" -msgstr "Pfad zum Editor, den visudo verwendenden soll: %s" +msgstr "Pfad zum Editor, den visudo verwenden soll: %s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:243 #, 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:243 +#: plugins/sudoers/def_data.c:247 #, 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:247 +#: plugins/sudoers/def_data.c:251 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:251 +#: plugins/sudoers/def_data.c:255 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Wenn das LDAP-Verzeichnis erreichbar ist, wird die lokale sudoers-Datei ignoriert?" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:259 #, c-format msgid "File descriptors >= %d will be closed before executing a command" -msgstr "Datei-Deskriptoren >= %d werden geschlossen, bevor ein Kommando ausgeführt wird" +msgstr "Datei-Deskriptoren >= %d werden geschlossen, bevor ein Befehl ausgeführt wird" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:263 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "Benutzer können den Wert für »closeform« mit der der Option -C überschreiben, wenn diese Option gesetzt ist." -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:267 msgid "Allow users to set arbitrary environment variables" -msgstr "Erlaube Benutzern beliebige Umgebungsvariablen zu setzen" +msgstr "Benutzern das Setzen beliebiger Umgebungsvariablen erlauben" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:271 msgid "Reset the environment to a default set of variables" -msgstr "Setze die Umgebung auf eine Standard-Menge an Variablen zurück" +msgstr "Die Umgebung auf einen Standardsatz an Variablen zurücksetzen" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to check for sanity:" -msgstr "Prüfe folgende Umgebungsvariablen:" +msgstr "Folgende Umgebungsvariablen prüfen:" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to remove:" -msgstr "Lösche folgende Umgebungsvariablen:" +msgstr "Folgende Umgebungsvariablen löschen:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:283 msgid "Environment variables to preserve:" -msgstr "Erhalte folgende Umgebungsvariablen:" +msgstr "Folgende Umgebungsvariablen bewahren:" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:287 #, 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:287 +#: plugins/sudoers/def_data.c:291 #, 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:291 +#: plugins/sudoers/def_data.c:295 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Pfad zur sudo-spezifischen »environment«-Datei: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:299 #, c-format msgid "Locale to use while parsing sudoers: %s" -msgstr "Beim Parsen der sudoers-Datei wird diese Locale verwendet: %s" +msgstr "Beim Auswerten der sudoers-Datei wird diese Locale verwendet: %s" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:303 msgid "Allow sudo to prompt for a password even if it would be visible" -msgstr "Erlaube sudo nach einem Passwort zu fragen, auch wenn das Passwort sichtbar wird" +msgstr "sudo erlauben, nach einem Passwort zu fragen, auch wenn das Passwort sichtbar wird" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:307 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:307 +#: plugins/sudoers/def_data.c:311 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:311 +#: plugins/sudoers/def_data.c:315 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:315 +#: plugins/sudoers/def_data.c:319 msgid "Log user's input for the command being run" msgstr "Benutzereingaben für den ausgeführten Befehl protokollieren" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:323 msgid "Log the output of the command being run" msgstr "Die Ausgabe des ausgeführten Befehls protokollieren" -# XXX use input/output logs -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:327 msgid "Compress I/O logs using zlib" -msgstr "Komprimiere Ein-/Ausgabe-Logs mittels lib" +msgstr "Ein-/Ausgabe-Protokolle mittels zlib protokollieren" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:331 msgid "Always run commands in a pseudo-tty" -msgstr "Starte Kommandos immer in einem Pseudo-TTY" +msgstr "Befehle immer in einem Pseudo-TTY ausführen" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:335 #, c-format msgid "Plugin for non-Unix group support: %s" -msgstr "Pluginh für nicht-Unix Gruppen-Unterstützung: %s" +msgstr "Plugin für Unterstützung von Nicht-Unix-Gruppen: %s" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:339 #, c-format msgid "Directory in which to store input/output logs: %s" -msgstr "Verzeichnis zur Speicherung der Ein-/Ausgabe-Logs: %s" +msgstr "Verzeichnis zur Speicherung der Ein-/Ausgabe-Protokolle: %s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:343 #, c-format msgid "File in which to store the input/output log: %s" -msgstr "Datei zur Speicherung der Ein-/Ausgabe-Logs: %s" +msgstr "Datei zur Speicherung der Ein-/Ausgabe-Protokolle: %s" -# XXX pty -> pseudo TTY? -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:347 msgid "Add an entry to the utmp/utmpx file when allocating a pty" -msgstr "Füge einen Eintrag in die utmp/utmpx-Datei ein, wenn ein Pseudo-TTY erzeugt wird" +msgstr "Einen Eintrag in die utmp/utmpx-Datei einfügen, wenn ein Pseudo-TTY erzeugt wird" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:351 msgid "Set the user in utmp to the runas user, not the invoking user" -msgstr "Verwende für den Eintrag in der utmp-Datei den runas-Benutzer, nicht den aufrufenden Benutzer" +msgstr "Für den Eintrag in der utmp-Datei den runas-Benutzer verwenden, nicht den aufrufenden Benutzer" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:355 msgid "Set of permitted privileges" msgstr "Menge der erlaubten Priviliegien" -# XXX ? -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:359 msgid "Set of limit privileges" msgstr "Menge der eingeschränkten Privilegien" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:363 msgid "Run commands on a pty in the background" -msgstr "Starte Kommandos mit einem Pseudo-TTY im Hintergrund" +msgstr "Befehle mit einem Pseudo-TTY im Hintergrund starten" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:367 msgid "PAM service name to use" -msgstr "Verwende den PAM Service-Name" +msgstr "Den PAM-Service-Namen verwenden" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:371 msgid "PAM service name to use for login shells" -msgstr "Verwende den PAM Service-Name für Login-Shells" +msgstr "Den PAM-Service-Namen für Anmelde-Shells verwenden" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:375 msgid "Attempt to establish PAM credentials for the target user" -msgstr "Versuche die PAM-Credentials für den Ziel-Benutzer zu bekommen" +msgstr "Versuchen, die PAM-Anmeldedaten für den Ziel-Benutzer zu bekommen" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:379 msgid "Create a new PAM session for the command to run in" -msgstr "Erzeuge eine neue PAM-Sitzung, um das Kommando auszuführen" +msgstr "Eine neue PAM-Sitzung erzeugen, um den Befehl auszuführen" -#: plugins/sudoers/def_data.c:379 +#: plugins/sudoers/def_data.c:383 #, c-format msgid "Maximum I/O log sequence number: %u" -msgstr "Maximale Ein-/Ausgabe-Log Sequenznummer: %u" +msgstr "Maximale Sequenznummer des Ein-/Ausgabe-Protokolls: %u" -# XXX vector? -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:387 msgid "Enable sudoers netgroup support" -msgstr "Support für netgroups in sudoers aktivieren" +msgstr "Unterstützung für netgroups in sudoers aktivieren" -#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:601 -#: plugins/sudoers/visudo_json.c:642 plugins/sudoers/visudo_json.c:677 +#: plugins/sudoers/def_data.c:391 +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:395 +msgid "Follow symbolic links when editing files with sudoedit" +msgstr "Folge symbolischen Links beim Editieren von Dateien mit sudoedit" + +#: plugins/sudoers/def_data.c:399 +msgid "Query the group plugin for unknown system groups" +msgstr "Frage das Group-Plugin nach unbekannten System-Gruppen" + +#: plugins/sudoers/def_data.c:403 +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/defaults.c:199 plugins/sudoers/defaults.c:610 +#: plugins/sudoers/visudo_json.c:633 plugins/sudoers/visudo_json.c:668 #, c-format msgid "unknown defaults entry `%s'" msgstr "unbekannter defaults-Eintrag »%s«" -#: plugins/sudoers/defaults.c:218 plugins/sudoers/defaults.c:228 -#: plugins/sudoers/defaults.c:248 plugins/sudoers/defaults.c:261 -#: plugins/sudoers/defaults.c:274 plugins/sudoers/defaults.c:287 -#: plugins/sudoers/defaults.c:300 plugins/sudoers/defaults.c:320 -#: plugins/sudoers/defaults.c:330 +#: plugins/sudoers/defaults.c:207 plugins/sudoers/defaults.c:217 +#: plugins/sudoers/defaults.c:241 plugins/sudoers/defaults.c:256 +#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 +#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 +#: plugins/sudoers/defaults.c:325 #, c-format msgid "value `%s' is invalid for option `%s'" msgstr "Der Wert »%s« ist für die Option »%s« ungültig" -#: plugins/sudoers/defaults.c:221 plugins/sudoers/defaults.c:231 -#: plugins/sudoers/defaults.c:239 plugins/sudoers/defaults.c:256 -#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 -#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 -#: plugins/sudoers/defaults.c:326 +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:220 +#: plugins/sudoers/defaults.c:228 plugins/sudoers/defaults.c:251 +#: plugins/sudoers/defaults.c:264 plugins/sudoers/defaults.c:277 +#: plugins/sudoers/defaults.c:290 plugins/sudoers/defaults.c:310 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "no value specified for `%s'" msgstr "Kein Wert für »%s« angegeben" -#: plugins/sudoers/defaults.c:244 +#: plugins/sudoers/defaults.c:233 #, c-format msgid "values for `%s' must start with a '/'" msgstr "Werte für »%s« müssen mit einem »/« beginnen" -#: plugins/sudoers/defaults.c:306 +#: plugins/sudoers/defaults.c:301 #, c-format msgid "option `%s' does not take a value" msgstr "Die Option »%s« wird ohne Wert verwendet" -#: plugins/sudoers/env.c:276 plugins/sudoers/env.c:283 -#: plugins/sudoers/env.c:386 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:918 plugins/sudoers/policy.c:461 -#: plugins/sudoers/policy.c:470 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:708 plugins/sudoers/testsudoers.c:242 -#: plugins/sudoers/toke_util.c:174 +#: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 +#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:450 +#: plugins/sudoers/ldap.c:540 plugins/sudoers/ldap.c:1166 +#: plugins/sudoers/ldap.c:1388 plugins/sudoers/ldap.c:1704 +#: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:929 +#: plugins/sudoers/policy.c:511 plugins/sudoers/policy.c:520 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:815 +#: plugins/sudoers/testsudoers.c:236 plugins/sudoers/toke_util.c:162 #, c-format msgid "internal error, %s overflow" -msgstr "interner Fehler, %s Überlauf" +msgstr "Interner Fehler, %s-Überlauf" -#: plugins/sudoers/env.c:359 +#: plugins/sudoers/env.c:377 msgid "sudo_putenv: corrupted envp, length mismatch" -msgstr "sudo_putenv: envp ist korrupt, die Längen passen nicht" +msgstr "sudo_putenv: envp ist beschädigt, die Längen passen nicht" -#: plugins/sudoers/env.c:1054 +#: plugins/sudoers/env.c:1083 +msgid "unable to rebuild the environment" +msgstr "Das Environment kann nicht neu erstellt werden" + +#: plugins/sudoers/env.c:1157 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" -msgstr "Tut mir leid, die folgenden Umgebungsvariablen dürfen nicht gesetzt werden: %s" +msgstr "Leider dürfen die folgenden Umgebungsvariablen nicht gesetzt werden: %s" -#: plugins/sudoers/group_plugin.c:94 +#: plugins/sudoers/group_plugin.c:86 #, c-format msgid "%s must be owned by uid %d" msgstr "%s muss der uid %d gehören" -#: plugins/sudoers/group_plugin.c:98 +#: plugins/sudoers/group_plugin.c:90 #, c-format msgid "%s must only be writable by owner" msgstr "%s darf nur für den Eigentümer der Datei schreibbar sein" -#: plugins/sudoers/group_plugin.c:105 plugins/sudoers/sssd.c:251 +#: plugins/sudoers/group_plugin.c:98 plugins/sudoers/sssd.c:331 #, c-format msgid "unable to load %s: %s" -msgstr "laden für %s fehlgeschlagen: %s" +msgstr "Laden von %s fehlgeschlagen: %s" -#: plugins/sudoers/group_plugin.c:110 +#: plugins/sudoers/group_plugin.c:104 #, c-format msgid "unable to find symbol \"group_plugin\" in %s" -msgstr "kann das Symbol \"group_plugin\" in %s nicht finden" +msgstr "Das Symbol »group_plugin« kann in %s nicht gefunden werden" -#: plugins/sudoers/group_plugin.c:115 +#: plugins/sudoers/group_plugin.c:109 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: Die Major-Version %d des Group-Plugins ist inkompatibel, erwartet wird %d" -#: plugins/sudoers/interfaces.c:116 +#: plugins/sudoers/interfaces.c:117 msgid "Local IP address and netmask pairs:\n" msgstr "Lokale IP-Adresse und Netzmaske:\n" -#: plugins/sudoers/iolog.c:101 plugins/sudoers/iolog.c:119 -#: plugins/sudoers/timestamp.c:233 +#: plugins/sudoers/iolog.c:92 plugins/sudoers/iolog.c:110 +#: plugins/sudoers/timestamp.c:169 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s existiert, aber ist kein Verzeichnis (0%o)" -#: plugins/sudoers/iolog.c:112 plugins/sudoers/iolog.c:133 -#: plugins/sudoers/iolog.c:140 plugins/sudoers/timestamp.c:227 -#: plugins/sudoers/timestamp.c:248 +#: plugins/sudoers/iolog.c:103 plugins/sudoers/iolog.c:124 +#: plugins/sudoers/iolog.c:131 plugins/sudoers/timestamp.c:163 +#: plugins/sudoers/timestamp.c:184 #, c-format msgid "unable to mkdir %s" -msgstr "kann das Verzeichnis »%s« nicht erstellen" +msgstr "Das Verzeichnis »%s« kann nicht erstellt werden" -#: plugins/sudoers/iolog.c:209 plugins/sudoers/sudoers.c:764 -#: plugins/sudoers/sudoreplay.c:348 plugins/sudoers/sudoreplay.c:819 -#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/timestamp.c:357 -#: plugins/sudoers/visudo.c:832 plugins/sudoers/visudo_json.c:1025 -#: plugins/sudoers/visudo_json.c:1038 +#: plugins/sudoers/iolog.c:200 plugins/sudoers/sudoers.c:871 +#: plugins/sudoers/sudoreplay.c:300 plugins/sudoers/sudoreplay.c:769 +#: plugins/sudoers/sudoreplay.c:973 plugins/sudoers/timestamp.c:399 +#: plugins/sudoers/visudo.c:904 plugins/sudoers/visudo_json.c:1012 +#: plugins/sudoers/visudo_json.c:1025 #, c-format msgid "unable to open %s" -msgstr "kann die Datei »%s« nicht öffnen" +msgstr "Die Datei »%s« kann nicht geöffnet werden" -#: plugins/sudoers/iolog.c:250 plugins/sudoers/sudoers.c:768 -#: plugins/sudoers/sudoreplay.c:1123 +#: plugins/sudoers/iolog.c:241 plugins/sudoers/sudoers.c:875 +#: plugins/sudoers/sudoreplay.c:1084 #, c-format msgid "unable to read %s" -msgstr "kann die Datei »%s« nicht lesen" +msgstr "Die Datei »%s« kann nicht gelesen werden" -#: plugins/sudoers/iolog.c:282 plugins/sudoers/sudoreplay.c:588 -#: plugins/sudoers/timestamp.c:186 plugins/sudoers/timestamp.c:189 +#: plugins/sudoers/iolog.c:277 plugins/sudoers/sudoreplay.c:550 +#: plugins/sudoers/timestamp.c:298 plugins/sudoers/timestamp.c:301 #, c-format msgid "unable to write to %s" -msgstr "kann die Datei »%s« nicht schreiben" +msgstr "In die Datei »%s« kann nicht geschrieben werden" -#: plugins/sudoers/iolog.c:347 plugins/sudoers/iolog.c:545 +#: plugins/sudoers/iolog.c:342 plugins/sudoers/iolog.c:540 #, c-format msgid "unable to create %s" -msgstr "kann die Datei »%s« nicht erstellen" +msgstr "Die Datei »%s« kann nicht erstellt werden" + +#: plugins/sudoers/iolog.c:723 +#, c-format +msgid "%s: internal error, file index %d not open" +msgstr "%s: Interner Fehler, Dateiindex %d nicht geöffnet!" -#: plugins/sudoers/ldap.c:406 +#: plugins/sudoers/ldap.c:428 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: Port ist zu groß" -# XXX ? -#: plugins/sudoers/ldap.c:431 -msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" -msgstr "sudo_ldap_conf_add_ports: kein Platz zum Erweitern von hostbuf" - -#: plugins/sudoers/ldap.c:464 +#: plugins/sudoers/ldap.c:488 #, c-format msgid "unsupported LDAP uri type: %s" -msgstr "LDAP uri Typ ist nicht unterstützt: %s" +msgstr "LDAP-Adresstyp wird nicht unterstützt: %s" -#: plugins/sudoers/ldap.c:495 +#: plugins/sudoers/ldap.c:515 msgid "unable to mix ldap and ldaps URIs" -msgstr "ldap und ldaps URIs können nicht zusammen verwendet werden" +msgstr "ldap- und ldaps-Adressen können nicht zusammen verwendet werden" -#: plugins/sudoers/ldap.c:499 plugins/sudoers/ldap.c:532 +#: plugins/sudoers/ldap.c:519 plugins/sudoers/ldap.c:555 msgid "starttls not supported when using ldaps" msgstr "starttls wird für ldaps nicht unterstützt" -#: plugins/sudoers/ldap.c:517 -msgid "sudo_ldap_parse_uri: out of space building hostbuf" -msgstr "sudo_ldap_parse_uri: kein Platz zum Erzeugen von hostbuf" - -#: plugins/sudoers/ldap.c:599 +#: plugins/sudoers/ldap.c:626 #, c-format msgid "unable to initialize SSL cert and key db: %s" -msgstr "kann die Zertifikat- und Schlüsseldatenbank für SSL nicht initialisieren: %s" +msgstr "Die Zertifikat- und Schlüsseldatenbank für SSL kann nicht initialisiert werden: %s" -#: plugins/sudoers/ldap.c:602 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "you must set TLS_CERT in %s to use SSL" -msgstr "In der Datei »%s« muss »TLS_CERT« angegeben sein um SSL zu nutzen" +msgstr "In der Datei »%s« muss »TLS_CERT« angegeben sein, um SSL zu nutzen" -#: plugins/sudoers/ldap.c:1093 +#: plugins/sudoers/ldap.c:1152 msgid "unable to get GMT time" -msgstr "kann die GMT-Zeit nicht bekommen" +msgstr "Die GMT-Zeit kann nicht bekommen werden" -#: plugins/sudoers/ldap.c:1099 +#: plugins/sudoers/ldap.c:1158 msgid "unable to format timestamp" -msgstr "kann den Zeitstempel nicht formatieren" +msgstr "Der Zeitstempel kann nicht formatiert werden" -# XXX ? -#: plugins/sudoers/ldap.c:1107 -msgid "unable to build time filter" -msgstr "Kann den Filter beim Kompilieren nicht erstellen" - -#: plugins/sudoers/ldap.c:1326 -msgid "sudo_ldap_build_pass1 allocation mismatch" -msgstr "sudo_ldap_build_pass1 ungültige Zuordnung" - -#: plugins/sudoers/ldap.c:1469 +#: plugins/sudoers/ldap.c:1853 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:1963 +#: plugins/sudoers/ldap.c:2394 #, c-format msgid "" "\n" @@ -864,7 +994,7 @@ "\n" "LDAP-Rolle: %s\n" -#: plugins/sudoers/ldap.c:1965 +#: plugins/sudoers/ldap.c:2396 #, c-format msgid "" "\n" @@ -873,622 +1003,639 @@ "\n" "LDAP-Rolle: UNBEKANNT\n" -#: plugins/sudoers/ldap.c:2012 +#: plugins/sudoers/ldap.c:2443 #, c-format msgid " Order: %s\n" msgstr " Reihenfolge: %s\n" -#: plugins/sudoers/ldap.c:2020 plugins/sudoers/parse.c:512 -#: plugins/sudoers/sssd.c:1297 +#: plugins/sudoers/ldap.c:2451 plugins/sudoers/parse.c:555 +#: plugins/sudoers/sssd.c:1429 #, c-format msgid " Commands:\n" -msgstr " Kommandos:\n" +msgstr " Befehle:\n" -#: plugins/sudoers/ldap.c:2570 +#: plugins/sudoers/ldap.c:3015 #, c-format msgid "unable to initialize LDAP: %s" -msgstr "Kann LDAP nicht initialisieren: %s" +msgstr "LDAP kann nicht initialisiert werden: %s" -#: plugins/sudoers/ldap.c:2612 +#: plugins/sudoers/ldap.c:3051 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:2845 +#: plugins/sudoers/ldap.c:3305 #, c-format msgid "invalid sudoOrder attribute: %s" -msgstr "ungültiges »sudoOrder« Attribut: %s" +msgstr "Ungültiges »sudoOrder« Attribut: %s" -#: plugins/sudoers/linux_audit.c:57 +#: plugins/sudoers/linux_audit.c:52 msgid "unable to open audit system" -msgstr "Kann das Audit-System nicht öffnen" +msgstr "Das Audit-System kann nicht geöffnet werden" -#: plugins/sudoers/linux_audit.c:94 +#: plugins/sudoers/linux_audit.c:93 msgid "unable to send audit message" -msgstr "Kann die Audit-Nachricht nicht senden" +msgstr "Die Audit-Nachricht kann nicht gesendet werden" -#: plugins/sudoers/logging.c:134 +#: plugins/sudoers/logging.c:106 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: plugins/sudoers/logging.c:162 +#: plugins/sudoers/logging.c:134 #, c-format msgid "%8s : (command continued) %s" -msgstr "%8s : (Kommando fortgesetzt) %s" +msgstr "%8s : (Befehl fortgesetzt) %s" -#: plugins/sudoers/logging.c:187 +#: plugins/sudoers/logging.c:159 #, c-format msgid "unable to open log file: %s: %s" -msgstr "Kann die Log-Datei nicht öffnen: %s: %s" +msgstr "Die Protokolldatei kann nicht geöffnet werden: %s: %s" -#: plugins/sudoers/logging.c:190 +#: plugins/sudoers/logging.c:162 #, c-format msgid "unable to lock log file: %s: %s" -msgstr "Kann die Log-Datei nicht sperren: %s: %s" +msgstr "Die Protokolldatei kann nicht gesperrt werden: %s: %s" -#: plugins/sudoers/logging.c:242 +#: plugins/sudoers/logging.c:211 msgid "No user or host" msgstr "Kein Benutzer oder Rechner angegeben" -#: plugins/sudoers/logging.c:244 +#: plugins/sudoers/logging.c:213 msgid "validation failure" msgstr "Fehler bei der Validierung" -#: plugins/sudoers/logging.c:251 +#: plugins/sudoers/logging.c:220 msgid "user NOT in sudoers" -msgstr "Der Benutzer ist NICHT in der sudoers" +msgstr "Der Benutzer ist NICHT in der sudoers-Datei enthalten" -#: plugins/sudoers/logging.c:253 +#: plugins/sudoers/logging.c:222 msgid "user NOT authorized on host" -msgstr "Der Benutzer ist NICHT auf dem Rechner authorisiert" +msgstr "Der Benutzer ist NICHT auf dem Rechner autorisiert" -#: plugins/sudoers/logging.c:255 +#: plugins/sudoers/logging.c:224 msgid "command not allowed" -msgstr "Das Kommando ist nicht erlaubt" +msgstr "Der Befehl ist nicht erlaubt" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:259 #, 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" +msgstr "%s ist nicht in der sudoers-Datei. Dieser Vorfall wird gemeldet.\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:262 #, 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" +msgstr "%s darf sudo für %s nicht verwenden. Dieser Vorfall wird gemeldet.\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:266 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" -msgstr "Tut mir leid, der Benutzer %s darf sudo für %s nicht verwenden.\n" +msgstr "Leider darf der Benutzer %s sudo für %s nicht verwenden.\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:269 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" -msgstr "Tut mir leid, der Benutzer %s darf '%s%s%s' als %s%s%s auf %s nicht ausführen.\n" +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:407 -#: plugins/sudoers/sudoers.c:409 plugins/sudoers/sudoers.c:411 -#: plugins/sudoers/sudoers.c:413 plugins/sudoers/sudoers.c:1128 -#: plugins/sudoers/sudoers.c:1129 +#: plugins/sudoers/logging.c:306 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1222 +#: plugins/sudoers/sudoers.c:1224 #, c-format msgid "%s: command not found" -msgstr "%s: Kommando nicht gefunden" +msgstr "%s: Befehl nicht gefunden" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:403 +#: plugins/sudoers/logging.c:308 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring `%s' found in '.'\n" "Use `sudo ./%s' if this is the `%s' you wish to run." msgstr "" -"ignoriere `%s' im aktuellen Verzeichnis ».«\n" -"Verwende »sudo ./%s«, wenn dies das gewünschte Kommando »%s« ist." +"Im aktuellen Verzeichnis ».« gefundenes »%s« wird ignoriert.\n" +"Verwenden Sie »sudo ./%s«, wenn dies der gewünschte Befehl »%s« ist." -#: plugins/sudoers/logging.c:353 +#: plugins/sudoers/logging.c:325 msgid "authentication failure" -msgstr "Fehler bei der Authentisierung" +msgstr "Fehler bei der Authentifizierung" -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:351 msgid "a password is required" msgstr "Ein Passwort ist notwendig" -#: plugins/sudoers/logging.c:446 plugins/sudoers/logging.c:501 +#: plugins/sudoers/logging.c:422 plugins/sudoers/logging.c:484 #, 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:584 +#: plugins/sudoers/logging.c:572 msgid "unable to fork" msgstr "Fehler bei fork()" -#: plugins/sudoers/logging.c:592 plugins/sudoers/logging.c:648 +#: plugins/sudoers/logging.c:580 plugins/sudoers/logging.c:640 #, c-format msgid "unable to fork: %m" msgstr "Fehler bei fork(): %m" -#: plugins/sudoers/logging.c:638 +#: plugins/sudoers/logging.c:630 #, c-format msgid "unable to open pipe: %m" -msgstr "Kann die Pipe nicht öffnen: %m" +msgstr "Die Pipe kann nicht geöffnet werden: %m" -# XXX ? -#: plugins/sudoers/logging.c:663 +#: plugins/sudoers/logging.c:655 #, c-format msgid "unable to dup stdin: %m" -msgstr "Kann stdin nicht duplizieren" +msgstr "Die Standardeingabe kann nicht dupliziert werden: %m" -#: plugins/sudoers/logging.c:698 +#: plugins/sudoers/logging.c:693 #, c-format msgid "unable to execute %s: %m" -msgstr "Kann %s nicht ausführen: %m" +msgstr "%s kann nicht ausgeführt werden: %m" -#: plugins/sudoers/match.c:627 +#: plugins/sudoers/match.c:616 #, c-format msgid "unsupported digest type %d for %s" -msgstr "Digest Typ %d ist nicht unterstützt für %s" +msgstr "Prüfsummentyp %d wird für %s nicht unterstützt" -#: plugins/sudoers/match.c:656 +#: plugins/sudoers/match.c:657 #, c-format msgid "%s: read error" msgstr "%s: Fehler beim Lesen" -#: plugins/sudoers/match.c:670 +#: plugins/sudoers/match.c:692 #, c-format msgid "digest for %s (%s) is not in %s form" -msgstr "Digest für %s (%s) ist nicht in der %s Form" +msgstr "Prüfsumme für %s (%s) ist nicht in der Form %s" -#: plugins/sudoers/parse.c:123 +#: plugins/sudoers/parse.c:114 #, c-format msgid "parse error in %s near line %d" msgstr "Syntax-Fehler in %s bei der Zeile %d" -#: plugins/sudoers/parse.c:126 +#: plugins/sudoers/parse.c:117 #, c-format msgid "parse error in %s" msgstr "Syntax-Fehler in %s" -#: plugins/sudoers/parse.c:459 +#: plugins/sudoers/parse.c:502 #, c-format msgid "" "\n" "Sudoers entry:\n" msgstr "" "\n" -"Sudoers Eintrag:\n" +"Sudoers-Eintrag:\n" -#: plugins/sudoers/parse.c:460 +#: plugins/sudoers/parse.c:503 #, c-format msgid " RunAsUsers: " msgstr " RunAsUsers: " -#: plugins/sudoers/parse.c:474 +#: plugins/sudoers/parse.c:517 #, c-format msgid " RunAsGroups: " msgstr " RunAsGroups: " -#: plugins/sudoers/parse.c:483 +#: plugins/sudoers/parse.c:526 #, c-format msgid " Options: " msgstr " Optionen: " -#: plugins/sudoers/policy.c:109 plugins/sudoers/policy.c:118 -#: plugins/sudoers/policy.c:127 plugins/sudoers/policy.c:151 -#: plugins/sudoers/policy.c:263 plugins/sudoers/policy.c:283 -#: plugins/sudoers/policy.c:292 plugins/sudoers/policy.c:322 -#: plugins/sudoers/policy.c:332 plugins/sudoers/policy.c:341 -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" +#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:253 +msgid "unable to parse network address list" +msgstr "Die Netzwerkadressliste kann nicht eingelesen werden" -#: plugins/sudoers/policy.c:569 plugins/sudoers/visudo.c:773 +#: plugins/sudoers/policy.c:659 plugins/sudoers/visudo.c:841 #, c-format msgid "unable to execute %s" -msgstr "kann %s nicht ausführen" +msgstr "%s kann nicht ausgeführt werden" -#: plugins/sudoers/policy.c:701 +#: plugins/sudoers/policy.c:792 #, c-format msgid "Sudoers policy plugin version %s\n" -msgstr "Sudoers Policy-Plugin Version %s\n" +msgstr "Sudoers-Policy-Plugin Version %s\n" -#: plugins/sudoers/policy.c:703 +#: plugins/sudoers/policy.c:794 #, c-format msgid "Sudoers file grammar version %d\n" -msgstr "Sudoers-Datei Grammatik-Version %d\n" +msgstr "Sudoers-Datei-Grammatik-Version %d\n" -#: plugins/sudoers/policy.c:707 +#: plugins/sudoers/policy.c:798 #, c-format msgid "" "\n" "Sudoers path: %s\n" msgstr "" "\n" -"Sudoers Pfad: %s\n" +"Sudoers-Pfad: %s\n" -#: plugins/sudoers/policy.c:710 +#: plugins/sudoers/policy.c:801 #, c-format msgid "nsswitch path: %s\n" -msgstr "nsswitch Pfad: %s\n" +msgstr "nsswitch-Pfad: %s\n" -#: plugins/sudoers/policy.c:712 +#: plugins/sudoers/policy.c:803 #, c-format msgid "ldap.conf path: %s\n" -msgstr "ldap.conf Pfad: %s\n" +msgstr "ldap.conf-Pfad: %s\n" -#: plugins/sudoers/policy.c:713 +#: plugins/sudoers/policy.c:804 #, c-format msgid "ldap.secret path: %s\n" -msgstr "ldap.secret Pfad: %s\n" +msgstr "ldap.secret-Pfad: %s\n" -#: plugins/sudoers/pwutil.c:149 +#: plugins/sudoers/policy.c:837 +#, 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:158 plugins/sudoers/pwutil.c:176 +#, c-format +msgid "unable to cache uid %u, out of memory" +msgstr "Die Benutzer-ID %u kann nicht zwischengespeichert werden, kein Speicher verfügbar" + +#: plugins/sudoers/pwutil.c:170 #, c-format msgid "unable to cache uid %u, already exists" -msgstr "kann die uid %u nicht cachen, sie existiert bereits" +msgstr "Die Benutzer-ID %u kann nicht zwischengespeichert werden, sie existiert bereits" -#: plugins/sudoers/pwutil.c:194 +#: plugins/sudoers/pwutil.c:222 plugins/sudoers/pwutil.c:239 +#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:334 +#, c-format +msgid "unable to cache user %s, out of memory" +msgstr "Der Benutzer %s kann nicht in den Zwischenspeicher aufgenommen werden, kein Speicher verfügbar" + +#: plugins/sudoers/pwutil.c:234 #, c-format msgid "unable to cache user %s, already exists" -msgstr "Kann den Benutzer %s nicht in den Cache aufnehmen, er existiert bereits" +msgstr "Der Benutzer %s kann nicht in den Zwischenspeicher aufgenommen werden, er existiert bereits" + +#: plugins/sudoers/pwutil.c:474 plugins/sudoers/pwutil.c:492 +#, c-format +msgid "unable to cache gid %u, out of memory" +msgstr "Die Gruppen-ID %u kann nicht in den Zwischenspeicher aufgenommen werden, kein Speicher verfügbar" -#: plugins/sudoers/pwutil.c:400 +#: plugins/sudoers/pwutil.c:486 #, c-format msgid "unable to cache gid %u, already exists" -msgstr "Kann die gid %u nicht in den Cache aufnehmen, sie existiert bereits" +msgstr "Die Gruppen-ID %u kann nicht in den Zwischenspeicher aufgenommen werden, sie existiert bereits" -#: plugins/sudoers/pwutil.c:439 +#: plugins/sudoers/pwutil.c:532 plugins/sudoers/pwutil.c:549 +#: plugins/sudoers/pwutil.c:584 plugins/sudoers/pwutil.c:626 +#, c-format +msgid "unable to cache group %s, out of memory" +msgstr "Die Gruppe %s kann nicht in den Zwischenspeicher aufgenommen werden, kein Speicher verfügbar" + +#: plugins/sudoers/pwutil.c:544 #, c-format msgid "unable to cache group %s, already exists" -msgstr "Kann die Gruppe %s nicht in den Cache aufnehmen, sie existiert bereits" +msgstr "Die Gruppe %s kann nicht in den Zwischenspeicher aufgenommen werden, sie existiert bereits" -#: plugins/sudoers/pwutil.c:605 plugins/sudoers/pwutil.c:631 +#: plugins/sudoers/pwutil.c:739 plugins/sudoers/pwutil.c:783 #, c-format msgid "unable to cache group list for %s, already exists" -msgstr "Kann die Gruppen-Liste für %s nicht in den Cache aufnehmen, sie existiert bereits" +msgstr "Die Gruppen-Liste für %s kann nicht in den Zwischenspeicher aufgenommen werden, sie existiert bereits" + +#: plugins/sudoers/pwutil.c:745 plugins/sudoers/pwutil.c:788 +#, c-format +msgid "unable to cache group list for %s, out of memory" +msgstr "Die Gruppen-Liste für %s kann nicht in den Zwischenspeicher aufgenommen werden, kein Speicher verfügbar" -#: plugins/sudoers/pwutil.c:627 +#: plugins/sudoers/pwutil.c:777 #, c-format msgid "unable to parse groups for %s" -msgstr "Kann die Gruppen für %s nicht parsen" +msgstr "Die Gruppen für %s können nicht eingelesen werden" -# XXX ? -#: plugins/sudoers/set_perms.c:122 plugins/sudoers/set_perms.c:447 -#: plugins/sudoers/set_perms.c:850 plugins/sudoers/set_perms.c:1147 -#: plugins/sudoers/set_perms.c:1439 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 +#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 +#: plugins/sudoers/set_perms.c:1430 msgid "perm stack overflow" -msgstr "Stack-Überlauf der Permissions" +msgstr "Stack-Überlauf der Zugriffsrechte" -#: plugins/sudoers/set_perms.c:130 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:1076 -#: plugins/sudoers/set_perms.c:1155 plugins/sudoers/set_perms.c:1372 -#: plugins/sudoers/set_perms.c:1447 plugins/sudoers/set_perms.c:1536 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 +#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 +#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 +#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 +#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 msgid "perm stack underflow" -msgstr "Stack-Bereichsunterschreitung der Permissions" +msgstr "Stack-Bereichsunterschreitung der Zugriffsrechte" -# XXX ? -#: plugins/sudoers/set_perms.c:189 plugins/sudoers/set_perms.c:502 -#: plugins/sudoers/set_perms.c:1206 plugins/sudoers/set_perms.c:1479 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:493 +#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 msgid "unable to change to root gid" -msgstr "Kann nicht zur root GID wechseln" +msgstr "Wechsel zur root-GID ist nicht möglich" -# XXX ? -#: plugins/sudoers/set_perms.c:278 plugins/sudoers/set_perms.c:599 -#: plugins/sudoers/set_perms.c:987 plugins/sudoers/set_perms.c:1283 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:590 +#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 msgid "unable to change to runas gid" -msgstr "Kann nicht zur runas UID wechseln" +msgstr "Wechsel zur runas-UID ist nicht möglich" -# XXX vector? -#: plugins/sudoers/set_perms.c:283 plugins/sudoers/set_perms.c:604 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:595 +#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 msgid "unable to set runas group vector" -msgstr "Kann die runas Gruppen nicht setzen" +msgstr "Die runas-Gruppen können nicht gesetzt werden" -# XXX ? -#: plugins/sudoers/set_perms.c:294 plugins/sudoers/set_perms.c:615 -#: plugins/sudoers/set_perms.c:1001 plugins/sudoers/set_perms.c:1297 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:606 +#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 msgid "unable to change to runas uid" -msgstr "Kann nicht zur runas GID wechseln" +msgstr "Wechsel zur runas-GID ist nicht möglich" -# XXX ? -#: plugins/sudoers/set_perms.c:312 plugins/sudoers/set_perms.c:633 -#: plugins/sudoers/set_perms.c:1017 plugins/sudoers/set_perms.c:1313 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:624 +#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 msgid "unable to change to sudoers gid" -msgstr "Kann nicht zur sudoers GID wechseln" +msgstr "Wechsel zur sudoers-GID ist nicht möglich" -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 msgid "too many processes" msgstr "Zu viele Prozesse" -# XXX vector? -#: plugins/sudoers/solaris_audit.c:47 +#: plugins/sudoers/solaris_audit.c:51 msgid "unable to get current working directory" -msgstr "Kann das aktuelle Arbeitsverzeichnis nicht bestimmen" +msgstr "Das aktuelle Arbeitsverzeichnis kann nicht bestimmt werden" -#: plugins/sudoers/solaris_audit.c:55 +#: plugins/sudoers/solaris_audit.c:59 #, c-format msgid "truncated audit path user_cmnd: %s" msgstr "Audit-Pfad user_cmnd abgeschnitten: %s" -#: plugins/sudoers/solaris_audit.c:62 +#: plugins/sudoers/solaris_audit.c:66 #, c-format msgid "truncated audit path argv[0]: %s" msgstr "Audit-Pfad argv[0] abgeschnitten: %s" -#: plugins/sudoers/solaris_audit.c:111 +#: plugins/sudoers/solaris_audit.c:115 msgid "audit_failure message too long" -msgstr "audit_failure Meldung ist zu lang" +msgstr "audit_failure-Meldung ist zu lang" -#: plugins/sudoers/sssd.c:252 +#: plugins/sudoers/sssd.c:333 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" -msgstr "Kann die SSS_Quelle nicht initialisieren. Ist SSSD auf dem Rechner installiert?" +msgstr "Die SSS-Quelle kann nicht initialisiert werden. Ist SSSD auf dem Rechner installiert?" -#: plugins/sudoers/sssd.c:259 plugins/sudoers/sssd.c:267 -#: plugins/sudoers/sssd.c:275 plugins/sudoers/sssd.c:283 -#: plugins/sudoers/sssd.c:291 +#: plugins/sudoers/sssd.c:341 plugins/sudoers/sssd.c:350 +#: plugins/sudoers/sssd.c:359 plugins/sudoers/sssd.c:368 +#: plugins/sudoers/sssd.c:377 #, c-format msgid "unable to find symbol \"%s\" in %s" -msgstr "Kann das Symbol »%s« nicht in %s finden" +msgstr "Das Symbol »%s« kann in %s nicht gefunden werden" -#: plugins/sudoers/sudo_nss.c:296 +#: plugins/sudoers/sudo_nss.c:290 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Passende Defaults-Einträge für %s auf %s:\n" -#: plugins/sudoers/sudo_nss.c:309 +#: plugins/sudoers/sudo_nss.c:308 #, c-format msgid "Runas and Command-specific defaults for %s:\n" -msgstr "Runas und Kommando-spezifische Standardwerte für %s:\n" +msgstr "Runas und befehlsspezifische Standardwerte für %s:\n" -#: plugins/sudoers/sudo_nss.c:322 +#: plugins/sudoers/sudo_nss.c:326 #, c-format msgid "User %s may run the following commands on %s:\n" -msgstr "Der Benutzer %s darf die folgenden Kommandos auf %s ausführen:\n" +msgstr "Der Benutzer %s darf die folgenden Befehle auf %s ausführen:\n" -#: plugins/sudoers/sudo_nss.c:331 +#: plugins/sudoers/sudo_nss.c:339 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Der Benutzer %s darf sudo auf dem Rechner %s nicht ausführen.\n" -#: plugins/sudoers/sudoers.c:160 plugins/sudoers/sudoers.c:201 -#: plugins/sudoers/sudoers.c:726 +#: plugins/sudoers/sudoers.c:172 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/visudo.c:223 plugins/sudoers/visudo.c:567 +msgid "unable to initialize sudoers default values" +msgstr "Standardwerte für sudoers können nicht initialisiert werden" + +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:239 +#: plugins/sudoers/sudoers.c:833 msgid "problem with defaults entries" msgstr "Problem mit den Standard-Einträgen" -#: plugins/sudoers/sudoers.c:167 +#: plugins/sudoers/sudoers.c:205 msgid "no valid sudoers sources found, quitting" msgstr "Keine gültige sudoers-Quelle gefunden, Programmende" -#: plugins/sudoers/sudoers.c:233 +#: plugins/sudoers/sudoers.c:275 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers gibt an, dass root sudo nicht verwenden darf" -#: plugins/sudoers/sudoers.c:278 +#: plugins/sudoers/sudoers.c:332 msgid "you are not permitted to use the -C option" -msgstr "Sie dürfen die -C Option nicht verwenden" +msgstr "Sie dürfen die Option -C nicht verwenden" -#: plugins/sudoers/sudoers.c:336 +#: plugins/sudoers/sudoers.c:396 #, c-format msgid "timestamp owner (%s): No such user" msgstr "Zeitstempelbesitzer (%s): Benutzer existiert nicht" -#: plugins/sudoers/sudoers.c:350 +#: plugins/sudoers/sudoers.c:410 msgid "no tty" msgstr "Kein tty" -#: plugins/sudoers/sudoers.c:351 +#: plugins/sudoers/sudoers.c:411 msgid "sorry, you must have a tty to run sudo" -msgstr "Uh, Sie müssen ein TTY haben, um sudo zu verwenden" +msgstr "Sie müssen ein TTY haben, um sudo zu verwenden" -# XXX ? -#: plugins/sudoers/sudoers.c:402 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" -msgstr "Kommando ist im aktuellen Verzeichnis" +msgstr "Befehl ist im aktuellen Verzeichnis" -#: plugins/sudoers/sudoers.c:422 +#: plugins/sudoers/sudoers.c:486 msgid "sorry, you are not allowed to preserve the environment" -msgstr "Uh, Sie dürfen das Environment nicht erhalten" +msgstr "Sie dürfen das Environment nicht erhalten" -#: plugins/sudoers/sudoers.c:674 +#: plugins/sudoers/sudoers.c:778 msgid "command too long" -msgstr "Das Kommando ist zu lang" +msgstr "Der Befehl ist zu lang" -#: plugins/sudoers/sudoers.c:779 plugins/sudoers/visudo.c:333 -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/sudoers.c:886 plugins/sudoers/visudo.c:427 +#: plugins/sudoers/visudo.c:667 #, c-format msgid "unable to stat %s" -msgstr "stat konnte nicht auf %s angewandt werden" +msgstr "stat konnte nicht auf %s angewendet werden" -#: plugins/sudoers/sudoers.c:783 +#: plugins/sudoers/sudoers.c:890 #, c-format msgid "%s is not a regular file" msgstr "%s ist keine reguläre Datei" -#: plugins/sudoers/sudoers.c:787 plugins/sudoers/timestamp.c:289 toke.l:945 +#: plugins/sudoers/sudoers.c:894 plugins/sudoers/timestamp.c:225 toke.l:947 #, 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:791 toke.l:952 +#: plugins/sudoers/sudoers.c:898 toke.l:954 #, c-format msgid "%s is world writable" msgstr "%s ist für alle beschreibbar (world writable)" -#: plugins/sudoers/sudoers.c:795 toke.l:957 +#: plugins/sudoers/sudoers.c:902 toke.l:959 #, c-format msgid "%s is owned by gid %u, should be %u" -msgstr "%s gehört gid %u, sollte allerdings %u gehören" +msgstr "%s gehört GID %u, sollte allerdings %u gehören" -#: plugins/sudoers/sudoers.c:826 +#: plugins/sudoers/sudoers.c:933 #, c-format msgid "only root can use `-c %s'" msgstr "Nur root kann »-c %s« verwenden" -#: plugins/sudoers/sudoers.c:845 +#: plugins/sudoers/sudoers.c:952 #, c-format msgid "unknown login class: %s" -msgstr "unbekannte Login-Klasse: %s" +msgstr "Unbekannte Anmeldeklasse: %s" -# XXX -#: plugins/sudoers/sudoers.c:889 plugins/sudoers/sudoers.c:904 +#: plugins/sudoers/sudoers.c:1031 plugins/sudoers/sudoers.c:1059 #, c-format msgid "unable to resolve host %s" msgstr "Hostname %s kann nicht aufgelöst werden" -#: plugins/sudoers/sudoers.c:986 plugins/sudoers/testsudoers.c:388 +#: plugins/sudoers/sudoers.c:1126 plugins/sudoers/testsudoers.c:385 #, c-format msgid "unknown group: %s" -msgstr "unbekannte Gruppe: %s" +msgstr "Unbekannte Gruppe: %s" -#: plugins/sudoers/sudoreplay.c:280 +#: plugins/sudoers/sudoreplay.c:232 #, c-format msgid "invalid filter option: %s" msgstr "Ungültige Filteroption: %s" -#: plugins/sudoers/sudoreplay.c:293 +#: plugins/sudoers/sudoreplay.c:245 #, c-format msgid "invalid max wait: %s" msgstr "Ungültige maximale Wartezeit: %s" -#: plugins/sudoers/sudoreplay.c:299 +#: plugins/sudoers/sudoreplay.c:251 #, c-format msgid "invalid speed factor: %s" msgstr "Ungültiger Geschwindigkeitsfaktor: %s" -#: plugins/sudoers/sudoreplay.c:302 plugins/sudoers/visudo.c:190 +#: plugins/sudoers/sudoreplay.c:254 plugins/sudoers/visudo.c:180 #, c-format msgid "%s version %s\n" msgstr "%s Version %s\n" -#: plugins/sudoers/sudoreplay.c:334 +#: plugins/sudoers/sudoreplay.c:286 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/Zeit: %s" -#: plugins/sudoers/sudoreplay.c:340 +#: plugins/sudoers/sudoreplay.c:292 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/Zeit: %s" -#: plugins/sudoers/sudoreplay.c:356 +#: plugins/sudoers/sudoreplay.c:308 #, c-format msgid "Replaying sudo session: %s\n" msgstr "Sudo-Sitzung wird abgespielt: %s\n" -#: plugins/sudoers/sudoreplay.c:362 +#: plugins/sudoers/sudoreplay.c:314 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "" "Warnung: Ihr Terminal ist zu klein, um das Protokoll korrekt\n" "wiederzugeben.\n" -#: plugins/sudoers/sudoreplay.c:363 +#: plugins/sudoers/sudoreplay.c:315 #, 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:418 +#: plugins/sudoers/sudoreplay.c:368 msgid "unable to set tty to raw mode" -msgstr "TTY konnte nicht in den Raw-Mode versetzt werden" +msgstr "TTY konnte nicht in den Raw-Modus versetzt werden" -# XXX -#: plugins/sudoers/sudoreplay.c:449 +#: plugins/sudoers/sudoreplay.c:401 #, c-format msgid "invalid timing file line: %s" msgstr "Ungültige Zeitdateizeile: %s" -#: plugins/sudoers/sudoreplay.c:655 plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:611 plugins/sudoers/sudoreplay.c:636 #, c-format msgid "ambiguous expression \"%s\"" msgstr "Mehrdeutiger Ausdruck »%s«" -#: plugins/sudoers/sudoreplay.c:702 +#: plugins/sudoers/sudoreplay.c:658 msgid "unmatched ')' in expression" msgstr "»)« ohne öffnende Klammer im Ausdruck" -#: plugins/sudoers/sudoreplay.c:706 +#: plugins/sudoers/sudoreplay.c:662 #, c-format msgid "unknown search term \"%s\"" msgstr "Unbekannter Suchbegriff »%s«" -#: plugins/sudoers/sudoreplay.c:720 +#: plugins/sudoers/sudoreplay.c:677 #, c-format msgid "%s requires an argument" msgstr "%s erfordert ein Argument" -#: plugins/sudoers/sudoreplay.c:724 plugins/sudoers/sudoreplay.c:1096 +#: plugins/sudoers/sudoreplay.c:680 plugins/sudoers/sudoreplay.c:1060 #, c-format msgid "invalid regular expression: %s" msgstr "ungültiger regulärer Ausdruck: %s" -#: plugins/sudoers/sudoreplay.c:730 +#: plugins/sudoers/sudoreplay.c:684 #, c-format msgid "could not parse date \"%s\"" msgstr "Datum »%s« konnte nicht analysiert werden" -#: plugins/sudoers/sudoreplay.c:739 +#: plugins/sudoers/sudoreplay.c:693 msgid "unmatched '(' in expression" msgstr "»(« ohne schließende Klammer im Ausdruck" -#: plugins/sudoers/sudoreplay.c:741 +#: plugins/sudoers/sudoreplay.c:695 msgid "illegal trailing \"or\"" msgstr "Ungültiges nachgestelltes »or«" -#: plugins/sudoers/sudoreplay.c:743 +#: plugins/sudoers/sudoreplay.c:697 msgid "illegal trailing \"!\"" msgstr "Ungültiges nachgestelltes »!«" -#: plugins/sudoers/sudoreplay.c:796 +#: plugins/sudoers/sudoreplay.c:746 #, c-format msgid "unknown search type %d" msgstr "Unbekannter Suchtyp %d" -#: plugins/sudoers/sudoreplay.c:833 +#: plugins/sudoers/sudoreplay.c:784 #, c-format msgid "%s: invalid log file" -msgstr "%s: ungültige Log-Datei" +msgstr "%s: ungültige Protokolldatei" -#: plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:802 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: Das Feld für den Zeitstempel fehlt" -#: plugins/sudoers/sudoreplay.c:858 +#: plugins/sudoers/sudoreplay.c:809 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: Zeitstempel %s: %s" -#: plugins/sudoers/sudoreplay.c:865 +#: plugins/sudoers/sudoreplay.c:816 #, c-format msgid "%s: user field is missing" msgstr "%s: Das Benutzerfeld fehlt" -#: plugins/sudoers/sudoreplay.c:873 +#: plugins/sudoers/sudoreplay.c:825 #, c-format msgid "%s: runas user field is missing" msgstr "%s: Das Feld für den »runas«-Benutzer fehlt" -#: plugins/sudoers/sudoreplay.c:881 +#: plugins/sudoers/sudoreplay.c:834 #, c-format msgid "%s: runas group field is missing" msgstr "%s: Das Feld für die »runas«-Gruppe fehlt" -# XXX -#: plugins/sudoers/sudoreplay.c:1236 +#: plugins/sudoers/sudoreplay.c:1197 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "Aufruf: %s [-h] [-d Verzeichnis] [-m Max_Wartezeit] [-s Geschwindigkeitsfaktor] ID\n" -#: plugins/sudoers/sudoreplay.c:1239 +#: plugins/sudoers/sudoreplay.c:1200 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" -msgstr "Aufruf: %s [-h] [-d Verzeichnis] -l [search Ausdruck]\n" +msgstr "Aufruf: %s [-h] [-d Verzeichnis] -l [Suchausdruck]\n" -#: plugins/sudoers/sudoreplay.c:1248 +#: plugins/sudoers/sudoreplay.c:1209 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1497,7 +1644,7 @@ "%s – sudo-Sitzungsprotokolle abspielen\n" "\n" -#: plugins/sudoers/sudoreplay.c:1250 +#: plugins/sudoers/sudoreplay.c:1211 msgid "" "\n" "Options:\n" @@ -1511,36 +1658,39 @@ msgstr "" "\n" "Optionen:\n" -" -d, --directory=Verzeichnis Geben Sie ein Verzeichnis für die Sitzungsprotokolle an\n" -" -f, --filter=Filter Geben Sie an, welcher E/A-Typ angezeigt werden soll\n" -" -h, --help Hilfetext anzeigen und beenden\n" -" -l, --list Verfügbare Sitzungs-IDs anzeigen, die mit dem Ausdruck übereinstimmen\n" -" -m, --max-wait=Zahl Maximale Wartezeit zwischen Ereignissen in Sekunden\n" -" -s, --speed=Zahl Ausgabe beschleunigen oder verlangsamen\n" -" -V, --version Versionsinformationen anzeigen und beenden" +" -d, --directory=Verzeichnis gibt ein Verzeichnis für Sitzungsprotokolle an\n" +" -f, --filter=Filter gibt an, welcher E/A-Typ angezeigt werden soll\n" +" -h, --help zeigt einen Hilfetext an und beendet\n" +" das Programm\n" +" -l, --list zeigt verfügbare Sitzungs-IDs an, die mit dem\n" +" Ausdruck übereinstimmen\n" +" -m, --max-wait=Zahl gibt die maximale Wartezeit zwischen Ereignissen\n" +" in Sekunden an\n" +" -s, --speed=Zahl beschleunigt oder verlangsamt die Wiedergabe\n" +" -V, --version zeigt Versionsinformationen an und beendet\n" +" das Programm" -#: plugins/sudoers/testsudoers.c:327 +#: plugins/sudoers/testsudoers.c:324 msgid "\thost unmatched" msgstr "\tHost stimmt nicht überein" -#: plugins/sudoers/testsudoers.c:330 +#: plugins/sudoers/testsudoers.c:327 msgid "" "\n" "Command allowed" msgstr "" "\n" -"Kommando erlaubt" +"Befehl erlaubt" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command denied" msgstr "" "\n" -"Kommando verweigert" +"Befehl verweigert" -# XXX -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command unmatched" @@ -1548,114 +1698,129 @@ "\n" "Befehl nicht erkannt" -#: plugins/sudoers/timestamp.c:197 -#, c-format -msgid "unable to truncate time stamp file to %lld bytes" -msgstr "kann die Zeitstempeldatei nicht auf %lld Bytes abschneiden" - -#: plugins/sudoers/timestamp.c:297 +#: plugins/sudoers/timestamp.c:233 #, c-format msgid "%s is group writable" msgstr "%s ist für die Gruppe beschreibbar" -#: plugins/sudoers/timestamp.c:318 +#: plugins/sudoers/timestamp.c:309 #, c-format -msgid "timestamp path too long: %s/%s" -msgstr "Zeitstempelpfad zu lang: %s/%s" +msgid "unable to truncate time stamp file to %lld bytes" +msgstr "Die Zeitstempeldatei kann nicht auf %lld Bytes abgeschnitten werden" -#: plugins/sudoers/timestamp.c:498 +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:488 plugins/sudoers/visudo.c:494 +msgid "unable to read the clock" +msgstr "Die Uhrzeit kann nicht ausgelesen werden" + +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" -msgstr "ignoriere Zeitstempel aus der Zukunft" +msgstr "Zeitstempel aus der Zukunft wird ignoriert" -#: plugins/sudoers/timestamp.c:510 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "Zeitstempel ist zu weit in der Zukunft: %20.20s" -#: plugins/sudoers/timestamp.c:613 plugins/sudoers/timestamp.c:634 +#: plugins/sudoers/timestamp.c:863 +#, c-format +msgid "unable to lock time stamp file %s" +msgstr "Die Zeitstempeldatei »%s« kann nicht gesperrt werden" + +#: plugins/sudoers/timestamp.c:906 plugins/sudoers/timestamp.c:926 #, c-format msgid "lecture status path too long: %s/%s" msgstr "Pfad zur Belehrung ist zu lang: %s/%s" -#: plugins/sudoers/visudo.c:192 +#: plugins/sudoers/visudo.c:182 #, c-format msgid "%s grammar version %d\n" msgstr "%s-Grammatik Version %d\n" -#: plugins/sudoers/visudo.c:263 plugins/sudoers/visudo.c:552 +#: plugins/sudoers/visudo.c:254 plugins/sudoers/visudo.c:619 #, c-format msgid "press return to edit %s: " msgstr "Drücken Sie die Eingabetaste, um %s zu bearbeiten: " -#: plugins/sudoers/visudo.c:349 plugins/sudoers/visudo.c:355 +#: plugins/sudoers/visudo.c:320 +#, c-format +msgid "specified editor (%s) doesn't exist" +msgstr "Der angegebene Editor (%s) ist nicht vorhanden" + +#: plugins/sudoers/visudo.c:338 +#, c-format +msgid "no editor found (editor path = %s)" +msgstr "Kein Editor gefunden (Pfad zum Editor = %s)" + +#: plugins/sudoers/visudo.c:447 plugins/sudoers/visudo.c:455 msgid "write error" msgstr "Schreibfehler" -#: plugins/sudoers/visudo.c:439 +#: plugins/sudoers/visudo.c:501 #, 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:444 +#: plugins/sudoers/visudo.c:508 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "Leere temporäre Datei (%s), %s ist unverändert" -#: plugins/sudoers/visudo.c:450 +#: plugins/sudoers/visudo.c:514 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "Editor-Aufruf (%s) ist gescheitert, %s ist unverändert" -#: plugins/sudoers/visudo.c:472 +#: plugins/sudoers/visudo.c:536 #, c-format msgid "%s unchanged" msgstr "%s unverändert" -#: plugins/sudoers/visudo.c:497 +#: plugins/sudoers/visudo.c:562 #, 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:507 +#: plugins/sudoers/visudo.c:573 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "Analyse der temporären Datei (%s) gescheitert, unbekannter Fehler" -#: plugins/sudoers/visudo.c:543 +#: plugins/sudoers/visudo.c:610 #, c-format msgid "internal error, unable to find %s in list!" msgstr "Interner Fehler, %s in der Liste nicht gefunden!" -#: plugins/sudoers/visudo.c:601 plugins/sudoers/visudo.c:610 +#: plugins/sudoers/visudo.c:669 plugins/sudoers/visudo.c:678 #, 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:605 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:673 plugins/sudoers/visudo.c:683 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "Ändern des Modus von %s auf 0%o gescheitert" -#: plugins/sudoers/visudo.c:632 +#: plugins/sudoers/visudo.c:700 #, 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:646 +#: plugins/sudoers/visudo.c:714 #, c-format msgid "command failed: '%s %s %s', %s unchanged" -msgstr "Kommando gescheitert: »%s %s %s«, %s unverändert" +msgstr "Befehl gescheitert: »%s %s %s«, %s unverändert" -#: plugins/sudoers/visudo.c:656 +#: plugins/sudoers/visudo.c:724 #, c-format msgid "error renaming %s, %s unchanged" -msgstr "Fehler beim Umbennenen von %s, %s unverändert" +msgstr "Fehler beim Umbenennen von %s, %s unverändert" -#: plugins/sudoers/visudo.c:718 +#: plugins/sudoers/visudo.c:786 msgid "What now? " msgstr "Was jetzt? " -#: plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:800 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1667,88 +1832,72 @@ " 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:780 +#: plugins/sudoers/visudo.c:848 #, c-format msgid "unable to run %s" msgstr "%s konnte nicht ausgeführt werden" -#: plugins/sudoers/visudo.c:806 +#: plugins/sudoers/visudo.c:878 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" -msgstr "%s: Falsche Besitzer-(uid, gid) sollte (%u, %u) sein\n" +msgstr "%s: Falsche Besitzer-(uid, gid), sollte (%u, %u) sein\n" -#: plugins/sudoers/visudo.c:813 +#: plugins/sudoers/visudo.c:885 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" -msgstr "%s: Falsche Zugriffsrechte, sollten Modus 0%o sein\n" +msgstr "%s: Falsche Zugriffsrechte, sollte Modus 0%o sein\n" -#: plugins/sudoers/visudo.c:838 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:910 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "failed to parse %s file, unknown error" msgstr "Analyse der Datei %s gescheitert, unbekannter Fehler" -#: plugins/sudoers/visudo.c:854 plugins/sudoers/visudo_json.c:1054 +#: plugins/sudoers/visudo.c:926 plugins/sudoers/visudo_json.c:1041 #, c-format msgid "parse error in %s near line %d\n" msgstr "Analysefehler in %s nahe Zeile %d\n" -#: plugins/sudoers/visudo.c:857 plugins/sudoers/visudo_json.c:1057 +#: plugins/sudoers/visudo.c:929 plugins/sudoers/visudo_json.c:1044 #, c-format msgid "parse error in %s\n" msgstr "Analysefehler in %s\n" -#: plugins/sudoers/visudo.c:865 plugins/sudoers/visudo.c:872 +#: plugins/sudoers/visudo.c:937 plugins/sudoers/visudo.c:944 #, c-format msgid "%s: parsed OK\n" msgstr "%s: Analyse OK\n" -#: plugins/sudoers/visudo.c:918 +#: plugins/sudoers/visudo.c:991 #, c-format msgid "%s busy, try again later" msgstr "%s ist in Verwendung, versuchen Sie es später erneut" -#: plugins/sudoers/visudo.c:962 -#, c-format -msgid "specified editor (%s) doesn't exist" -msgstr "Der angegebene Editor (%s) ist nicht vorhanden" - -#: plugins/sudoers/visudo.c:985 -#, c-format -msgid "unable to stat editor (%s)" -msgstr "Anwenden von stat auf den Editor ist gescheitert (%s)" - -#: plugins/sudoers/visudo.c:1033 -#, c-format -msgid "no editor found (editor path = %s)" -msgstr "Kein Editor gefunden (Pfad zum Editor = %s)" - -#: plugins/sudoers/visudo.c:1136 +#: plugins/sudoers/visudo.c:1087 #, c-format msgid "Error: cycle in %s `%s'" msgstr "Fehler: Zyklus in %s »%s«" -#: plugins/sudoers/visudo.c:1137 +#: plugins/sudoers/visudo.c:1088 #, c-format msgid "Warning: cycle in %s `%s'" msgstr "Warnung: Zyklus in %s »%s«" -#: plugins/sudoers/visudo.c:1141 +#: plugins/sudoers/visudo.c:1092 #, c-format msgid "Error: %s `%s' referenced but not defined" msgstr "Fehler: %s »%s« wird verwendet, ist aber nicht definiert" -#: plugins/sudoers/visudo.c:1142 +#: plugins/sudoers/visudo.c:1093 #, c-format msgid "Warning: %s `%s' referenced but not defined" msgstr "Warnung: %s »%s« wird verwendet, ist aber nicht definiert" -# XXX passt das? -#: plugins/sudoers/visudo.c:1281 +#: plugins/sudoers/visudo.c:1236 #, c-format msgid "Warning: unused %s `%s'" msgstr "Warnung: nicht verwendet: %s »%s«" -#: plugins/sudoers/visudo.c:1394 +#: plugins/sudoers/visudo.c:1349 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -1757,7 +1906,7 @@ "%s – Die sudoers-Datei sicher bearbeiten\n" "\n" -#: plugins/sudoers/visudo.c:1396 +#: plugins/sudoers/visudo.c:1351 msgid "" "\n" "Options:\n" @@ -1777,13 +1926,13 @@ " -q, --quiet weniger ausführliche Syntaxfehler-Meldungen\n" " -s, --strict strikte Syntax-Prüfung\n" " -V, --version Versionsinformation anzeigen und beenden\n" -" -x, --export=ausgabedatei exportiere sudoers im JSON-Format" +" -x, --export=ausgabedatei sudoers im JSON-Format exportieren" -#: plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo_json.c:1018 #, c-format msgid "%s: input and output files must be different" msgstr "%s: Eingabe- und Ausgabedatei müssen unterschiedlich sein" -#: toke.l:915 +#: toke.l:918 msgid "too many levels of includes" -msgstr "Zu viele geschachtelte include Einträge" +msgstr "Zu viele geschachtelte include-Einträge" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/plugins/sudoers/po/eo.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/plugins/sudoers/po/eo.mo differ diff -Nru sudo-1.8.12/plugins/sudoers/po/eo.po sudo-1.8.16/plugins/sudoers/po/eo.po --- sudo-1.8.12/plugins/sudoers/po/eo.po 2015-02-09 18:53:53.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/po/eo.po 2016-03-17 16:13:10.000000000 +0000 @@ -1,13 +1,13 @@ # Esperanto translations for sudo package. # This file is put in the public domain. -# Felipe Castro , 2013, 2014. +# Felipe Castro , 2013, 2014, 2015, 2016. # msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.12b3\n" -"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-11-20 13:33-0700\n" -"PO-Revision-Date: 2014-11-22 06:44-0500\n" +"Project-Id-Version: sudoers 1.8.16b1\n" +"Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" +"POT-Creation-Date: 2016-02-19 15:48-0700\n" +"PO-Revision-Date: 2016-03-04 09:32-0300\n" "Last-Translator: Felipe Castro \n" "Language-Team: Esperanto \n" "Language: eo\n" @@ -15,7 +15,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.6.10\n" #: confstr.sh:1 msgid "syntax error" @@ -23,7 +23,7 @@ #: confstr.sh:2 msgid "%p's password: " -msgstr "Pasvorto por %p: " +msgstr "Pasvorto de %p: " #: confstr.sh:3 msgid "[sudo] password for %p: " @@ -41,46 +41,172 @@ msgid "Sorry, try again." msgstr "Malĝuste. Reprovu." -#: gram.y:379 +#: gram.y:183 gram.y:201 gram.y:207 gram.y:213 gram.y:219 gram.y:225 +#: gram.y:241 gram.y:248 gram.y:255 gram.y:262 gram.y:269 gram.y:285 +#: gram.y:308 gram.y:315 gram.y:322 gram.y:329 gram.y:336 gram.y:391 +#: gram.y:399 gram.y:409 gram.y:439 gram.y:446 gram.y:453 gram.y:460 +#: gram.y:572 gram.y:579 gram.y:588 gram.y:597 gram.y:614 gram.y:670 +#: gram.y:677 gram.y:684 gram.y:692 gram.y:784 gram.y:791 gram.y:798 +#: gram.y:805 gram.y:812 gram.y:838 gram.y:845 gram.y:852 gram.y:1136 +#: gram.y:1143 plugins/sudoers/alias.c:123 plugins/sudoers/alias.c:136 +#: plugins/sudoers/auth/bsdauth.c:141 plugins/sudoers/auth/kerb5.c:119 +#: plugins/sudoers/auth/kerb5.c:145 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/auth/sia.c:59 +#: plugins/sudoers/defaults.c:518 plugins/sudoers/defaults.c:722 +#: plugins/sudoers/defaults.c:882 plugins/sudoers/editor.c:64 +#: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:92 +#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/iolog.c:586 +#: plugins/sudoers/iolog.c:618 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:446 plugins/sudoers/ldap.c:477 +#: plugins/sudoers/ldap.c:529 plugins/sudoers/ldap.c:562 +#: plugins/sudoers/ldap.c:917 plugins/sudoers/ldap.c:1064 +#: plugins/sudoers/ldap.c:1384 plugins/sudoers/ldap.c:1542 +#: plugins/sudoers/ldap.c:1620 plugins/sudoers/ldap.c:1756 +#: plugins/sudoers/ldap.c:1780 plugins/sudoers/ldap.c:1810 +#: plugins/sudoers/ldap.c:1863 plugins/sudoers/ldap.c:1878 +#: plugins/sudoers/ldap.c:1974 plugins/sudoers/ldap.c:2007 +#: plugins/sudoers/ldap.c:2160 plugins/sudoers/ldap.c:2257 +#: plugins/sudoers/ldap.c:3063 plugins/sudoers/ldap.c:3096 +#: plugins/sudoers/ldap.c:3407 plugins/sudoers/ldap.c:3435 +#: plugins/sudoers/ldap.c:3451 plugins/sudoers/ldap.c:3540 +#: plugins/sudoers/ldap.c:3556 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:666 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:508 +#: plugins/sudoers/match.c:544 plugins/sudoers/match.c:742 +#: plugins/sudoers/match.c:799 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:393 +#: plugins/sudoers/policy.c:602 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/sssd.c:160 plugins/sudoers/sssd.c:192 +#: plugins/sudoers/sssd.c:235 plugins/sudoers/sssd.c:242 +#: plugins/sudoers/sssd.c:278 plugins/sudoers/sssd.c:323 +#: plugins/sudoers/sssd.c:920 plugins/sudoers/sssd.c:1053 +#: plugins/sudoers/sudoers.c:159 plugins/sudoers/sudoers.c:294 +#: plugins/sudoers/sudoers.c:304 plugins/sudoers/sudoers.c:312 +#: plugins/sudoers/sudoers.c:365 plugins/sudoers/sudoers.c:663 +#: plugins/sudoers/sudoers.c:749 plugins/sudoers/sudoers.c:793 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:472 +#: plugins/sudoers/sudoreplay.c:668 plugins/sudoers/sudoreplay.c:780 +#: plugins/sudoers/sudoreplay.c:820 plugins/sudoers/sudoreplay.c:829 +#: plugins/sudoers/sudoreplay.c:839 plugins/sudoers/sudoreplay.c:847 +#: plugins/sudoers/sudoreplay.c:851 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1011 plugins/sudoers/testsudoers.c:130 +#: plugins/sudoers/testsudoers.c:188 plugins/sudoers/testsudoers.c:215 +#: plugins/sudoers/testsudoers.c:232 plugins/sudoers/timestamp.c:390 +#: plugins/sudoers/timestamp.c:426 plugins/sudoers/timestamp.c:838 +#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 +#: plugins/sudoers/toke_util.c:147 plugins/sudoers/visudo.c:152 +#: plugins/sudoers/visudo.c:213 plugins/sudoers/visudo.c:298 +#: plugins/sudoers/visudo.c:304 plugins/sudoers/visudo.c:434 +#: plugins/sudoers/visudo.c:980 plugins/sudoers/visudo.c:1024 +#: plugins/sudoers/visudo.c:1120 toke.l:785 toke.l:806 toke.l:816 toke.l:924 +#: toke.l:1082 +msgid "unable to allocate memory" +msgstr "ne eblas rezervi memoron" + +#: gram.y:471 msgid "a digest requires a path name" msgstr "resumo postulas vojnomon" -#: plugins/sudoers/alias.c:136 +#: gram.y:1136 gram.y:1143 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/defaults.c:518 +#: plugins/sudoers/defaults.c:722 plugins/sudoers/defaults.c:882 +#: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 +#: plugins/sudoers/editor.c:92 plugins/sudoers/env.c:234 +#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 +#: plugins/sudoers/iolog.c:586 plugins/sudoers/iolog.c:618 +#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:446 +#: plugins/sudoers/ldap.c:477 plugins/sudoers/ldap.c:529 +#: plugins/sudoers/ldap.c:562 plugins/sudoers/ldap.c:917 +#: plugins/sudoers/ldap.c:1064 plugins/sudoers/ldap.c:1384 +#: plugins/sudoers/ldap.c:1542 plugins/sudoers/ldap.c:1620 +#: plugins/sudoers/ldap.c:1756 plugins/sudoers/ldap.c:1780 +#: plugins/sudoers/ldap.c:1810 plugins/sudoers/ldap.c:1863 +#: plugins/sudoers/ldap.c:1878 plugins/sudoers/ldap.c:1974 +#: plugins/sudoers/ldap.c:2007 plugins/sudoers/ldap.c:2160 +#: plugins/sudoers/ldap.c:2257 plugins/sudoers/ldap.c:3063 +#: plugins/sudoers/ldap.c:3096 plugins/sudoers/ldap.c:3407 +#: plugins/sudoers/ldap.c:3434 plugins/sudoers/ldap.c:3450 +#: plugins/sudoers/ldap.c:3540 plugins/sudoers/ldap.c:3556 +#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:508 +#: plugins/sudoers/match.c:544 plugins/sudoers/match.c:742 +#: plugins/sudoers/match.c:799 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:97 +#: plugins/sudoers/policy.c:106 plugins/sudoers/policy.c:115 +#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:250 +#: plugins/sudoers/policy.c:277 plugins/sudoers/policy.c:286 +#: plugins/sudoers/policy.c:325 plugins/sudoers/policy.c:335 +#: plugins/sudoers/policy.c:344 plugins/sudoers/policy.c:393 +#: plugins/sudoers/policy.c:602 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:160 +#: plugins/sudoers/sssd.c:192 plugins/sudoers/sssd.c:235 +#: plugins/sudoers/sssd.c:242 plugins/sudoers/sssd.c:278 +#: plugins/sudoers/sssd.c:323 plugins/sudoers/sssd.c:920 +#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sudoers.c:159 +#: plugins/sudoers/sudoers.c:294 plugins/sudoers/sudoers.c:304 +#: plugins/sudoers/sudoers.c:312 plugins/sudoers/sudoers.c:365 +#: plugins/sudoers/sudoers.c:663 plugins/sudoers/sudoers.c:749 +#: plugins/sudoers/sudoers.c:793 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sudoreplay.c:472 plugins/sudoers/sudoreplay.c:668 +#: plugins/sudoers/sudoreplay.c:780 plugins/sudoers/sudoreplay.c:820 +#: plugins/sudoers/sudoreplay.c:829 plugins/sudoers/sudoreplay.c:839 +#: plugins/sudoers/sudoreplay.c:847 plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:1007 plugins/sudoers/sudoreplay.c:1011 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:188 +#: plugins/sudoers/testsudoers.c:215 plugins/sudoers/testsudoers.c:232 +#: plugins/sudoers/timestamp.c:390 plugins/sudoers/timestamp.c:426 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:147 +#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:213 +#: plugins/sudoers/visudo.c:298 plugins/sudoers/visudo.c:304 +#: plugins/sudoers/visudo.c:434 plugins/sudoers/visudo.c:980 +#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1120 toke.l:785 +#: toke.l:806 toke.l:816 toke.l:924 toke.l:1082 +#, c-format +msgid "%s: %s" +msgstr "%s: %s" + +#: plugins/sudoers/alias.c:132 #, c-format msgid "Alias `%s' already defined" msgstr "Kromnomo '%s' jam ekzistas" -#: plugins/sudoers/auth/bsdauth.c:75 +#: plugins/sudoers/auth/bsdauth.c:68 #, c-format msgid "unable to get login class for user %s" msgstr "ne eblas akiri ensalutan klason por uzanto %s" -#: plugins/sudoers/auth/bsdauth.c:80 +#: plugins/sudoers/auth/bsdauth.c:73 msgid "unable to begin bsd authentication" msgstr "ne eblas komenci bsd-aŭtentikigon" -#: plugins/sudoers/auth/bsdauth.c:88 +#: plugins/sudoers/auth/bsdauth.c:81 msgid "invalid authentication type" msgstr "nevalida aŭtentikiga tipo" -#: plugins/sudoers/auth/bsdauth.c:97 +#: plugins/sudoers/auth/bsdauth.c:90 msgid "unable to initialize BSD authentication" msgstr "ne eblas komenci BSD-aŭtentikigon" -#: plugins/sudoers/auth/fwtk.c:59 +#: plugins/sudoers/auth/fwtk.c:52 msgid "unable to read fwtk config" msgstr "ne eblas legi fwtk-agordon" -#: plugins/sudoers/auth/fwtk.c:64 +#: plugins/sudoers/auth/fwtk.c:57 msgid "unable to connect to authentication server" msgstr "ne eblas konektiĝi al aŭtentikiga servilo" -#: plugins/sudoers/auth/fwtk.c:70 plugins/sudoers/auth/fwtk.c:94 -#: plugins/sudoers/auth/fwtk.c:127 +#: plugins/sudoers/auth/fwtk.c:63 plugins/sudoers/auth/fwtk.c:87 +#: plugins/sudoers/auth/fwtk.c:121 msgid "lost connection to authentication server" msgstr "konekto al aŭtentikiga servilo perdita" -#: plugins/sudoers/auth/fwtk.c:74 +#: plugins/sudoers/auth/fwtk.c:67 #, c-format msgid "" "authentication server error:\n" @@ -89,155 +215,155 @@ "eraro de aŭtentikiga servilo:\n" "%s" -#: plugins/sudoers/auth/kerb5.c:116 +#: plugins/sudoers/auth/kerb5.c:111 #, c-format msgid "%s: unable to convert principal to string ('%s'): %s" msgstr "%s ne eblas konverti ĉefon al ĉeno ('%s'): %s" -#: plugins/sudoers/auth/kerb5.c:158 +#: plugins/sudoers/auth/kerb5.c:161 #, c-format msgid "%s: unable to parse '%s': %s" msgstr "%s: ne eblas analizi: '%s': %s" -#: plugins/sudoers/auth/kerb5.c:167 +#: plugins/sudoers/auth/kerb5.c:170 #, c-format msgid "%s: unable to resolve credential cache: %s" msgstr "%s: ne eblas trovi ccache-on: %s" -#: plugins/sudoers/auth/kerb5.c:214 +#: plugins/sudoers/auth/kerb5.c:217 #, c-format msgid "%s: unable to allocate options: %s" msgstr "%s: ne eblas generi elektojn: %s" -#: plugins/sudoers/auth/kerb5.c:229 +#: plugins/sudoers/auth/kerb5.c:232 #, c-format msgid "%s: unable to get credentials: %s" msgstr "%s: ne eblas akiri atestilojn: %s" -#: plugins/sudoers/auth/kerb5.c:242 +#: plugins/sudoers/auth/kerb5.c:245 #, c-format msgid "%s: unable to initialize credential cache: %s" msgstr "%s: ne eblas ekigi atestilan kaŝmemoron: %s" -#: plugins/sudoers/auth/kerb5.c:245 +#: plugins/sudoers/auth/kerb5.c:248 #, c-format msgid "%s: unable to store credential in cache: %s" msgstr "%s: ne eblas konservi atestilon en kaŝmemoro: %s" -#: plugins/sudoers/auth/kerb5.c:309 +#: plugins/sudoers/auth/kerb5.c:312 #, c-format msgid "%s: unable to get host principal: %s" msgstr "%s: ne eblas atingi gastiganton ĉefan: %s" -#: plugins/sudoers/auth/kerb5.c:323 +#: plugins/sudoers/auth/kerb5.c:326 #, c-format msgid "%s: Cannot verify TGT! Possible attack!: %s" msgstr "%s: Ne eblas kontroli TGT! Ebla atako!: %s" -#: plugins/sudoers/auth/pam.c:98 +#: plugins/sudoers/auth/pam.c:92 msgid "unable to initialize PAM" msgstr "ne eblas ekigi PAM" -#: plugins/sudoers/auth/pam.c:149 +#: plugins/sudoers/auth/pam.c:164 msgid "account validation failure, is your account locked?" msgstr "malsukceso ĉe konta validigo, ĉu via konto estas ŝlosita?" -#: plugins/sudoers/auth/pam.c:153 +#: plugins/sudoers/auth/pam.c:168 msgid "Account or password is expired, reset your password and try again" msgstr "Konto aŭ pasvorto eksvalidiĝis, restarigu vian pasvorton kaj reprovu" -#: plugins/sudoers/auth/pam.c:161 +#: plugins/sudoers/auth/pam.c:176 #, c-format msgid "unable to change expired password: %s" msgstr "ne eblas ŝanĝi eksvalidan pasvorton: %s" -#: plugins/sudoers/auth/pam.c:166 +#: plugins/sudoers/auth/pam.c:181 msgid "Password expired, contact your system administrator" msgstr "Pasvorto eksvalidiĝis, kontaktu vian sistemestron" -#: plugins/sudoers/auth/pam.c:170 +#: plugins/sudoers/auth/pam.c:185 msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator" msgstr "Konto eksvalidiĝis aŭ PAM-agordon malhavas sekcion \"account\" por sudo, kontaktu vian sistemestron" -#: plugins/sudoers/auth/pam.c:187 +#: plugins/sudoers/auth/pam.c:199 #, c-format msgid "PAM authentication error: %s" msgstr "eraro de aŭtentikiga servilo: %s" -#: plugins/sudoers/auth/rfc1938.c:103 plugins/sudoers/visudo.c:228 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:218 #, c-format msgid "you do not exist in the %s database" msgstr "vi ne ekzistas en la datumbazo %s" -#: plugins/sudoers/auth/securid5.c:80 +#: plugins/sudoers/auth/securid5.c:73 msgid "failed to initialise the ACE API library" msgstr "malsukcesis ekigi la bibliotekon de la API ACE" -#: plugins/sudoers/auth/securid5.c:106 +#: plugins/sudoers/auth/securid5.c:99 msgid "unable to contact the SecurID server" msgstr "ne eblas kontakti la servilon de SecurID" -#: plugins/sudoers/auth/securid5.c:115 +#: plugins/sudoers/auth/securid5.c:108 msgid "User ID locked for SecurID Authentication" msgstr "Uzanto-identigilo ŝlosita pro Aŭtentikigo SecurID" -#: plugins/sudoers/auth/securid5.c:119 plugins/sudoers/auth/securid5.c:170 +#: plugins/sudoers/auth/securid5.c:112 plugins/sudoers/auth/securid5.c:163 msgid "invalid username length for SecurID" msgstr "nevalida salutnoma longo por SecurID" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:175 +#: plugins/sudoers/auth/securid5.c:116 plugins/sudoers/auth/securid5.c:168 msgid "invalid Authentication Handle for SecurID" msgstr "nevalida Aŭtentikiga Traktilo por SecurID" -#: plugins/sudoers/auth/securid5.c:127 +#: plugins/sudoers/auth/securid5.c:120 msgid "SecurID communication failed" msgstr "Komunikiĝo kun SecurID malsukcesis" -#: plugins/sudoers/auth/securid5.c:131 plugins/sudoers/auth/securid5.c:214 +#: plugins/sudoers/auth/securid5.c:124 plugins/sudoers/auth/securid5.c:211 msgid "unknown SecurID error" msgstr "nekonata SecurID-eraro" -#: plugins/sudoers/auth/securid5.c:165 +#: plugins/sudoers/auth/securid5.c:158 msgid "invalid passcode length for SecurID" msgstr "nevalida paskoda longo por SecurID" -#: plugins/sudoers/auth/sia.c:123 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:125 msgid "unable to initialize SIA session" msgstr "ne eblas ekigi SIA-seascon" -#: plugins/sudoers/auth/sudo_auth.c:115 +#: plugins/sudoers/auth/sudo_auth.c:126 msgid "invalid authentication methods" msgstr "nevalidaj aŭtentikigaj metodoj" -#: plugins/sudoers/auth/sudo_auth.c:117 +#: plugins/sudoers/auth/sudo_auth.c:128 msgid "Invalid authentication methods compiled into sudo! You may not mix standalone and non-standalone authentication." msgstr "Nevalidaj aŭtentikigaj metodoj kompilitaj en sudo! Vi ne rajtas miksi dependan kaj sendependan aŭtentikigon." -#: plugins/sudoers/auth/sudo_auth.c:203 plugins/sudoers/auth/sudo_auth.c:252 +#: plugins/sudoers/auth/sudo_auth.c:224 plugins/sudoers/auth/sudo_auth.c:274 msgid "no authentication methods" msgstr "neniu aŭtentikiga metodo" -#: plugins/sudoers/auth/sudo_auth.c:205 +#: plugins/sudoers/auth/sudo_auth.c:226 msgid "There are no authentication methods compiled into sudo! If you want to turn off authentication, use the --disable-authentication configure option." msgstr "Ekzistas neniaj aŭtentikigaj metodoj kompilitaj en sudo! Se vi volas malŝalti aŭtentikigon, uzu la agordan parametron --disable-authentication." -#: plugins/sudoers/auth/sudo_auth.c:254 +#: plugins/sudoers/auth/sudo_auth.c:276 msgid "Unable to initialize authentication methods." msgstr "ne eblas komenci BSD-aŭtentikigajn metodojn." -#: plugins/sudoers/auth/sudo_auth.c:412 +#: plugins/sudoers/auth/sudo_auth.c:442 msgid "Authentication methods:" msgstr "Aŭtentikigaj metodoj:" -#: plugins/sudoers/bsm_audit.c:95 plugins/sudoers/bsm_audit.c:184 +#: plugins/sudoers/bsm_audit.c:111 plugins/sudoers/bsm_audit.c:200 msgid "Could not determine audit condition" msgstr "Ne eblis determini revizian kondiĉon" -#: plugins/sudoers/bsm_audit.c:156 plugins/sudoers/bsm_audit.c:244 +#: plugins/sudoers/bsm_audit.c:172 plugins/sudoers/bsm_audit.c:260 msgid "unable to commit audit record" msgstr "ne eblis konservi revizian rikordon" -#: plugins/sudoers/check.c:197 +#: plugins/sudoers/check.c:252 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -257,15 +383,15 @@ " #3) Granda povo devigas grandan responson.\n" "\n" -#: plugins/sudoers/check.c:240 plugins/sudoers/check.c:250 -#: plugins/sudoers/sudoers.c:599 plugins/sudoers/sudoers.c:628 +#: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 +#: plugins/sudoers/sudoers.c:699 plugins/sudoers/sudoers.c:728 #, c-format msgid "unknown uid: %u" msgstr "nekonata uid: %u" -#: plugins/sudoers/check.c:245 plugins/sudoers/policy.c:683 -#: plugins/sudoers/sudoers.c:955 plugins/sudoers/testsudoers.c:212 -#: plugins/sudoers/testsudoers.c:364 +#: plugins/sudoers/check.c:300 plugins/sudoers/policy.c:774 +#: plugins/sudoers/sudoers.c:1095 plugins/sudoers/testsudoers.c:206 +#: plugins/sudoers/testsudoers.c:361 #, c-format msgid "unknown user: %s" msgstr "nekonata uzanto: %s" @@ -314,535 +440,550 @@ msgstr "Sendi retmesaĝon se la uzanto ne estas permesata plenumigi komandon" #: plugins/sudoers/def_data.c:67 +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:71 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:71 +#: plugins/sudoers/def_data.c:75 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:75 +#: plugins/sudoers/def_data.c:79 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Dosiero havanta la sudo-averton: %s" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:83 msgid "Require users to authenticate by default" msgstr "Postulas, ke uzantoj aŭtentikiĝu aŭtomate" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:87 msgid "Root may run sudo" msgstr "Ĉefuzanto rajtas plenumigi: sudo" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:91 msgid "Log the hostname in the (non-syslog) log file" msgstr "Protokoli la gastignomon en la (ne syslog) protokolo" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:95 msgid "Log the year in the (non-syslog) log file" msgstr "Protokoli la jaron en la (ne syslog) protokolo" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:99 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:99 +#: plugins/sudoers/def_data.c:103 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:103 +#: plugins/sudoers/def_data.c:107 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:107 +#: plugins/sudoers/def_data.c:111 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:111 +#: plugins/sudoers/def_data.c:115 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Postuli tute kvalifikitajn gastiganto-nomojn en la dosiero sudoers" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:119 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:119 +#: plugins/sudoers/def_data.c:123 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:123 +#: plugins/sudoers/def_data.c:127 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo honoru la medivariablon EDITOR" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:131 msgid "Prompt for root's password, not the users's" msgstr "Peti la ĉefuzantan pasvorton, ne la uzanto-pasvorton" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:135 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:135 +#: plugins/sudoers/def_data.c:139 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:139 +#: plugins/sudoers/def_data.c:143 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:143 +#: plugins/sudoers/def_data.c:147 msgid "Set the LOGNAME and USER environment variables" msgstr "Valorizi la medivariablojn LOGNAME kaj USER" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:151 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:151 +#: plugins/sudoers/def_data.c:155 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:155 +#: plugins/sudoers/def_data.c:159 #, 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:159 +#: plugins/sudoers/def_data.c:163 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Eksvalidiĝo de la aŭtentikiga tempo-indikilo: %.1f minutoj" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:167 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Eksvalidiĝo de la pasvortilo: %.1f minutoj" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:171 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Nombro da provoj por enmeti pasvorton: %u" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:175 #, 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:175 +#: plugins/sudoers/def_data.c:179 #, c-format msgid "Path to log file: %s" -msgstr "Pado al protokolo: %s" +msgstr "Vojo al protokolo: %s" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:183 #, c-format msgid "Path to mail program: %s" -msgstr "Pado al retpoŝtilo: %s" +msgstr "Vojo al retpoŝtilo: %s" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:187 #, c-format msgid "Flags for mail program: %s" msgstr "Parametroj por retpoŝtilo: %s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:191 #, c-format msgid "Address to send mail to: %s" msgstr "Retpoŝtadreso adresata: %s" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:195 #, c-format msgid "Address to send mail from: %s" msgstr "Retpoŝtadreso adresanta: %s" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:199 #, c-format msgid "Subject line for mail messages: %s" msgstr "Subjekta linio por ĉiuj mesaĝoj: %s" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:203 #, c-format msgid "Incorrect password message: %s" msgstr "Neĝusta pasvorta mesaĝo: %s" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:207 #, c-format msgid "Path to lecture status dir: %s" -msgstr "Pado al dosierujo de prelega stato: %s" +msgstr "Vojo al dosierujo de prelega stato: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:211 #, c-format msgid "Path to authentication timestamp dir: %s" -msgstr "Pado al dosierujo de aŭtentikiga tempo-indikilo: %s" +msgstr "Vojo al dosierujo de aŭtentikiga tempo-indikilo: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:215 #, 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:215 +#: plugins/sudoers/def_data.c:219 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Uzantoj en la grupo en devas plenumi la postulojn de pasvorto kaj PATH: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:223 #, c-format msgid "Default password prompt: %s" msgstr "Defaŭlta pasvorta peto: %s" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:227 msgid "If set, passprompt will override system prompt in all cases." msgstr "Se aktivigita, passprompt superregas sistemajn invitojn ĉiuokaze." -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:231 #, c-format msgid "Default user to run commands as: %s" msgstr "Defaŭlta uzanto por plenumigi komandojn: %s" -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:235 #, 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:235 +#: plugins/sudoers/def_data.c:239 #, c-format msgid "Path to the editor for use by visudo: %s" -msgstr "Pado al la tekstoredaktilo uzota de visudo: %s" +msgstr "Vojo al la tekstoredaktilo uzota de visudo: %s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:243 #, 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:243 +#: plugins/sudoers/def_data.c:247 #, 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:247 +#: plugins/sudoers/def_data.c:251 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:251 +#: plugins/sudoers/def_data.c:255 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:255 +#: plugins/sudoers/def_data.c:259 #, 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:259 +#: plugins/sudoers/def_data.c:263 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "Se aktiva, uzantoj rajtas superregi la voloron de 'closefrom' per la parametro -C" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:267 msgid "Allow users to set arbitrary environment variables" msgstr "Permesi, ke uzantoj valorizu arbitrajn medivariablojn" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:271 msgid "Reset the environment to a default set of variables" msgstr "Restarigi la medion al apriora aro da variabloj" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to check for sanity:" msgstr "Medivariabloj por kontroli por sano:" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to remove:" msgstr "Medivariabloj por forigi:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:283 msgid "Environment variables to preserve:" msgstr "Medivariabloj konservi:" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:287 #, 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:287 +#: plugins/sudoers/def_data.c:291 #, 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:291 +#: plugins/sudoers/def_data.c:295 #, c-format msgid "Path to the sudo-specific environment file: %s" -msgstr "Pado al media dosiero specifa al sudo: %s" +msgstr "Vojo al media dosiero specifa al sudo: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:299 #, 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:299 +#: plugins/sudoers/def_data.c:303 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:303 +#: plugins/sudoers/def_data.c:307 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:307 +#: plugins/sudoers/def_data.c:311 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:311 +#: plugins/sudoers/def_data.c:315 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:315 +#: plugins/sudoers/def_data.c:319 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:319 +#: plugins/sudoers/def_data.c:323 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:323 +#: plugins/sudoers/def_data.c:327 msgid "Compress I/O logs using zlib" msgstr "Kunpremi eneligaj protokoloj per zlib" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:331 msgid "Always run commands in a pseudo-tty" msgstr "Ĉiam protokoli komandojn en pseŭda tty" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:335 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Kromprogramo por kompreno de ne-uniksaj grupoj: %s" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:339 #, 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:339 +#: plugins/sudoers/def_data.c:343 #, 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:343 +#: plugins/sudoers/def_data.c:347 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:347 +#: plugins/sudoers/def_data.c:351 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:351 +#: plugins/sudoers/def_data.c:355 msgid "Set of permitted privileges" msgstr "Aro da permesitaj privilegioj" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:359 msgid "Set of limit privileges" msgstr "Aro da limigaj privilegioj" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:363 msgid "Run commands on a pty in the background" msgstr "Plenumigi komandojn en pty en la fono" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:367 msgid "PAM service name to use" msgstr "PAM-servonomo por uzi" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:371 msgid "PAM service name to use for login shells" msgstr "PAM-servonomo por uzi por ensalutaj ŝeloj" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:375 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:375 +#: plugins/sudoers/def_data.c:379 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:379 +#: plugins/sudoers/def_data.c:383 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Maksimuma sinsekva numero de la en/eliga protokolo: %u" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:387 msgid "Enable sudoers netgroup support" msgstr "Aktivigi retgrupan regon de sudoers" -#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:601 -#: plugins/sudoers/visudo_json.c:642 plugins/sudoers/visudo_json.c:677 +#: plugins/sudoers/def_data.c:391 +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:395 +msgid "Follow symbolic links when editing files with sudoedit" +msgstr "Sekvi simbolajn ligojn dum redakto de dosieroj per sudoedit" + +#: plugins/sudoers/def_data.c:399 +msgid "Query the group plugin for unknown system groups" +msgstr "Informo-mendi la grupan kromprogramon por nekonataj sistem-grupoj" + +#: plugins/sudoers/def_data.c:403 +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/defaults.c:199 plugins/sudoers/defaults.c:610 +#: plugins/sudoers/visudo_json.c:633 plugins/sudoers/visudo_json.c:668 #, c-format msgid "unknown defaults entry `%s'" msgstr "nekonata ero '%s' en defaults" -#: plugins/sudoers/defaults.c:218 plugins/sudoers/defaults.c:228 -#: plugins/sudoers/defaults.c:248 plugins/sudoers/defaults.c:261 -#: plugins/sudoers/defaults.c:274 plugins/sudoers/defaults.c:287 -#: plugins/sudoers/defaults.c:300 plugins/sudoers/defaults.c:320 -#: plugins/sudoers/defaults.c:330 +#: plugins/sudoers/defaults.c:207 plugins/sudoers/defaults.c:217 +#: plugins/sudoers/defaults.c:241 plugins/sudoers/defaults.c:256 +#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 +#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 +#: plugins/sudoers/defaults.c:325 #, c-format msgid "value `%s' is invalid for option `%s'" msgstr "valoro '%s' estas nevalida por parametro '%s'" -#: plugins/sudoers/defaults.c:221 plugins/sudoers/defaults.c:231 -#: plugins/sudoers/defaults.c:239 plugins/sudoers/defaults.c:256 -#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 -#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 -#: plugins/sudoers/defaults.c:326 +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:220 +#: plugins/sudoers/defaults.c:228 plugins/sudoers/defaults.c:251 +#: plugins/sudoers/defaults.c:264 plugins/sudoers/defaults.c:277 +#: plugins/sudoers/defaults.c:290 plugins/sudoers/defaults.c:310 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "no value specified for `%s'" msgstr "neniu valoro specifita por '%s'" -#: plugins/sudoers/defaults.c:244 +#: plugins/sudoers/defaults.c:233 #, c-format msgid "values for `%s' must start with a '/'" msgstr "Valoroj por '%s' devas komenciĝi per '/'" -#: plugins/sudoers/defaults.c:306 +#: plugins/sudoers/defaults.c:301 #, c-format msgid "option `%s' does not take a value" msgstr "parametro '%s' ne povas havi valoron" -#: plugins/sudoers/env.c:276 plugins/sudoers/env.c:283 -#: plugins/sudoers/env.c:386 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:918 plugins/sudoers/policy.c:461 -#: plugins/sudoers/policy.c:470 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:708 plugins/sudoers/testsudoers.c:242 -#: plugins/sudoers/toke_util.c:174 +#: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 +#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:450 +#: plugins/sudoers/ldap.c:540 plugins/sudoers/ldap.c:1166 +#: plugins/sudoers/ldap.c:1388 plugins/sudoers/ldap.c:1704 +#: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:929 +#: plugins/sudoers/policy.c:511 plugins/sudoers/policy.c:520 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:815 +#: plugins/sudoers/testsudoers.c:236 plugins/sudoers/toke_util.c:162 #, c-format msgid "internal error, %s overflow" msgstr "interna eraro, superfluo en %s" -#: plugins/sudoers/env.c:359 +#: plugins/sudoers/env.c:377 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: medio tro granda" -#: plugins/sudoers/env.c:1054 +#: plugins/sudoers/env.c:1083 +msgid "unable to rebuild the environment" +msgstr "ne eblas rekonstrui la medion" + +#: plugins/sudoers/env.c:1157 #, 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/group_plugin.c:94 +#: plugins/sudoers/group_plugin.c:86 #, c-format msgid "%s must be owned by uid %d" msgstr "%s devas esti estrata de uid %d" -#: plugins/sudoers/group_plugin.c:98 +#: plugins/sudoers/group_plugin.c:90 #, c-format msgid "%s must only be writable by owner" msgstr "%s devas esti skribebla nur de estro" -#: plugins/sudoers/group_plugin.c:105 plugins/sudoers/sssd.c:251 +#: plugins/sudoers/group_plugin.c:98 plugins/sudoers/sssd.c:331 #, c-format msgid "unable to load %s: %s" msgstr "ne eblas ŝarĝi je %s: %s" -#: plugins/sudoers/group_plugin.c:110 +#: plugins/sudoers/group_plugin.c:104 #, c-format msgid "unable to find symbol \"group_plugin\" in %s" msgstr "ne eblas trovi simbolon \"group_plugin\" en %s" -#: plugins/sudoers/group_plugin.c:115 +#: plugins/sudoers/group_plugin.c:109 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: nekongrua grupa kromprogramo: ĉefa eldono %d, atendita %d" -#: plugins/sudoers/interfaces.c:116 +#: plugins/sudoers/interfaces.c:117 msgid "Local IP address and netmask pairs:\n" msgstr "Loka IP-adresa kaj retmaska paroj:\n" -#: plugins/sudoers/iolog.c:101 plugins/sudoers/iolog.c:119 -#: plugins/sudoers/timestamp.c:233 +#: plugins/sudoers/iolog.c:92 plugins/sudoers/iolog.c:110 +#: plugins/sudoers/timestamp.c:169 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s ekzistas sed ne dosierujo (0%o)" -#: plugins/sudoers/iolog.c:112 plugins/sudoers/iolog.c:133 -#: plugins/sudoers/iolog.c:140 plugins/sudoers/timestamp.c:227 -#: plugins/sudoers/timestamp.c:248 +#: plugins/sudoers/iolog.c:103 plugins/sudoers/iolog.c:124 +#: plugins/sudoers/iolog.c:131 plugins/sudoers/timestamp.c:163 +#: plugins/sudoers/timestamp.c:184 #, c-format msgid "unable to mkdir %s" msgstr "ne eblas mkdir-i: %s" -#: plugins/sudoers/iolog.c:209 plugins/sudoers/sudoers.c:764 -#: plugins/sudoers/sudoreplay.c:348 plugins/sudoers/sudoreplay.c:819 -#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/timestamp.c:357 -#: plugins/sudoers/visudo.c:832 plugins/sudoers/visudo_json.c:1025 -#: plugins/sudoers/visudo_json.c:1038 +#: plugins/sudoers/iolog.c:200 plugins/sudoers/sudoers.c:871 +#: plugins/sudoers/sudoreplay.c:300 plugins/sudoers/sudoreplay.c:769 +#: plugins/sudoers/sudoreplay.c:973 plugins/sudoers/timestamp.c:399 +#: plugins/sudoers/visudo.c:904 plugins/sudoers/visudo_json.c:1012 +#: plugins/sudoers/visudo_json.c:1025 #, c-format msgid "unable to open %s" msgstr "ne eblas malfermi: %s" -#: plugins/sudoers/iolog.c:250 plugins/sudoers/sudoers.c:768 -#: plugins/sudoers/sudoreplay.c:1123 +#: plugins/sudoers/iolog.c:241 plugins/sudoers/sudoers.c:875 +#: plugins/sudoers/sudoreplay.c:1084 #, c-format msgid "unable to read %s" msgstr "ne eblas legi %s" -#: plugins/sudoers/iolog.c:282 plugins/sudoers/sudoreplay.c:588 -#: plugins/sudoers/timestamp.c:186 plugins/sudoers/timestamp.c:189 +#: plugins/sudoers/iolog.c:277 plugins/sudoers/sudoreplay.c:550 +#: plugins/sudoers/timestamp.c:298 plugins/sudoers/timestamp.c:301 #, c-format msgid "unable to write to %s" msgstr "ne eblas skribi al %s" -#: plugins/sudoers/iolog.c:347 plugins/sudoers/iolog.c:545 +#: plugins/sudoers/iolog.c:342 plugins/sudoers/iolog.c:540 #, c-format msgid "unable to create %s" msgstr "ne eblas krei: %s" -#: plugins/sudoers/ldap.c:406 +#: plugins/sudoers/iolog.c:723 +#, c-format +msgid "%s: internal error, file index %d not open" +msgstr "%s: interna eraro, dosiera indekso %d ne estas malferma" + +#: plugins/sudoers/ldap.c:428 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: pordo tro granda" -#: plugins/sudoers/ldap.c:431 -msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" -msgstr "sudo_ldap_conf_add_ports: eluzis spacon etendanta la bufron" - -#: plugins/sudoers/ldap.c:464 +#: plugins/sudoers/ldap.c:488 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "nekonata retadresa tipo de LDAP: %s" -#: plugins/sudoers/ldap.c:495 +#: plugins/sudoers/ldap.c:515 msgid "unable to mix ldap and ldaps URIs" msgstr "ne eblas miksi sekurajn kaj nesekurajn retadresojn de LDAP" -#: plugins/sudoers/ldap.c:499 plugins/sudoers/ldap.c:532 +#: plugins/sudoers/ldap.c:519 plugins/sudoers/ldap.c:555 msgid "starttls not supported when using ldaps" msgstr "starttls ne estas regata dum uzo de ldaps" -#: plugins/sudoers/ldap.c:517 -msgid "sudo_ldap_parse_uri: out of space building hostbuf" -msgstr "sudo_ldap_parse_uri: eluzis spacon muntanta la bufron" - -#: plugins/sudoers/ldap.c:599 +#: plugins/sudoers/ldap.c:626 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "ne eblas ekigi SSL-asertilon kaj ŝlosilan datumbazon: %s" -#: plugins/sudoers/ldap.c:602 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "TLS_CERT devas havi valoron en %s antaŭ ol SSL uzeblos" -#: plugins/sudoers/ldap.c:1093 +#: plugins/sudoers/ldap.c:1152 msgid "unable to get GMT time" msgstr "ne eblas atingi GMT-tempon" -#: plugins/sudoers/ldap.c:1099 +#: plugins/sudoers/ldap.c:1158 msgid "unable to format timestamp" msgstr "ne eblas aranĝi tempo-indikilon" -#: plugins/sudoers/ldap.c:1107 -msgid "unable to build time filter" -msgstr "ne eblas munti tempan filtrilon" - -#: plugins/sudoers/ldap.c:1326 -msgid "sudo_ldap_build_pass1 allocation mismatch" -msgstr "sudo_ldap_build_pass1: genra malkongruaĵo" - -#: plugins/sudoers/ldap.c:1469 +#: plugins/sudoers/ldap.c:1853 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:1963 +#: plugins/sudoers/ldap.c:2394 #, c-format msgid "" "\n" @@ -851,7 +992,7 @@ "\n" "LDAP-rolo: %s\n" -#: plugins/sudoers/ldap.c:1965 +#: plugins/sudoers/ldap.c:2396 #, c-format msgid "" "\n" @@ -860,108 +1001,108 @@ "\n" "LDAP-rolo: NEKONATA\n" -#: plugins/sudoers/ldap.c:2012 +#: plugins/sudoers/ldap.c:2443 #, c-format msgid " Order: %s\n" msgstr " Ordo: %s\n" -#: plugins/sudoers/ldap.c:2020 plugins/sudoers/parse.c:512 -#: plugins/sudoers/sssd.c:1297 +#: plugins/sudoers/ldap.c:2451 plugins/sudoers/parse.c:555 +#: plugins/sudoers/sssd.c:1429 #, c-format msgid " Commands:\n" msgstr " Komandoj:\n" -#: plugins/sudoers/ldap.c:2570 +#: plugins/sudoers/ldap.c:3015 #, c-format msgid "unable to initialize LDAP: %s" msgstr "ne eblas ekigi LDAP-on: %s" -#: plugins/sudoers/ldap.c:2612 +#: plugins/sudoers/ldap.c:3051 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:2845 +#: plugins/sudoers/ldap.c:3305 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "nevalida atributo de sudoOrdo: %s" -#: plugins/sudoers/linux_audit.c:57 +#: plugins/sudoers/linux_audit.c:52 msgid "unable to open audit system" msgstr "ne eblas malfermi revizian sistemon" -#: plugins/sudoers/linux_audit.c:94 +#: plugins/sudoers/linux_audit.c:93 msgid "unable to send audit message" msgstr "ne eblas sendi revizian mesaĝon" -#: plugins/sudoers/logging.c:134 +#: plugins/sudoers/logging.c:106 #, c-format msgid "%8s : %s" msgstr "%8s: %s" -#: plugins/sudoers/logging.c:162 +#: plugins/sudoers/logging.c:134 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s: (komando ne trovita) %s" -#: plugins/sudoers/logging.c:187 +#: plugins/sudoers/logging.c:159 #, c-format msgid "unable to open log file: %s: %s" msgstr "ne eblas malfermi protokolon: %s: %s" -#: plugins/sudoers/logging.c:190 +#: plugins/sudoers/logging.c:162 #, c-format msgid "unable to lock log file: %s: %s" msgstr "ne eblas ŝlosi protokolon: %s: %s" -#: plugins/sudoers/logging.c:242 +#: plugins/sudoers/logging.c:211 msgid "No user or host" msgstr "Neniu uzanto aŭ gastiganto" -#: plugins/sudoers/logging.c:244 +#: plugins/sudoers/logging.c:213 msgid "validation failure" msgstr "validiga malsukceso" -#: plugins/sudoers/logging.c:251 +#: plugins/sudoers/logging.c:220 msgid "user NOT in sudoers" msgstr "uzanto NE estas en sudoers" -#: plugins/sudoers/logging.c:253 +#: plugins/sudoers/logging.c:222 msgid "user NOT authorized on host" msgstr "uzanto NE permesata en gastiganto" -#: plugins/sudoers/logging.c:255 +#: plugins/sudoers/logging.c:224 msgid "command not allowed" msgstr "komando ne permesata" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:259 #, 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:262 #, 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:266 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Bedaŭre uzanto %s ne rajtas plenumigi sudo-on en %s.\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:269 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "Bedaŭre uzanto %s ne rajtas plenumigi '%s%s%s'-on kiel %s%s%s en %s.\n" -#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:407 -#: plugins/sudoers/sudoers.c:409 plugins/sudoers/sudoers.c:411 -#: plugins/sudoers/sudoers.c:413 plugins/sudoers/sudoers.c:1128 -#: plugins/sudoers/sudoers.c:1129 +#: plugins/sudoers/logging.c:306 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1222 +#: plugins/sudoers/sudoers.c:1224 #, c-format msgid "%s: command not found" msgstr "%s: komando ne trovita" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:403 +#: plugins/sudoers/logging.c:308 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring `%s' found in '.'\n" @@ -970,71 +1111,71 @@ "Ignoranta '%s'-on trovita en '.'\n" "Uzu 'sudo ./%s'-on se tio estas la '%s', kiun vi volas plenumigi." -#: plugins/sudoers/logging.c:353 +#: plugins/sudoers/logging.c:325 msgid "authentication failure" msgstr "aŭtentiga malsukceso" -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:351 msgid "a password is required" msgstr "pasvorto estas bezonata" -#: plugins/sudoers/logging.c:446 plugins/sudoers/logging.c:501 +#: plugins/sudoers/logging.c:422 plugins/sudoers/logging.c:484 #, 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:584 +#: plugins/sudoers/logging.c:572 msgid "unable to fork" msgstr "ne eblas forki" -#: plugins/sudoers/logging.c:592 plugins/sudoers/logging.c:648 +#: plugins/sudoers/logging.c:580 plugins/sudoers/logging.c:640 #, c-format msgid "unable to fork: %m" msgstr "ne eblas forki: %m" -#: plugins/sudoers/logging.c:638 +#: plugins/sudoers/logging.c:630 #, c-format msgid "unable to open pipe: %m" msgstr "ne eblas malfermi tubon: %m" -#: plugins/sudoers/logging.c:663 +#: plugins/sudoers/logging.c:655 #, c-format msgid "unable to dup stdin: %m" msgstr "ne eblas kopii enigon: %m" -#: plugins/sudoers/logging.c:698 +#: plugins/sudoers/logging.c:693 #, c-format msgid "unable to execute %s: %m" msgstr "ne eblas plenumigi %s-on: %m" -#: plugins/sudoers/match.c:627 +#: plugins/sudoers/match.c:616 #, c-format msgid "unsupported digest type %d for %s" msgstr "nekonata resuma tipo %d por %s" -#: plugins/sudoers/match.c:656 +#: plugins/sudoers/match.c:657 #, c-format msgid "%s: read error" msgstr "%s: lega eraro" -#: plugins/sudoers/match.c:670 +#: plugins/sudoers/match.c:692 #, c-format 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:123 +#: plugins/sudoers/parse.c:114 #, c-format msgid "parse error in %s near line %d" msgstr "analiza eraro en %s proksime al linio %d" -#: plugins/sudoers/parse.c:126 +#: plugins/sudoers/parse.c:117 #, c-format msgid "parse error in %s" msgstr "analiza eraro en %s" -#: plugins/sudoers/parse.c:459 +#: plugins/sudoers/parse.c:502 #, c-format msgid "" "\n" @@ -1043,425 +1184,454 @@ "\n" "Ero en sudoers:\n" -#: plugins/sudoers/parse.c:460 +#: plugins/sudoers/parse.c:503 #, c-format msgid " RunAsUsers: " msgstr " RunAsUsers: " -#: plugins/sudoers/parse.c:474 +#: plugins/sudoers/parse.c:517 #, c-format msgid " RunAsGroups: " msgstr " RunAsGroups: " -#: plugins/sudoers/parse.c:483 +#: plugins/sudoers/parse.c:526 #, c-format msgid " Options: " msgstr " Elektoj: " -#: plugins/sudoers/policy.c:109 plugins/sudoers/policy.c:118 -#: plugins/sudoers/policy.c:127 plugins/sudoers/policy.c:151 -#: plugins/sudoers/policy.c:263 plugins/sudoers/policy.c:283 -#: plugins/sudoers/policy.c:292 plugins/sudoers/policy.c:322 -#: plugins/sudoers/policy.c:332 plugins/sudoers/policy.c:341 -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" +#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:253 +msgid "unable to parse network address list" +msgstr "ne eblas trakti reto-adresan liston" -#: plugins/sudoers/policy.c:569 plugins/sudoers/visudo.c:773 +#: plugins/sudoers/policy.c:659 plugins/sudoers/visudo.c:841 #, c-format msgid "unable to execute %s" msgstr "ne eblas plenumigi: %s" -#: plugins/sudoers/policy.c:701 +#: plugins/sudoers/policy.c:792 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Eldono %s de la konduta kromprogramo\n" -#: plugins/sudoers/policy.c:703 +#: plugins/sudoers/policy.c:794 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Eldono %d de la gramatikilo de sudoers\n" -#: plugins/sudoers/policy.c:707 +#: plugins/sudoers/policy.c:798 #, c-format msgid "" "\n" "Sudoers path: %s\n" msgstr "" "\n" -"Pado de sudoers: %s\n" +"Vojo de sudoers: %s\n" -#: plugins/sudoers/policy.c:710 +#: plugins/sudoers/policy.c:801 #, c-format msgid "nsswitch path: %s\n" msgstr "vojo de nsswitch: %s\n" -#: plugins/sudoers/policy.c:712 +#: plugins/sudoers/policy.c:803 #, c-format msgid "ldap.conf path: %s\n" msgstr "vojo de ldap.conf: %s\n" -#: plugins/sudoers/policy.c:713 +#: plugins/sudoers/policy.c:804 #, c-format msgid "ldap.secret path: %s\n" msgstr "vojo de ldap.secret: %s\n" -#: plugins/sudoers/pwutil.c:149 +#: plugins/sudoers/policy.c:837 +#, 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:158 plugins/sudoers/pwutil.c:176 +#, c-format +msgid "unable to cache uid %u, out of memory" +msgstr "ne eblas konservi uid-on %u, memoro plenplena" + +#: plugins/sudoers/pwutil.c:170 #, c-format msgid "unable to cache uid %u, already exists" msgstr "ne eblas konservi uid-on %u, jam ekzistas" -#: plugins/sudoers/pwutil.c:194 +#: plugins/sudoers/pwutil.c:222 plugins/sudoers/pwutil.c:239 +#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:334 +#, c-format +msgid "unable to cache user %s, out of memory" +msgstr "ne eblas konservi uzanton %s, memoro plenplena" + +#: plugins/sudoers/pwutil.c:234 #, c-format msgid "unable to cache user %s, already exists" msgstr "ne eblas konservi uzanton %s, jam ekzistas" -#: plugins/sudoers/pwutil.c:400 +#: plugins/sudoers/pwutil.c:474 plugins/sudoers/pwutil.c:492 +#, c-format +msgid "unable to cache gid %u, out of memory" +msgstr "ne eblas konservi gid-on %u, memoro plenplena" + +#: plugins/sudoers/pwutil.c:486 #, c-format msgid "unable to cache gid %u, already exists" msgstr "ne eblas konservi gid-on %u, jam ekzistas" -#: plugins/sudoers/pwutil.c:439 +#: plugins/sudoers/pwutil.c:532 plugins/sudoers/pwutil.c:549 +#: plugins/sudoers/pwutil.c:584 plugins/sudoers/pwutil.c:626 +#, c-format +msgid "unable to cache group %s, out of memory" +msgstr "ne eblas konservi grupon %s, memoro plenplena" + +#: plugins/sudoers/pwutil.c:544 #, c-format msgid "unable to cache group %s, already exists" msgstr "ne eblas konservi grupon %s, jam ekzistas" -#: plugins/sudoers/pwutil.c:605 plugins/sudoers/pwutil.c:631 +#: plugins/sudoers/pwutil.c:739 plugins/sudoers/pwutil.c:783 #, 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:627 +#: plugins/sudoers/pwutil.c:745 plugins/sudoers/pwutil.c:788 +#, c-format +msgid "unable to cache group list for %s, out of memory" +msgstr "ne eblas konservi grupan liston por %s, memoro plenplena" + +#: plugins/sudoers/pwutil.c:777 #, c-format msgid "unable to parse groups for %s" msgstr "ne eblas trakti grupon en %s" -#: plugins/sudoers/set_perms.c:122 plugins/sudoers/set_perms.c:447 -#: plugins/sudoers/set_perms.c:850 plugins/sudoers/set_perms.c:1147 -#: plugins/sudoers/set_perms.c:1439 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 +#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 +#: plugins/sudoers/set_perms.c:1430 msgid "perm stack overflow" msgstr "permeso-staka superfluo" -#: plugins/sudoers/set_perms.c:130 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:1076 -#: plugins/sudoers/set_perms.c:1155 plugins/sudoers/set_perms.c:1372 -#: plugins/sudoers/set_perms.c:1447 plugins/sudoers/set_perms.c:1536 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 +#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 +#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 +#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 +#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 msgid "perm stack underflow" msgstr "permeso-staka subfluo" -#: plugins/sudoers/set_perms.c:189 plugins/sudoers/set_perms.c:502 -#: plugins/sudoers/set_perms.c:1206 plugins/sudoers/set_perms.c:1479 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:493 +#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 msgid "unable to change to root gid" msgstr "ne eblas ŝanĝi al radika gid" -#: plugins/sudoers/set_perms.c:278 plugins/sudoers/set_perms.c:599 -#: plugins/sudoers/set_perms.c:987 plugins/sudoers/set_perms.c:1283 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:590 +#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 msgid "unable to change to runas gid" msgstr "ne eblas ŝanĝi al plenumigkiela gid" -#: plugins/sudoers/set_perms.c:283 plugins/sudoers/set_perms.c:604 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:595 +#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 msgid "unable to set runas group vector" msgstr "ne eblas elekti vektoron de plenumigkiela grupo" -#: plugins/sudoers/set_perms.c:294 plugins/sudoers/set_perms.c:615 -#: plugins/sudoers/set_perms.c:1001 plugins/sudoers/set_perms.c:1297 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:606 +#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 msgid "unable to change to runas uid" msgstr "ne eblas ŝanĝi al plenumigkiela uid" -#: plugins/sudoers/set_perms.c:312 plugins/sudoers/set_perms.c:633 -#: plugins/sudoers/set_perms.c:1017 plugins/sudoers/set_perms.c:1313 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:624 +#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 msgid "unable to change to sudoers gid" msgstr "ne eblas ŝanĝi al gid de sudo-redaktantoj" -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 msgid "too many processes" msgstr "tro da procezoj" -#: plugins/sudoers/solaris_audit.c:47 +#: plugins/sudoers/solaris_audit.c:51 msgid "unable to get current working directory" msgstr "ne eblas scii la nunan labor-dosierujon" -#: plugins/sudoers/solaris_audit.c:55 +#: plugins/sudoers/solaris_audit.c:59 #, c-format msgid "truncated audit path user_cmnd: %s" msgstr "tranĉita ekzamen-vojo user_cmnd: %s" -#: plugins/sudoers/solaris_audit.c:62 +#: plugins/sudoers/solaris_audit.c:66 #, c-format msgid "truncated audit path argv[0]: %s" msgstr "tranĉita ekzamen-vojo argv[0]: %s" -#: plugins/sudoers/solaris_audit.c:111 +#: plugins/sudoers/solaris_audit.c:115 msgid "audit_failure message too long" msgstr "mesaĝo audit_failure (ekzamena fiasko) tro longas" -#: plugins/sudoers/sssd.c:252 +#: plugins/sudoers/sssd.c:333 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:259 plugins/sudoers/sssd.c:267 -#: plugins/sudoers/sssd.c:275 plugins/sudoers/sssd.c:283 -#: plugins/sudoers/sssd.c:291 +#: plugins/sudoers/sssd.c:341 plugins/sudoers/sssd.c:350 +#: plugins/sudoers/sssd.c:359 plugins/sudoers/sssd.c:368 +#: plugins/sudoers/sssd.c:377 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "ne eblas trovi simbolon \"%s\" en %s" -#: plugins/sudoers/sudo_nss.c:296 +#: plugins/sudoers/sudo_nss.c:290 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Kongruantaj eroj de Defaults: %s en %s:\n" -#: plugins/sudoers/sudo_nss.c:309 +#: plugins/sudoers/sudo_nss.c:308 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Plenumigkiela komando-specifaj aŭtomataĵoj por %s:\n" -#: plugins/sudoers/sudo_nss.c:322 +#: plugins/sudoers/sudo_nss.c:326 #, 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/sudo_nss.c:331 +#: plugins/sudoers/sudo_nss.c:339 #, 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" -#: plugins/sudoers/sudoers.c:160 plugins/sudoers/sudoers.c:201 -#: plugins/sudoers/sudoers.c:726 +#: plugins/sudoers/sudoers.c:172 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/visudo.c:223 plugins/sudoers/visudo.c:567 +msgid "unable to initialize sudoers default values" +msgstr "%s: ne eblas ekigi aŭtomatajn valorojn de sudoers" + +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:239 +#: plugins/sudoers/sudoers.c:833 msgid "problem with defaults entries" msgstr "problemoj kun aŭtomataj eroj" -#: plugins/sudoers/sudoers.c:167 +#: plugins/sudoers/sudoers.c:205 msgid "no valid sudoers sources found, quitting" msgstr "ne validaj fontotekstoj de sudoers trovita, ĉesiganta" -#: plugins/sudoers/sudoers.c:233 +#: plugins/sudoers/sudoers.c:275 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers specifas, ke ĉefuzanto ne rajtas sudo-i" -#: plugins/sudoers/sudoers.c:278 +#: plugins/sudoers/sudoers.c:332 msgid "you are not permitted to use the -C option" msgstr "vi ne rajtas uzi la parametron -C" -#: plugins/sudoers/sudoers.c:336 +#: plugins/sudoers/sudoers.c:396 #, c-format msgid "timestamp owner (%s): No such user" msgstr "tempo-indikila posedanto (%s): neniu tia uzanto" -#: plugins/sudoers/sudoers.c:350 +#: plugins/sudoers/sudoers.c:410 msgid "no tty" msgstr "neniu tty" -#: plugins/sudoers/sudoers.c:351 +#: plugins/sudoers/sudoers.c:411 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:402 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "komando en nuna dosierujo" -#: plugins/sudoers/sudoers.c:422 +#: plugins/sudoers/sudoers.c:486 msgid "sorry, you are not allowed to preserve the environment" msgstr "bedaŭre vi ne rajtas konservi la medion" -#: plugins/sudoers/sudoers.c:674 +#: plugins/sudoers/sudoers.c:778 msgid "command too long" msgstr "komando tro longas" -#: plugins/sudoers/sudoers.c:779 plugins/sudoers/visudo.c:333 -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/sudoers.c:886 plugins/sudoers/visudo.c:427 +#: plugins/sudoers/visudo.c:667 #, c-format msgid "unable to stat %s" msgstr "ne eblas stat-i: %s" -#: plugins/sudoers/sudoers.c:783 +#: plugins/sudoers/sudoers.c:890 #, c-format msgid "%s is not a regular file" msgstr "%s ne estas normala dosiero" -#: plugins/sudoers/sudoers.c:787 plugins/sudoers/timestamp.c:289 toke.l:945 +#: plugins/sudoers/sudoers.c:894 plugins/sudoers/timestamp.c:225 toke.l:947 #, 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:791 toke.l:952 +#: plugins/sudoers/sudoers.c:898 toke.l:954 #, c-format msgid "%s is world writable" msgstr "%s estas skribebla de ĉiuj" -#: plugins/sudoers/sudoers.c:795 toke.l:957 +#: plugins/sudoers/sudoers.c:902 toke.l:959 #, 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:826 +#: plugins/sudoers/sudoers.c:933 #, c-format msgid "only root can use `-c %s'" msgstr "nur ĉefuzanto rajtas uzi '-c %s'" -#: plugins/sudoers/sudoers.c:845 +#: plugins/sudoers/sudoers.c:952 #, c-format msgid "unknown login class: %s" msgstr "nekonata ensaluta klaso: %s" -#: plugins/sudoers/sudoers.c:889 plugins/sudoers/sudoers.c:904 +#: plugins/sudoers/sudoers.c:1031 plugins/sudoers/sudoers.c:1059 #, c-format msgid "unable to resolve host %s" msgstr "ne eblas trovi gastiganton %s" -#: plugins/sudoers/sudoers.c:986 plugins/sudoers/testsudoers.c:388 +#: plugins/sudoers/sudoers.c:1126 plugins/sudoers/testsudoers.c:385 #, c-format msgid "unknown group: %s" msgstr "nekonata grupo: %s" -#: plugins/sudoers/sudoreplay.c:280 +#: plugins/sudoers/sudoreplay.c:232 #, c-format msgid "invalid filter option: %s" msgstr "nevalida filtrila elekto: %s" -#: plugins/sudoers/sudoreplay.c:293 +#: plugins/sudoers/sudoreplay.c:245 #, c-format msgid "invalid max wait: %s" msgstr "nevalida maksimuma atendo: %s" -#: plugins/sudoers/sudoreplay.c:299 +#: plugins/sudoers/sudoreplay.c:251 #, c-format msgid "invalid speed factor: %s" msgstr "nevalida rapida faktoro: %s" -#: plugins/sudoers/sudoreplay.c:302 plugins/sudoers/visudo.c:190 +#: plugins/sudoers/sudoreplay.c:254 plugins/sudoers/visudo.c:180 #, c-format msgid "%s version %s\n" msgstr "%s eldono %s\n" -#: plugins/sudoers/sudoreplay.c:334 +#: plugins/sudoers/sudoreplay.c:286 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s tempo-registrado: %s" -#: plugins/sudoers/sudoreplay.c:340 +#: plugins/sudoers/sudoreplay.c:292 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/tempo-registrado: %s" -#: plugins/sudoers/sudoreplay.c:356 +#: plugins/sudoers/sudoreplay.c:308 #, c-format msgid "Replaying sudo session: %s\n" msgstr "Refaranta sudo-seancon: %s\n" -#: plugins/sudoers/sudoreplay.c:362 +#: plugins/sudoers/sudoreplay.c:314 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Averto: via terminalo estas tro malgranda por konvene reskribi la protokolon.\n" -#: plugins/sudoers/sudoreplay.c:363 +#: plugins/sudoers/sudoreplay.c:315 #, 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:418 +#: plugins/sudoers/sudoreplay.c:368 msgid "unable to set tty to raw mode" msgstr "ne eblas elekti tty-on en nudan reĝimon" -#: plugins/sudoers/sudoreplay.c:449 +#: plugins/sudoers/sudoreplay.c:401 #, c-format msgid "invalid timing file line: %s" msgstr "nevalida linio en la tempo-registran dosieron: %s" -#: plugins/sudoers/sudoreplay.c:655 plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:611 plugins/sudoers/sudoreplay.c:636 #, c-format msgid "ambiguous expression \"%s\"" msgstr "ambigua esprimo \"%s\"" -#: plugins/sudoers/sudoreplay.c:702 +#: plugins/sudoers/sudoreplay.c:658 msgid "unmatched ')' in expression" msgstr "esprimo kun ')' sen samnivela '('" -#: plugins/sudoers/sudoreplay.c:706 +#: plugins/sudoers/sudoreplay.c:662 #, c-format msgid "unknown search term \"%s\"" msgstr "nekonata serĉaĵo \"%s\"" -#: plugins/sudoers/sudoreplay.c:720 +#: plugins/sudoers/sudoreplay.c:677 #, c-format msgid "%s requires an argument" msgstr "%s bezonas parametron" -#: plugins/sudoers/sudoreplay.c:724 plugins/sudoers/sudoreplay.c:1096 +#: plugins/sudoers/sudoreplay.c:680 plugins/sudoers/sudoreplay.c:1060 #, c-format msgid "invalid regular expression: %s" msgstr "nevalida regulesprimo: %s" -#: plugins/sudoers/sudoreplay.c:730 +#: plugins/sudoers/sudoreplay.c:684 #, c-format msgid "could not parse date \"%s\"" msgstr "ne eblis analizi daton \"%s\"" -#: plugins/sudoers/sudoreplay.c:739 +#: plugins/sudoers/sudoreplay.c:693 msgid "unmatched '(' in expression" msgstr "esprimo kun '(' sen samnivela ')'" -#: plugins/sudoers/sudoreplay.c:741 +#: plugins/sudoers/sudoreplay.c:695 msgid "illegal trailing \"or\"" msgstr "nevalida posta \"or\"" -#: plugins/sudoers/sudoreplay.c:743 +#: plugins/sudoers/sudoreplay.c:697 msgid "illegal trailing \"!\"" msgstr "nevalida posta \"!\"" -#: plugins/sudoers/sudoreplay.c:796 +#: plugins/sudoers/sudoreplay.c:746 #, c-format msgid "unknown search type %d" msgstr "nekonata serĉtipo %d" -#: plugins/sudoers/sudoreplay.c:833 +#: plugins/sudoers/sudoreplay.c:784 #, c-format msgid "%s: invalid log file" msgstr "%s: nevalida protokolo-dosiero" -#: plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:802 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: mankas temp-indikila kampo" -#: plugins/sudoers/sudoreplay.c:858 +#: plugins/sudoers/sudoreplay.c:809 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: temp-indikilo %s: %s" -#: plugins/sudoers/sudoreplay.c:865 +#: plugins/sudoers/sudoreplay.c:816 #, c-format msgid "%s: user field is missing" msgstr "%s: mankas kampo de uzanto" -#: plugins/sudoers/sudoreplay.c:873 +#: plugins/sudoers/sudoreplay.c:825 #, c-format msgid "%s: runas user field is missing" msgstr "%s: mankas kampo de runa uzanto" -#: plugins/sudoers/sudoreplay.c:881 +#: plugins/sudoers/sudoreplay.c:834 #, c-format msgid "%s: runas group field is missing" msgstr "%s: mankas kampo de runa grupo" -#: plugins/sudoers/sudoreplay.c:1236 +#: plugins/sudoers/sudoreplay.c:1197 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "uzado: %s [-h] [-d dosierujo] [-m nombro] [-s nombro] identigilo\n" -#: plugins/sudoers/sudoreplay.c:1239 +#: plugins/sudoers/sudoreplay.c:1200 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "uzado: %s [-h] [-d dosierujo] -l [serĉaĵo]\n" -#: plugins/sudoers/sudoreplay.c:1248 +#: plugins/sudoers/sudoreplay.c:1209 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1470,7 +1640,7 @@ "%s - refari sudo-seancajn protokolojn\n" "\n" -#: plugins/sudoers/sudoreplay.c:1250 +#: plugins/sudoers/sudoreplay.c:1211 msgid "" "\n" "Options:\n" @@ -1492,11 +1662,11 @@ " -s, --speed=nombro rapidigi aŭ malrapidigi eligon\n" " -V, --version eligi eldonan informon kaj eliri" -#: plugins/sudoers/testsudoers.c:327 +#: plugins/sudoers/testsudoers.c:324 msgid "\thost unmatched" msgstr "\thost sen egalo" -#: plugins/sudoers/testsudoers.c:330 +#: plugins/sudoers/testsudoers.c:327 msgid "" "\n" "Command allowed" @@ -1504,7 +1674,7 @@ "\n" "Komando permesata" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command denied" @@ -1512,7 +1682,7 @@ "\n" "Komando rifuzata" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command unmatched" @@ -1520,114 +1690,129 @@ "\n" "Komando sen egalo" -#: plugins/sudoers/timestamp.c:197 -#, c-format -msgid "unable to truncate time stamp file to %lld bytes" -msgstr "ne eblas mallongigi tempo-indikilan dosieron ĝis %lld bajtoj" - -#: plugins/sudoers/timestamp.c:297 +#: plugins/sudoers/timestamp.c:233 #, c-format msgid "%s is group writable" msgstr "%s estas skribebla de la grupo" -#: plugins/sudoers/timestamp.c:318 +#: plugins/sudoers/timestamp.c:309 #, c-format -msgid "timestamp path too long: %s/%s" -msgstr "tempo-indikila vojo tro longas: %s/%s" +msgid "unable to truncate time stamp file to %lld bytes" +msgstr "ne eblas mallongigi tempo-indikilan dosieron ĝis %lld bajtoj" + +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:488 plugins/sudoers/visudo.c:494 +msgid "unable to read the clock" +msgstr "ne eblas legi la horloĝon" -#: plugins/sudoers/timestamp.c:498 +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "ignoranta tempo-indikilon el la estonteco" -#: plugins/sudoers/timestamp.c:510 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "tempo-indikilo tro estonte: %20.20s" -#: plugins/sudoers/timestamp.c:613 plugins/sudoers/timestamp.c:634 +#: plugins/sudoers/timestamp.c:863 +#, c-format +msgid "unable to lock time stamp file %s" +msgstr "ne eblas ŝlosi tempo-indikilan dosieron %s" + +#: plugins/sudoers/timestamp.c:906 plugins/sudoers/timestamp.c:926 #, c-format msgid "lecture status path too long: %s/%s" msgstr "vojo de prelega stato tro longas: %s/%s" -#: plugins/sudoers/visudo.c:192 +#: plugins/sudoers/visudo.c:182 #, c-format msgid "%s grammar version %d\n" msgstr "%s gramatika eldono %d\n" -#: plugins/sudoers/visudo.c:263 plugins/sudoers/visudo.c:552 +#: plugins/sudoers/visudo.c:254 plugins/sudoers/visudo.c:619 #, c-format msgid "press return to edit %s: " msgstr "premu enen-klavon por redakti %s-on: " -#: plugins/sudoers/visudo.c:349 plugins/sudoers/visudo.c:355 +#: plugins/sudoers/visudo.c:320 +#, c-format +msgid "specified editor (%s) doesn't exist" +msgstr "specifita tekstoredaktilo (%s) ne ekzistas" + +#: plugins/sudoers/visudo.c:338 +#, c-format +msgid "no editor found (editor path = %s)" +msgstr "neniu tekstoredaktilo trovita (vojo = %s)" + +#: plugins/sudoers/visudo.c:447 plugins/sudoers/visudo.c:455 msgid "write error" msgstr "skriba eraro" -#: plugins/sudoers/visudo.c:439 +#: plugins/sudoers/visudo.c:501 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "ne eblas stat-i provizoran dosieron (%s), %s neŝanĝita" -#: plugins/sudoers/visudo.c:444 +#: plugins/sudoers/visudo.c:508 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "nul-longa provizora dosiero (%s), %s neŝanĝita" -#: plugins/sudoers/visudo.c:450 +#: plugins/sudoers/visudo.c:514 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "redaktilo (%s) malsukcesis, %s neŝanĝita" -#: plugins/sudoers/visudo.c:472 +#: plugins/sudoers/visudo.c:536 #, c-format msgid "%s unchanged" msgstr "%s neŝanĝita" -#: plugins/sudoers/visudo.c:497 +#: plugins/sudoers/visudo.c:562 #, 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:507 +#: plugins/sudoers/visudo.c:573 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "ne eblas analizi provizoran dosieron (%s), nekonata eraro" -#: plugins/sudoers/visudo.c:543 +#: plugins/sudoers/visudo.c:610 #, c-format msgid "internal error, unable to find %s in list!" msgstr "interna eraro, ne eblas trovi '%s'-on en listo!" -#: plugins/sudoers/visudo.c:601 plugins/sudoers/visudo.c:610 +#: plugins/sudoers/visudo.c:669 plugins/sudoers/visudo.c:678 #, 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:605 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:673 plugins/sudoers/visudo.c:683 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "ne eblas ŝanĝi reĝimon de %s al 0%o" -#: plugins/sudoers/visudo.c:632 +#: plugins/sudoers/visudo.c:700 #, 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:646 +#: plugins/sudoers/visudo.c:714 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "komando malsukcesis: '%s %s %s', %s neŝanĝita" -#: plugins/sudoers/visudo.c:656 +#: plugins/sudoers/visudo.c:724 #, c-format msgid "error renaming %s, %s unchanged" msgstr "eraro dum alinomi %s-on; %s neŝanĝita" -#: plugins/sudoers/visudo.c:718 +#: plugins/sudoers/visudo.c:786 msgid "What now? " msgstr "Kion nun? " -#: plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:800 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1639,87 +1824,72 @@ " 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:780 +#: plugins/sudoers/visudo.c:848 #, c-format msgid "unable to run %s" msgstr "ne eblas plenumigi: %s" -#: plugins/sudoers/visudo.c:806 +#: plugins/sudoers/visudo.c:878 #, 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:813 +#: plugins/sudoers/visudo.c:885 #, 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:838 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:910 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "failed to parse %s file, unknown error" msgstr "malsukcesis analizi dosieron %s, nekonata eraro" -#: plugins/sudoers/visudo.c:854 plugins/sudoers/visudo_json.c:1054 +#: plugins/sudoers/visudo.c:926 plugins/sudoers/visudo_json.c:1041 #, c-format msgid "parse error in %s near line %d\n" msgstr "analiza eraro en %s proksime al linio %d\n" -#: plugins/sudoers/visudo.c:857 plugins/sudoers/visudo_json.c:1057 +#: plugins/sudoers/visudo.c:929 plugins/sudoers/visudo_json.c:1044 #, c-format msgid "parse error in %s\n" msgstr "analiza eraro en %s\n" -#: plugins/sudoers/visudo.c:865 plugins/sudoers/visudo.c:872 +#: plugins/sudoers/visudo.c:937 plugins/sudoers/visudo.c:944 #, c-format msgid "%s: parsed OK\n" msgstr "%s: analizita senerare\n" -#: plugins/sudoers/visudo.c:918 +#: plugins/sudoers/visudo.c:991 #, c-format msgid "%s busy, try again later" msgstr "%s okupata, reprovu pli malfrue" -#: plugins/sudoers/visudo.c:962 -#, c-format -msgid "specified editor (%s) doesn't exist" -msgstr "specifita tekstoredaktilo (%s) ne ekzistas" - -#: plugins/sudoers/visudo.c:985 -#, c-format -msgid "unable to stat editor (%s)" -msgstr "ne eblas stat-i tekstoredaktilon (%s)" - -#: plugins/sudoers/visudo.c:1033 -#, c-format -msgid "no editor found (editor path = %s)" -msgstr "neniu tekstoredaktilo trovita (vojo = %s)" - -#: plugins/sudoers/visudo.c:1136 +#: plugins/sudoers/visudo.c:1087 #, c-format msgid "Error: cycle in %s `%s'" msgstr "Eraro: ciklo en %s '%s'" -#: plugins/sudoers/visudo.c:1137 +#: plugins/sudoers/visudo.c:1088 #, c-format msgid "Warning: cycle in %s `%s'" msgstr "Averto: ciklo en %s '%s'" -#: plugins/sudoers/visudo.c:1141 +#: plugins/sudoers/visudo.c:1092 #, c-format msgid "Error: %s `%s' referenced but not defined" msgstr "Eraro: %s '%s' estas referencita sed ne difinita" -#: plugins/sudoers/visudo.c:1142 +#: plugins/sudoers/visudo.c:1093 #, c-format msgid "Warning: %s `%s' referenced but not defined" msgstr "Averto: %s '%s' estas referencita sed ne difinita" -#: plugins/sudoers/visudo.c:1281 +#: plugins/sudoers/visudo.c:1236 #, c-format msgid "Warning: unused %s `%s'" msgstr "Averto: neuzata %s '%s'" -#: plugins/sudoers/visudo.c:1394 +#: plugins/sudoers/visudo.c:1349 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -1728,7 +1898,7 @@ "%s - sekure redakti la dosieron sudoers\n" "\n" -#: plugins/sudoers/visudo.c:1396 +#: plugins/sudoers/visudo.c:1351 msgid "" "\n" "Options:\n" @@ -1750,15 +1920,30 @@ " -V, --version montri eldonon kaj eliri\n" " -x, --export=eligdosiero skribi sudoers laŭ JSON-formo al eligdosiero" -#: plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo_json.c:1018 #, c-format msgid "%s: input and output files must be different" msgstr "%s: eliga kaj eniga dosieroj devas esti malsamaj" -#: toke.l:915 +#: toke.l:918 msgid "too many levels of includes" msgstr "tro da niveloj de inkluzivaĵoj" +#~ msgid "timestamp path too long: %s/%s" +#~ msgstr "tempo-indikila vojo tro longas: %s/%s" + +#~ msgid "unable to stat editor (%s)" +#~ msgstr "ne eblas stat-i tekstoredaktilon (%s)" + +#~ msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" +#~ msgstr "sudo_ldap_conf_add_ports: eluzis spacon etendanta la bufron" + +#~ msgid "sudo_ldap_parse_uri: out of space building hostbuf" +#~ msgstr "sudo_ldap_parse_uri: eluzis spacon muntanta la bufron" + +#~ msgid "sudo_ldap_build_pass1 allocation mismatch" +#~ msgstr "sudo_ldap_build_pass1: genra malkongruaĵo" + #~ msgid "internal error: insufficient space for log line" #~ msgstr "interna eraro: nesufiĉa spaco por protokola linio" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/plugins/sudoers/po/fi.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/plugins/sudoers/po/fi.mo differ diff -Nru sudo-1.8.12/plugins/sudoers/po/fi.po sudo-1.8.16/plugins/sudoers/po/fi.po --- sudo-1.8.12/plugins/sudoers/po/fi.po 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/po/fi.po 2016-03-17 16:13:10.000000000 +0000 @@ -1,14 +1,14 @@ # Finnish messages for sudoers. # This file is put in the public domain. # This file is distributed under the same license as the sudo package. -# Jorma Karvonen , 2011-2014. +# Jorma Karvonen , 2011-2015. # msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.12b3\n" +"Project-Id-Version: sudoers 1.8.15rc3\n" "Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-11-20 13:33-0700\n" -"PO-Revision-Date: 2014-11-24 08:54+0200\n" +"POT-Creation-Date: 2015-10-24 06:26-0600\n" +"PO-Revision-Date: 2015-11-21 10:56+0200\n" "Last-Translator: Jorma Karvonen \n" "Language-Team: Finnish \n" "Language: fi\n" @@ -41,46 +41,172 @@ msgid "Sorry, try again." msgstr "Yritä uudelleen." -#: gram.y:379 +#: gram.y:183 gram.y:201 gram.y:207 gram.y:213 gram.y:219 gram.y:225 +#: gram.y:241 gram.y:248 gram.y:255 gram.y:262 gram.y:269 gram.y:285 +#: gram.y:308 gram.y:315 gram.y:322 gram.y:329 gram.y:336 gram.y:391 +#: gram.y:399 gram.y:409 gram.y:439 gram.y:446 gram.y:453 gram.y:460 +#: gram.y:572 gram.y:579 gram.y:588 gram.y:597 gram.y:614 gram.y:670 +#: gram.y:677 gram.y:684 gram.y:692 gram.y:784 gram.y:791 gram.y:798 +#: gram.y:805 gram.y:812 gram.y:838 gram.y:845 gram.y:852 gram.y:1136 +#: gram.y:1143 plugins/sudoers/alias.c:123 plugins/sudoers/alias.c:136 +#: plugins/sudoers/auth/bsdauth.c:141 plugins/sudoers/auth/kerb5.c:119 +#: plugins/sudoers/auth/kerb5.c:145 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/pam.c:449 plugins/sudoers/auth/rfc1938.c:109 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:516 +#: plugins/sudoers/defaults.c:720 plugins/sudoers/defaults.c:880 +#: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 +#: plugins/sudoers/editor.c:92 plugins/sudoers/env.c:233 +#: plugins/sudoers/group_plugin.c:133 plugins/sudoers/iolog.c:586 +#: plugins/sudoers/iolog.c:618 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:446 plugins/sudoers/ldap.c:477 +#: plugins/sudoers/ldap.c:529 plugins/sudoers/ldap.c:562 +#: plugins/sudoers/ldap.c:914 plugins/sudoers/ldap.c:1061 +#: plugins/sudoers/ldap.c:1348 plugins/sudoers/ldap.c:1521 +#: plugins/sudoers/ldap.c:1597 plugins/sudoers/ldap.c:1733 +#: plugins/sudoers/ldap.c:1757 plugins/sudoers/ldap.c:1787 +#: plugins/sudoers/ldap.c:1840 plugins/sudoers/ldap.c:1855 +#: plugins/sudoers/ldap.c:1951 plugins/sudoers/ldap.c:1984 +#: plugins/sudoers/ldap.c:2137 plugins/sudoers/ldap.c:2234 +#: plugins/sudoers/ldap.c:3041 plugins/sudoers/ldap.c:3074 +#: plugins/sudoers/ldap.c:3388 plugins/sudoers/ldap.c:3416 +#: plugins/sudoers/ldap.c:3427 plugins/sudoers/ldap.c:3517 +#: plugins/sudoers/ldap.c:3533 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:666 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:501 +#: plugins/sudoers/match.c:537 plugins/sudoers/match.c:699 +#: plugins/sudoers/match.c:756 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:384 +#: plugins/sudoers/policy.c:583 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/sssd.c:160 plugins/sudoers/sssd.c:192 +#: plugins/sudoers/sssd.c:235 plugins/sudoers/sssd.c:242 +#: plugins/sudoers/sssd.c:278 plugins/sudoers/sssd.c:323 +#: plugins/sudoers/sssd.c:917 plugins/sudoers/sssd.c:1050 +#: plugins/sudoers/sudoers.c:159 plugins/sudoers/sudoers.c:294 +#: plugins/sudoers/sudoers.c:304 plugins/sudoers/sudoers.c:312 +#: plugins/sudoers/sudoers.c:365 plugins/sudoers/sudoers.c:663 +#: plugins/sudoers/sudoers.c:749 plugins/sudoers/sudoers.c:793 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:472 +#: plugins/sudoers/sudoreplay.c:668 plugins/sudoers/sudoreplay.c:780 +#: plugins/sudoers/sudoreplay.c:820 plugins/sudoers/sudoreplay.c:829 +#: plugins/sudoers/sudoreplay.c:839 plugins/sudoers/sudoreplay.c:847 +#: plugins/sudoers/sudoreplay.c:851 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1011 plugins/sudoers/testsudoers.c:130 +#: plugins/sudoers/testsudoers.c:188 plugins/sudoers/testsudoers.c:215 +#: plugins/sudoers/testsudoers.c:232 plugins/sudoers/timestamp.c:390 +#: plugins/sudoers/timestamp.c:426 plugins/sudoers/timestamp.c:838 +#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 +#: plugins/sudoers/toke_util.c:147 plugins/sudoers/visudo.c:152 +#: plugins/sudoers/visudo.c:213 plugins/sudoers/visudo.c:297 +#: plugins/sudoers/visudo.c:303 plugins/sudoers/visudo.c:433 +#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo.c:1023 +#: plugins/sudoers/visudo.c:1119 toke.l:785 toke.l:806 toke.l:816 toke.l:924 +#: toke.l:1082 +msgid "unable to allocate memory" +msgstr "muistin varaaminen epäonnistui" + +#: gram.y:471 msgid "a digest requires a path name" msgstr "tiiviste vaatii polkunimen" -#: plugins/sudoers/alias.c:136 +#: gram.y:1136 gram.y:1143 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/pam.c:449 plugins/sudoers/auth/rfc1938.c:109 +#: plugins/sudoers/defaults.c:516 plugins/sudoers/defaults.c:720 +#: plugins/sudoers/defaults.c:880 plugins/sudoers/editor.c:64 +#: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:92 +#: plugins/sudoers/env.c:233 plugins/sudoers/group_plugin.c:133 +#: plugins/sudoers/iolog.c:586 plugins/sudoers/iolog.c:618 +#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:446 +#: plugins/sudoers/ldap.c:477 plugins/sudoers/ldap.c:529 +#: plugins/sudoers/ldap.c:562 plugins/sudoers/ldap.c:914 +#: plugins/sudoers/ldap.c:1061 plugins/sudoers/ldap.c:1348 +#: plugins/sudoers/ldap.c:1521 plugins/sudoers/ldap.c:1597 +#: plugins/sudoers/ldap.c:1733 plugins/sudoers/ldap.c:1757 +#: plugins/sudoers/ldap.c:1787 plugins/sudoers/ldap.c:1840 +#: plugins/sudoers/ldap.c:1855 plugins/sudoers/ldap.c:1951 +#: plugins/sudoers/ldap.c:1984 plugins/sudoers/ldap.c:2137 +#: plugins/sudoers/ldap.c:2234 plugins/sudoers/ldap.c:3041 +#: plugins/sudoers/ldap.c:3074 plugins/sudoers/ldap.c:3388 +#: plugins/sudoers/ldap.c:3416 plugins/sudoers/ldap.c:3427 +#: plugins/sudoers/ldap.c:3517 plugins/sudoers/ldap.c:3533 +#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:501 +#: plugins/sudoers/match.c:537 plugins/sudoers/match.c:699 +#: plugins/sudoers/match.c:756 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:97 +#: plugins/sudoers/policy.c:106 plugins/sudoers/policy.c:115 +#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:250 +#: plugins/sudoers/policy.c:271 plugins/sudoers/policy.c:280 +#: plugins/sudoers/policy.c:319 plugins/sudoers/policy.c:329 +#: plugins/sudoers/policy.c:338 plugins/sudoers/policy.c:384 +#: plugins/sudoers/policy.c:583 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:160 +#: plugins/sudoers/sssd.c:192 plugins/sudoers/sssd.c:235 +#: plugins/sudoers/sssd.c:242 plugins/sudoers/sssd.c:278 +#: plugins/sudoers/sssd.c:323 plugins/sudoers/sssd.c:917 +#: plugins/sudoers/sssd.c:1050 plugins/sudoers/sudoers.c:159 +#: plugins/sudoers/sudoers.c:294 plugins/sudoers/sudoers.c:304 +#: plugins/sudoers/sudoers.c:312 plugins/sudoers/sudoers.c:365 +#: plugins/sudoers/sudoers.c:663 plugins/sudoers/sudoers.c:749 +#: plugins/sudoers/sudoers.c:793 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sudoreplay.c:472 plugins/sudoers/sudoreplay.c:668 +#: plugins/sudoers/sudoreplay.c:780 plugins/sudoers/sudoreplay.c:820 +#: plugins/sudoers/sudoreplay.c:829 plugins/sudoers/sudoreplay.c:839 +#: plugins/sudoers/sudoreplay.c:847 plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:1007 plugins/sudoers/sudoreplay.c:1011 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:188 +#: plugins/sudoers/testsudoers.c:215 plugins/sudoers/testsudoers.c:232 +#: plugins/sudoers/timestamp.c:390 plugins/sudoers/timestamp.c:426 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:147 +#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:213 +#: plugins/sudoers/visudo.c:297 plugins/sudoers/visudo.c:303 +#: plugins/sudoers/visudo.c:433 plugins/sudoers/visudo.c:979 +#: plugins/sudoers/visudo.c:1023 plugins/sudoers/visudo.c:1119 toke.l:785 +#: toke.l:806 toke.l:816 toke.l:924 toke.l:1082 +#, c-format +msgid "%s: %s" +msgstr "%s: %s" + +#: plugins/sudoers/alias.c:132 #, c-format msgid "Alias `%s' already defined" msgstr "Alias ”%s” on jo määritelty" -#: plugins/sudoers/auth/bsdauth.c:75 +#: plugins/sudoers/auth/bsdauth.c:68 #, 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:73 msgid "unable to begin bsd authentication" msgstr "bsd-todentamisen aloittaminen epäonnistui" -#: plugins/sudoers/auth/bsdauth.c:88 +#: plugins/sudoers/auth/bsdauth.c:81 msgid "invalid authentication type" msgstr "virheellinen todennustyyppi" -#: plugins/sudoers/auth/bsdauth.c:97 +#: plugins/sudoers/auth/bsdauth.c:90 msgid "unable to initialize BSD authentication" msgstr "BSD-todentamisen alustaminen epäonnistui" -#: plugins/sudoers/auth/fwtk.c:59 +#: plugins/sudoers/auth/fwtk.c:52 msgid "unable to read fwtk config" msgstr "fwtk config -asetuksen lukeminen epäonnistui" -#: plugins/sudoers/auth/fwtk.c:64 +#: plugins/sudoers/auth/fwtk.c:57 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:127 +#: plugins/sudoers/auth/fwtk.c:63 plugins/sudoers/auth/fwtk.c:87 +#: plugins/sudoers/auth/fwtk.c:120 msgid "lost connection to authentication server" msgstr "kadotettiin yhteys todentamispalvelimelle" -#: plugins/sudoers/auth/fwtk.c:74 +#: plugins/sudoers/auth/fwtk.c:67 #, c-format msgid "" "authentication server error:\n" @@ -89,156 +215,156 @@ "todentamispalvelinvirhe:\n" "%s" -#: plugins/sudoers/auth/kerb5.c:116 +#: plugins/sudoers/auth/kerb5.c:111 #, 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:158 +#: plugins/sudoers/auth/kerb5.c:161 #, c-format msgid "%s: unable to parse '%s': %s" msgstr "%s: todentamisnimen ’%s’ jäsentäminen epäonnistui: %s" -#: plugins/sudoers/auth/kerb5.c:167 +#: plugins/sudoers/auth/kerb5.c:170 #, c-format msgid "%s: unable to resolve credential cache: %s" msgstr "%s: valtuustietovälimuistin ratkaiseminen epäonnistui: %s" -#: plugins/sudoers/auth/kerb5.c:214 +#: plugins/sudoers/auth/kerb5.c:217 #, c-format msgid "%s: unable to allocate options: %s" msgstr "%s: muistin varaaminen valitsimille epäonnistui: %s" -#: plugins/sudoers/auth/kerb5.c:229 +#: plugins/sudoers/auth/kerb5.c:232 #, c-format msgid "%s: unable to get credentials: %s" msgstr "%s: valtuustietojen hakeminen epäonnistui: %s" -#: plugins/sudoers/auth/kerb5.c:242 +#: plugins/sudoers/auth/kerb5.c:245 #, c-format msgid "%s: unable to initialize credential cache: %s" msgstr "%s: valtuustietovälimuistin alustaminen epäonnistui: %s" -#: plugins/sudoers/auth/kerb5.c:245 +#: plugins/sudoers/auth/kerb5.c:248 #, 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:309 +#: plugins/sudoers/auth/kerb5.c:312 #, c-format msgid "%s: unable to get host principal: %s" msgstr "%s: tietokoneen valtuutetun hakeminen epäonnistui: %s" -#: plugins/sudoers/auth/kerb5.c:323 +#: plugins/sudoers/auth/kerb5.c:326 #, 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:98 +#: plugins/sudoers/auth/pam.c:92 msgid "unable to initialize PAM" msgstr "PAM:in alustaminen epäonnistui" -#: plugins/sudoers/auth/pam.c:149 +#: plugins/sudoers/auth/pam.c:164 msgid "account validation failure, is your account locked?" msgstr "tilikelpuutushäiriö, onko tilisi lukittu?" -#: plugins/sudoers/auth/pam.c:153 +#: plugins/sudoers/auth/pam.c:168 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:161 +#: plugins/sudoers/auth/pam.c:176 #, c-format msgid "unable to change expired password: %s" msgstr "vanhentuneen salasanan vaihtaminen epäonnistui: %s" -#: plugins/sudoers/auth/pam.c:166 +#: plugins/sudoers/auth/pam.c:181 msgid "Password expired, contact your system administrator" msgstr "Salasana vanhentunut, ota yhteyttä järjestelmän ylläpitäjään" -#: plugins/sudoers/auth/pam.c:170 +#: plugins/sudoers/auth/pam.c:185 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:187 +#: plugins/sudoers/auth/pam.c:199 #, c-format msgid "PAM authentication error: %s" msgstr "PAM-todentamisvirhe: %s" -#: plugins/sudoers/auth/rfc1938.c:103 plugins/sudoers/visudo.c:228 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:218 #, c-format msgid "you do not exist in the %s database" msgstr "ei ole olemassa %s-tietokannassa" -#: plugins/sudoers/auth/securid5.c:80 +#: plugins/sudoers/auth/securid5.c:73 msgid "failed to initialise the ACE API library" msgstr "ACE API -kirjaston alustaminen epäonnistui" -#: plugins/sudoers/auth/securid5.c:106 +#: plugins/sudoers/auth/securid5.c:99 msgid "unable to contact the SecurID server" msgstr "yhteyden ottaminen SecurID-palvelimeen epäonnistui" -#: plugins/sudoers/auth/securid5.c:115 +#: plugins/sudoers/auth/securid5.c:108 msgid "User ID locked for SecurID Authentication" msgstr "Käyttäjätunniste lukittu SecurID-todennukselle" -#: plugins/sudoers/auth/securid5.c:119 plugins/sudoers/auth/securid5.c:170 +#: plugins/sudoers/auth/securid5.c:112 plugins/sudoers/auth/securid5.c:163 msgid "invalid username length for SecurID" msgstr "virheellinen käyttäjänimipituus kohteelle SecurID" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:175 +#: plugins/sudoers/auth/securid5.c:116 plugins/sudoers/auth/securid5.c:168 msgid "invalid Authentication Handle for SecurID" msgstr "virheellinen todentamiskäsittelijä kohteelle SecurID" -#: plugins/sudoers/auth/securid5.c:127 +#: plugins/sudoers/auth/securid5.c:120 msgid "SecurID communication failed" msgstr "SecurID-viestintä epäonnistui" -#: plugins/sudoers/auth/securid5.c:131 plugins/sudoers/auth/securid5.c:214 +#: plugins/sudoers/auth/securid5.c:124 plugins/sudoers/auth/securid5.c:207 msgid "unknown SecurID error" msgstr "tuntematon SecurID-virhe" -#: plugins/sudoers/auth/securid5.c:165 +#: plugins/sudoers/auth/securid5.c:158 msgid "invalid passcode length for SecurID" msgstr "virheellinen salasanakoodipituus kohteelle SecurID" -#: plugins/sudoers/auth/sia.c:123 +#: 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:115 +#: plugins/sudoers/auth/sudo_auth.c:126 msgid "invalid authentication methods" msgstr "virheelliset todennusmetodit" -#: plugins/sudoers/auth/sudo_auth.c:117 +#: plugins/sudoers/auth/sudo_auth.c:128 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:203 plugins/sudoers/auth/sudo_auth.c:252 +#: plugins/sudoers/auth/sudo_auth.c:225 plugins/sudoers/auth/sudo_auth.c:274 msgid "no authentication methods" msgstr "ei todennusmenetelmiä:" -#: plugins/sudoers/auth/sudo_auth.c:205 +#: plugins/sudoers/auth/sudo_auth.c:227 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:254 +#: plugins/sudoers/auth/sudo_auth.c:276 msgid "Unable to initialize authentication methods." msgstr "Todentamismenetelmien alustaminen epäonnistui." -#: plugins/sudoers/auth/sudo_auth.c:412 +#: plugins/sudoers/auth/sudo_auth.c:435 msgid "Authentication methods:" msgstr "Todennusmenetelmät:" -#: plugins/sudoers/bsm_audit.c:95 plugins/sudoers/bsm_audit.c:184 +#: plugins/sudoers/bsm_audit.c:111 plugins/sudoers/bsm_audit.c:200 msgid "Could not determine audit condition" msgstr "Audit-ehdon määrittely epäonnistui" -#: plugins/sudoers/bsm_audit.c:156 plugins/sudoers/bsm_audit.c:244 +#: plugins/sudoers/bsm_audit.c:172 plugins/sudoers/bsm_audit.c:260 msgid "unable to commit audit record" msgstr "commit-toiminnon suorittaminen audit-tietueelle epäonnistui" -#: plugins/sudoers/check.c:197 +#: plugins/sudoers/check.c:252 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -258,15 +384,15 @@ " #3) Suuren voiman mukana tulee suuri vastuu.\n" "\n" -#: plugins/sudoers/check.c:240 plugins/sudoers/check.c:250 -#: plugins/sudoers/sudoers.c:599 plugins/sudoers/sudoers.c:628 +#: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 +#: plugins/sudoers/sudoers.c:699 plugins/sudoers/sudoers.c:728 #, c-format msgid "unknown uid: %u" msgstr "tuntematon uid-käyttäjätunniste: %u" -#: plugins/sudoers/check.c:245 plugins/sudoers/policy.c:683 -#: plugins/sudoers/sudoers.c:955 plugins/sudoers/testsudoers.c:212 -#: plugins/sudoers/testsudoers.c:364 +#: plugins/sudoers/check.c:300 plugins/sudoers/policy.c:755 +#: plugins/sudoers/sudoers.c:1095 plugins/sudoers/testsudoers.c:206 +#: plugins/sudoers/testsudoers.c:361 #, c-format msgid "unknown user: %s" msgstr "tuntematon käyttäjä: %s" @@ -315,544 +441,551 @@ msgstr "Lähetä sähköpostia, jos käyttäjän ei sallita suorittaa komentoa" #: plugins/sudoers/def_data.c:67 +msgid "Send mail if the user tries to run a command" +msgstr "Lähetä sähköpostia, jos käyttäjä yrittää suorittaa komennon" + +#: plugins/sudoers/def_data.c:71 msgid "Use a separate timestamp for each user/tty combo" msgstr "Käytä erillistä aikaleimaa jokaiselle käyttäjä/tty -yhdistelmälle" -#: plugins/sudoers/def_data.c:71 +#: plugins/sudoers/def_data.c:75 msgid "Lecture user the first time they run sudo" msgstr "Saarnaa ensimmäistä kertaa sudo-ohjelmaa käyttävälle" -#: plugins/sudoers/def_data.c:75 +#: plugins/sudoers/def_data.c:79 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Tiedosto, joka sisältää sudo-saarnan: %s" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:83 msgid "Require users to authenticate by default" msgstr "Vaadi käyttäjien todennus oletuksena" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:87 msgid "Root may run sudo" msgstr "Root voi suorittaa sudo-ohjelman" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:91 msgid "Log the hostname in the (non-syslog) log file" msgstr "Kirjaa tietokonenimi (ei-syslog)lokitiedostoon" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:95 msgid "Log the year in the (non-syslog) log file" msgstr "Kirjaa vuosi (ei-syslog)lokitiedostoon" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:99 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Jos sudo-ohjelmaa kutsutaan ilman argumentteja, käynnistä käyttöjärjestelmäkuori" -#: plugins/sudoers/def_data.c:99 +#: plugins/sudoers/def_data.c:103 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Aseta $HOME-muuttujaksi kohdekäyttäjä kun käyttöjärjestelmäkuori käynnistetään valitsimella -s" -#: plugins/sudoers/def_data.c:103 +#: plugins/sudoers/def_data.c:107 msgid "Always set $HOME to the target user's home directory" msgstr "Aseta $HOME-muuttujaksi aina kohdekäyttäjän kotihakemisto" -#: plugins/sudoers/def_data.c:107 +#: plugins/sudoers/def_data.c:111 msgid "Allow some information gathering to give useful error messages" msgstr "Salli jotain tietojenkeräystä hyödyllisten virheilmoitusten tarjoamiseksi" -#: plugins/sudoers/def_data.c:111 +#: plugins/sudoers/def_data.c:115 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Vaadi täysin rakennettu tietokonenimi suoders-tiedostossa" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:119 msgid "Insult the user when they enter an incorrect password" msgstr "Solvaa käyttäjiä, kun he kirjoittavat väärän salasanan" -#: plugins/sudoers/def_data.c:119 +#: plugins/sudoers/def_data.c:123 msgid "Only allow the user to run sudo if they have a tty" msgstr "Salli käyttäjien suorittaa sudo-ohjelma vain jos heillä on tty" -#: plugins/sudoers/def_data.c:123 +#: plugins/sudoers/def_data.c:127 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo noudattaa EDITOR-ympäristömuuttujaa" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:131 msgid "Prompt for root's password, not the users's" msgstr "Kysy root-käyttäjän salasana, ei käyttäjän" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:135 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Kysy runas_default-käyttäjän salasana, ei käyttäjän" -#: plugins/sudoers/def_data.c:135 +#: plugins/sudoers/def_data.c:139 msgid "Prompt for the target user's password, not the users's" msgstr "Kysy kohdekäyttäjän salasana, ei käyttäjän" -#: plugins/sudoers/def_data.c:139 +#: plugins/sudoers/def_data.c:143 msgid "Apply defaults in the target user's login class if there is one" msgstr "Käytä oletuksia kohdekäyttäjän kirjautumisluokassa, jos siinä on yhtään" -#: plugins/sudoers/def_data.c:143 +#: plugins/sudoers/def_data.c:147 msgid "Set the LOGNAME and USER environment variables" msgstr "Aseta LOGNAME- ja USER-ympäristömuuttujat" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:151 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Aseta vain voimassa oleva uid-käyttäjätunniste kohdekäyttäjälle, ei oikeaa uid-tunnistetta" -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:155 msgid "Don't initialize the group vector to that of the target user" msgstr "Älä alusta ryhmävektoria kohdekäyttäjän vastaavaan arvoon" -#: plugins/sudoers/def_data.c:155 +#: plugins/sudoers/def_data.c:159 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Pituus, jossa pitkät lokitiedostorivit jaetaan seuraavalle riville (0 ei jaeta): %u" -#: plugins/sudoers/def_data.c:159 +#: plugins/sudoers/def_data.c:163 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Todennusaikaleiman aikavalvonta: %.1f minuuttia" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:167 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Salasanakehotteen aikavalvonta: %.1f minuuttia" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:171 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Salasanayritysten lukumäärä: %u" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:175 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "Käytettävä umask-määrittely tai 0777 käytettäväksi käyttäjän umask-määrittelyksi: 0%o" -#: plugins/sudoers/def_data.c:175 +#: plugins/sudoers/def_data.c:179 #, c-format msgid "Path to log file: %s" msgstr "Polku lokitiedostoon: %s" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:183 #, c-format msgid "Path to mail program: %s" msgstr "Polku sähköpostiohjelmaan: %s" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:187 #, c-format msgid "Flags for mail program: %s" msgstr "Sähköpostiohjelman liput: %s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:191 #, c-format msgid "Address to send mail to: %s" msgstr "Osoite, johon sähköposti lähetetään: %s" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:195 #, c-format msgid "Address to send mail from: %s" msgstr "Osoite, josta sähköposti lähetetään: %s" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:199 #, c-format msgid "Subject line for mail messages: %s" msgstr "Sähköpostiviestin Aihe-rivi: %s" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:203 #, c-format msgid "Incorrect password message: %s" msgstr "Virheellinen salasanaviesti: %s" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:207 #, c-format msgid "Path to lecture status dir: %s" msgstr "Polku luentotilahakemistoon: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:211 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Polku todennusaikaleimahakemistoon: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:215 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Todennusaikaleimahakemiston omistaja: %s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:219 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Käyttäjät tässä ryhmässä on vapautettu salasana- ja PATH-vaatimuksista: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:223 #, c-format msgid "Default password prompt: %s" msgstr "Oletussalasanakehote: %s" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:227 msgid "If set, passprompt will override system prompt in all cases." msgstr "Jos asetettu, salasanakehote korvaa järjestelmäkehotteen kaikissa tapauksissa." # Tämä on tekemisessä runas_default -määrittelyn kanssa -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:231 #, c-format msgid "Default user to run commands as: %s" msgstr "Oletuskäyttäjä suorittaa komennot käyttäjänä: %s" -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:235 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Arvo, jolla korvataan käyttäjän $PATH-asetus: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:239 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Visudo-editorin käyttämä polku: %s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:243 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Kun vaaditaan salasana ’list’-näennäiskomennolle: %s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:247 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Kun vaaditaan salasana ’verify’-näennäiskomennolle: %s" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:251 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Esilataa vale-exec-funktiot, jotka sisältyvät sudo_noexec-kirjastoon" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:255 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Jos LDAP-hakemisto on ylhäällä, ohitammeko paikallisen sudoers-tiedoston" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:259 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Tiedostokuvaajat >= %d suljetaan ennen komennon suoritusta" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:263 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:263 +#: plugins/sudoers/def_data.c:267 msgid "Allow users to set arbitrary environment variables" msgstr "Salli käyttäjien asettaa mielivaltaisia ympäristömuuttujia" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:271 msgid "Reset the environment to a default set of variables" msgstr "Nollaa ympäristö muuttujien oletusjoukoksi" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to check for sanity:" msgstr "Ympäristömuuttujat, joille tehdään järkevyystarkistus:" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to remove:" msgstr "Poistettavat ympäristömuuttujat:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:283 msgid "Environment variables to preserve:" msgstr "Säilytettävät ympäristömuuttujat:" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:287 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "Uudessa turva-asiayhteydessä käytettävä SELinux-rooli: %s" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:291 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "Uudessa turva-asiayhteydessä käytettävä SELinux-tyyppi: %s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:295 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Polku sudo-kohtaiseen ympäristötiedostoon: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:299 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Locale-asetus, jota käytetään sudoers-jäsentämisessä: %s" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:303 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Salli sudo-ohjelman kysyä salasana vieläpä jos se olisi näkyvä" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:307 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Tarjoa visuaalista palautetta salasanakehotteelta silloin kun on käyttäjäsyöte" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:311 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Käyttää nopeampaa jokerimerkkien korvausta, joka on epätarkempi, mutta ei lue tiedostojärjestelmää" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:315 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "Sudoers umask korvaa käyttäjän umask-määrittelyn, vieläpä jos se on sallivampi" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:319 msgid "Log user's input for the command being run" msgstr "Kirjaa lokiin käyttäjän syöte suoritettavalle komennolle" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:323 msgid "Log the output of the command being run" msgstr "Kirjaa lokiin suoritettavan komennon tuloste" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:327 msgid "Compress I/O logs using zlib" msgstr "Tiivistä siirräntälokit käyttäen zlib-ohjelmaa" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:331 msgid "Always run commands in a pseudo-tty" msgstr "Suorita aina komennot näennäis-tty:ssä" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:335 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Lisäosa ei-Unix-ryhmätuelle: %s" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:339 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Hakemisto, johon tallennetaan syöte-/tulostelokit: %s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:343 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Tiedosto, johon tallennetaan syöte-/tulosteloki: %s" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:347 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Lisää rivi utmp-/utmpx-tiedostoon, kun varataan pty" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:351 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Aseta käyttäjäksi utmp-tiedostoon suorittava käyttäjä, ei kutsuva käyttäjä" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:355 msgid "Set of permitted privileges" msgstr "Sallittuja käyttöoikeuksia" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:359 msgid "Set of limit privileges" msgstr "Rajoitettuja käyttöoikeuksia" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:363 msgid "Run commands on a pty in the background" msgstr "Suorita komentoja pty:llä taustalla" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:367 msgid "PAM service name to use" msgstr "Käytettävä PAM-palvelunimi" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:371 msgid "PAM service name to use for login shells" msgstr "Kirjautumiskomentotulkeille käytettävä PAM-palvelunimi" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:375 msgid "Attempt to establish PAM credentials for the target user" msgstr "Yritys perustaa PAM-valtuustiedot kohdekäyttäjälle" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:379 msgid "Create a new PAM session for the command to run in" msgstr "Luo uusi PAM-istunto suoritettavalle komennolle" -#: plugins/sudoers/def_data.c:379 +#: plugins/sudoers/def_data.c:383 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Suurin siirräntälokin sarjanumero: %u" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:387 msgid "Enable sudoers netgroup support" msgstr "Ota käyttöön sudoers-verkkoryhmätuki" -#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:601 -#: plugins/sudoers/visudo_json.c:642 plugins/sudoers/visudo_json.c:677 +#: plugins/sudoers/def_data.c:391 +msgid "Check the parent directory for writability when editing files with sudoedit" +msgstr "Tarkista yläpuolella olevan hakemiston kirjoituskelpoisuus kun tiedostoja muokataan sudoedit-ohjelmalla" + +#: plugins/sudoers/def_data.c:395 +msgid "Follow symbolic links when editing files with sudoedit" +msgstr "Seuraa symbolisia linkejä kun tiedostoja muokataan sudoedit-ohjelmalla" + +#: plugins/sudoers/def_data.c:399 +msgid "Query the group plugin for unknown system groups" +msgstr "Kysy ryhmälisäosaa tuntemattomille järjestelmäryhmille" + +#: plugins/sudoers/defaults.c:199 plugins/sudoers/defaults.c:608 +#: plugins/sudoers/visudo_json.c:633 plugins/sudoers/visudo_json.c:668 #, c-format msgid "unknown defaults entry `%s'" msgstr "tuntematon oletusrivi ”%s”" -#: plugins/sudoers/defaults.c:218 plugins/sudoers/defaults.c:228 -#: plugins/sudoers/defaults.c:248 plugins/sudoers/defaults.c:261 -#: plugins/sudoers/defaults.c:274 plugins/sudoers/defaults.c:287 -#: plugins/sudoers/defaults.c:300 plugins/sudoers/defaults.c:320 -#: plugins/sudoers/defaults.c:330 +#: plugins/sudoers/defaults.c:207 plugins/sudoers/defaults.c:217 +#: plugins/sudoers/defaults.c:241 plugins/sudoers/defaults.c:256 +#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 +#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 +#: plugins/sudoers/defaults.c:325 #, c-format msgid "value `%s' is invalid for option `%s'" msgstr "arvo ”%s” on virheellinen valitsimelle ”%s”" # parametrinä on variable -#: plugins/sudoers/defaults.c:221 plugins/sudoers/defaults.c:231 -#: plugins/sudoers/defaults.c:239 plugins/sudoers/defaults.c:256 -#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 -#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 -#: plugins/sudoers/defaults.c:326 +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:220 +#: plugins/sudoers/defaults.c:228 plugins/sudoers/defaults.c:251 +#: plugins/sudoers/defaults.c:264 plugins/sudoers/defaults.c:277 +#: plugins/sudoers/defaults.c:290 plugins/sudoers/defaults.c:310 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "no value specified for `%s'" msgstr "arvoa ei ole määritelty muuttujalle ”%s”" # Parametri on muuttuja -#: plugins/sudoers/defaults.c:244 +#: plugins/sudoers/defaults.c:233 #, c-format msgid "values for `%s' must start with a '/'" msgstr "muuttujan ”%s” arvojen on alettava merkillä ’/’" -#: plugins/sudoers/defaults.c:306 +#: plugins/sudoers/defaults.c:301 #, c-format msgid "option `%s' does not take a value" msgstr "valitsin ”%s” ei ota arvoa" -#: plugins/sudoers/env.c:276 plugins/sudoers/env.c:283 -#: plugins/sudoers/env.c:386 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:918 plugins/sudoers/policy.c:461 -#: plugins/sudoers/policy.c:470 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:708 plugins/sudoers/testsudoers.c:242 -#: plugins/sudoers/toke_util.c:174 +#: plugins/sudoers/env.c:295 plugins/sudoers/env.c:302 +#: plugins/sudoers/env.c:407 plugins/sudoers/ldap.c:450 +#: plugins/sudoers/ldap.c:540 plugins/sudoers/ldap.c:1152 +#: plugins/sudoers/ldap.c:1354 plugins/sudoers/ldap.c:1526 +#: plugins/sudoers/ldap.c:1682 plugins/sudoers/linux_audit.c:82 +#: plugins/sudoers/logging.c:929 plugins/sudoers/policy.c:502 +#: plugins/sudoers/policy.c:511 plugins/sudoers/prompt.c:161 +#: plugins/sudoers/sudoers.c:815 plugins/sudoers/testsudoers.c:236 +#: plugins/sudoers/toke_util.c:160 #, c-format msgid "internal error, %s overflow" msgstr "sisäinen virhe, %s-ylivuoto" -#: plugins/sudoers/env.c:359 +#: plugins/sudoers/env.c:376 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: rikkoutunut envp, pituus ei täsmää" -#: plugins/sudoers/env.c:1054 +#: plugins/sudoers/env.c:1076 +msgid "unable to rebuild the environment" +msgstr "ympäristön rakentaminen uudelleen epäonnistui" + +#: plugins/sudoers/env.c:1150 #, 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/group_plugin.c:94 +#: plugins/sudoers/group_plugin.c:85 #, c-format msgid "%s must be owned by uid %d" msgstr "%s-omistajan on oltava uid %d" -#: plugins/sudoers/group_plugin.c:98 +#: plugins/sudoers/group_plugin.c:89 #, c-format msgid "%s must only be writable by owner" msgstr "%s on vain omistajan kirjoitettava" -#: plugins/sudoers/group_plugin.c:105 plugins/sudoers/sssd.c:251 +#: plugins/sudoers/group_plugin.c:97 plugins/sudoers/sssd.c:331 #, 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:103 #, 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:108 #, 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:116 +#: plugins/sudoers/interfaces.c:117 msgid "Local IP address and netmask pairs:\n" msgstr "Paikallinen ip-osoite ja verkkopeiteparit:\n" -#: plugins/sudoers/iolog.c:101 plugins/sudoers/iolog.c:119 -#: plugins/sudoers/timestamp.c:233 +#: plugins/sudoers/iolog.c:92 plugins/sudoers/iolog.c:110 +#: plugins/sudoers/timestamp.c:169 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s on olemassa, mutta ei ole hakemisto (0%o)" -#: plugins/sudoers/iolog.c:112 plugins/sudoers/iolog.c:133 -#: plugins/sudoers/iolog.c:140 plugins/sudoers/timestamp.c:227 -#: plugins/sudoers/timestamp.c:248 +#: plugins/sudoers/iolog.c:103 plugins/sudoers/iolog.c:124 +#: plugins/sudoers/iolog.c:131 plugins/sudoers/timestamp.c:163 +#: plugins/sudoers/timestamp.c:184 #, c-format msgid "unable to mkdir %s" msgstr "käskyn mkdir %s suorittaminen epäonnistui" # Avaamisen kohde voi olla timestamp file, sudoers file tai pathbuf -#: plugins/sudoers/iolog.c:209 plugins/sudoers/sudoers.c:764 -#: plugins/sudoers/sudoreplay.c:348 plugins/sudoers/sudoreplay.c:819 -#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/timestamp.c:357 -#: plugins/sudoers/visudo.c:832 plugins/sudoers/visudo_json.c:1025 -#: plugins/sudoers/visudo_json.c:1038 +#: plugins/sudoers/iolog.c:200 plugins/sudoers/sudoers.c:871 +#: plugins/sudoers/sudoreplay.c:300 plugins/sudoers/sudoreplay.c:769 +#: plugins/sudoers/sudoreplay.c:973 plugins/sudoers/timestamp.c:399 +#: plugins/sudoers/visudo.c:903 plugins/sudoers/visudo_json.c:1012 +#: plugins/sudoers/visudo_json.c:1025 #, c-format msgid "unable to open %s" msgstr "kohteen %s avaaminen epäonnistui" # Parametrinä on sudoers-tiedosto tai pathbuf -#: plugins/sudoers/iolog.c:250 plugins/sudoers/sudoers.c:768 -#: plugins/sudoers/sudoreplay.c:1123 +#: plugins/sudoers/iolog.c:241 plugins/sudoers/sudoers.c:875 +#: plugins/sudoers/sudoreplay.c:1084 #, c-format msgid "unable to read %s" msgstr "kohteen %s lukeminen epäonnistui" # Kirjoittamisen kohde voi olla timestamp file tai pathbuf -#: plugins/sudoers/iolog.c:282 plugins/sudoers/sudoreplay.c:588 -#: plugins/sudoers/timestamp.c:186 plugins/sudoers/timestamp.c:189 +#: plugins/sudoers/iolog.c:277 plugins/sudoers/sudoreplay.c:550 +#: plugins/sudoers/timestamp.c:298 plugins/sudoers/timestamp.c:301 #, c-format msgid "unable to write to %s" msgstr "kohteeseen %s kirjoittaminen epäonnistui" # Parametrina on pathbuf -#: plugins/sudoers/iolog.c:347 plugins/sudoers/iolog.c:545 +#: plugins/sudoers/iolog.c:342 plugins/sudoers/iolog.c:540 #, c-format msgid "unable to create %s" msgstr "hakemistopolun %s luominen epäonnistui" -#: plugins/sudoers/ldap.c:406 +#: plugins/sudoers/ldap.c:428 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: portti on liian suuri" -#: plugins/sudoers/ldap.c:431 -msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" -msgstr "sudo_ldap_conf_add_ports: hostbuf-puskuritila loppui" - # URL on verkko-osoite, loogisesti URI on verkkoresurssi(osoite) -#: plugins/sudoers/ldap.c:464 +#: plugins/sudoers/ldap.c:488 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "tukematon LDAP-verkkoresurssin tunnustyyppi: %s" -#: plugins/sudoers/ldap.c:495 +#: plugins/sudoers/ldap.c:515 msgid "unable to mix ldap and ldaps URIs" msgstr "ldap:n ja ldap-verkkoresurssitunnuksien sekoittaminen epäonnistui" -#: plugins/sudoers/ldap.c:499 plugins/sudoers/ldap.c:532 +#: plugins/sudoers/ldap.c:519 plugins/sudoers/ldap.c:555 msgid "starttls not supported when using ldaps" msgstr "starttls ei ole tuettu ldaps-käytössä" -#: plugins/sudoers/ldap.c:517 -msgid "sudo_ldap_parse_uri: out of space building hostbuf" -msgstr "sudo_ldap_parse_uri: hostbuf-puskuritila loppui" - -#: plugins/sudoers/ldap.c:599 +#: plugins/sudoers/ldap.c:626 #, 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:602 +#: plugins/sudoers/ldap.c:629 #, 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:1093 +#: plugins/sudoers/ldap.c:1138 msgid "unable to get GMT time" msgstr "GMT-ajan saaminen epäonnistui" -#: plugins/sudoers/ldap.c:1099 +#: plugins/sudoers/ldap.c:1144 msgid "unable to format timestamp" msgstr "aikaleiman muotoileminen epäonnistui" -#: plugins/sudoers/ldap.c:1107 -msgid "unable to build time filter" -msgstr "aikasuodattimen rakentaminen epäonnistui" - -#: plugins/sudoers/ldap.c:1326 -msgid "sudo_ldap_build_pass1 allocation mismatch" -msgstr "sudo_ldap_build_pass1-varaustäsmäämättömyys" - -#: plugins/sudoers/ldap.c:1469 +#: plugins/sudoers/ldap.c:1830 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:1963 +#: plugins/sudoers/ldap.c:2372 #, c-format msgid "" "\n" @@ -861,7 +994,7 @@ "\n" "LDAP-rooli: %s\n" -#: plugins/sudoers/ldap.c:1965 +#: plugins/sudoers/ldap.c:2374 #, c-format msgid "" "\n" @@ -870,108 +1003,108 @@ "\n" "LDAP-rooli: TUNTEMATON\n" -#: plugins/sudoers/ldap.c:2012 +#: plugins/sudoers/ldap.c:2421 #, c-format msgid " Order: %s\n" msgstr " Järjestys: %s\n" -#: plugins/sudoers/ldap.c:2020 plugins/sudoers/parse.c:512 -#: plugins/sudoers/sssd.c:1297 +#: plugins/sudoers/ldap.c:2429 plugins/sudoers/parse.c:555 +#: plugins/sudoers/sssd.c:1417 #, c-format msgid " Commands:\n" msgstr " Komennot:\n" -#: plugins/sudoers/ldap.c:2570 +#: plugins/sudoers/ldap.c:2993 #, c-format msgid "unable to initialize LDAP: %s" msgstr "kohteen LDAP alustaminen epäonnistui: %s" -#: plugins/sudoers/ldap.c:2612 +#: plugins/sudoers/ldap.c:3029 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:2845 +#: plugins/sudoers/ldap.c:3286 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "virheellinen sudoOrder-attribuutti: %s" -#: plugins/sudoers/linux_audit.c:57 +#: plugins/sudoers/linux_audit.c:52 msgid "unable to open audit system" msgstr "audit-järjestelmän avaaminen epäonnistui" -#: plugins/sudoers/linux_audit.c:94 +#: plugins/sudoers/linux_audit.c:93 msgid "unable to send audit message" msgstr "audit-viestin lähettäminen epäonnistui" -#: plugins/sudoers/logging.c:134 +#: plugins/sudoers/logging.c:106 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: plugins/sudoers/logging.c:162 +#: plugins/sudoers/logging.c:134 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s: (komento jatkui) %s" -#: plugins/sudoers/logging.c:187 +#: plugins/sudoers/logging.c:159 #, c-format msgid "unable to open log file: %s: %s" msgstr "lokitiedoston avaaminen epäonnistui: %s: %s" -#: plugins/sudoers/logging.c:190 +#: plugins/sudoers/logging.c:162 #, c-format msgid "unable to lock log file: %s: %s" msgstr "lokitiedoston lukitseminen epäonnistui: %s: %s" -#: plugins/sudoers/logging.c:242 +#: plugins/sudoers/logging.c:211 msgid "No user or host" msgstr "Ei käyttäjä eikä tietokone" -#: plugins/sudoers/logging.c:244 +#: plugins/sudoers/logging.c:213 msgid "validation failure" msgstr "kelpuutushäiriö" -#: plugins/sudoers/logging.c:251 +#: plugins/sudoers/logging.c:220 msgid "user NOT in sudoers" msgstr "käyttäjä EI ole sudoers-tiedostossa" -#: plugins/sudoers/logging.c:253 +#: plugins/sudoers/logging.c:222 msgid "user NOT authorized on host" msgstr "käyttäjä ei ole varmennettu tietokoneella" -#: plugins/sudoers/logging.c:255 +#: plugins/sudoers/logging.c:224 msgid "command not allowed" msgstr "komento ei ole sallittu" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:259 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "käyttäjä %s ei ole sudoers-tiedostossa. Tästä tapahtumasta ilmoitetaan.\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:262 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "käyttäjä %s ei saa suorittaa komentoa sudo tietokoneella %s. Tästä tapahtumasta ilmoitetaan.\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:266 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Käyttäjä %s ei voi suorittaa komentoa sudo tietokoneella %s.\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:269 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "Käyttäjän %s ei sallita suorittaa ’%s%s%s’ käyttäjänä %s%s%s tietokoneella %s.\n" -#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:407 -#: plugins/sudoers/sudoers.c:409 plugins/sudoers/sudoers.c:411 -#: plugins/sudoers/sudoers.c:413 plugins/sudoers/sudoers.c:1128 -#: plugins/sudoers/sudoers.c:1129 +#: plugins/sudoers/logging.c:306 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1222 +#: plugins/sudoers/sudoers.c:1224 #, c-format msgid "%s: command not found" msgstr "%s: komentoa ei löytynyt" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:403 +#: plugins/sudoers/logging.c:308 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring `%s' found in '.'\n" @@ -980,71 +1113,71 @@ "ohitetaan komento ”%s”, joka löytyi kohteesta ’.’\n" "Käytä ”sudo ./%s”, jos tämä on ”%s”-komento, joka halutaan suorittaa." -#: plugins/sudoers/logging.c:353 +#: plugins/sudoers/logging.c:325 msgid "authentication failure" msgstr "todentamishäiriö" -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:351 msgid "a password is required" msgstr "vaaditaan salasana" -#: plugins/sudoers/logging.c:446 plugins/sudoers/logging.c:501 +#: plugins/sudoers/logging.c:422 plugins/sudoers/logging.c:484 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "%u väärä salasana yritetty" msgstr[1] "%u väärää salasanaa yritetty" -#: plugins/sudoers/logging.c:584 +#: plugins/sudoers/logging.c:572 msgid "unable to fork" msgstr "fork-funktion kutsuminen epäonnistui" -#: plugins/sudoers/logging.c:592 plugins/sudoers/logging.c:648 +#: plugins/sudoers/logging.c:580 plugins/sudoers/logging.c:640 #, c-format msgid "unable to fork: %m" msgstr "fork-funktion kutsuminen epäonnistui: %m" -#: plugins/sudoers/logging.c:638 +#: plugins/sudoers/logging.c:630 #, c-format msgid "unable to open pipe: %m" msgstr "putken avaaminen epäonnistui: %m" -#: plugins/sudoers/logging.c:663 +#: plugins/sudoers/logging.c:655 #, c-format msgid "unable to dup stdin: %m" msgstr "funktion dup kutsuminen vakiosyötteellä epäonnistui: %m" -#: plugins/sudoers/logging.c:698 +#: plugins/sudoers/logging.c:693 #, c-format msgid "unable to execute %s: %m" msgstr "käskyn %s suorittaminen epäonnistui: %m" -#: plugins/sudoers/match.c:627 +#: plugins/sudoers/match.c:606 #, c-format msgid "unsupported digest type %d for %s" msgstr "tukematon tiivistetyyppi %d kohteelle %s" -#: plugins/sudoers/match.c:656 +#: plugins/sudoers/match.c:639 #, c-format msgid "%s: read error" msgstr "%s: kirjoitusvirhe" -#: plugins/sudoers/match.c:670 +#: plugins/sudoers/match.c:653 #, 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:123 +#: plugins/sudoers/parse.c:114 #, c-format msgid "parse error in %s near line %d" msgstr "jäsentämisvirhe tiedostossa %s lähellä riviä %d" -#: plugins/sudoers/parse.c:126 +#: plugins/sudoers/parse.c:117 #, c-format msgid "parse error in %s" msgstr "jäsentämisvirhe tiedostossa %s" -#: plugins/sudoers/parse.c:459 +#: plugins/sudoers/parse.c:502 #, c-format msgid "" "\n" @@ -1053,50 +1186,42 @@ "\n" "Sudoers-rivi:\n" -#: plugins/sudoers/parse.c:460 +#: plugins/sudoers/parse.c:503 #, c-format msgid " RunAsUsers: " msgstr " SuoritaKäyttäjänä: " -#: plugins/sudoers/parse.c:474 +#: plugins/sudoers/parse.c:517 #, c-format msgid " RunAsGroups: " msgstr " SuoritaRyhmänä: " -#: plugins/sudoers/parse.c:483 +#: plugins/sudoers/parse.c:526 #, c-format msgid " Options: " msgstr " Valitsimet: " -#: plugins/sudoers/policy.c:109 plugins/sudoers/policy.c:118 -#: plugins/sudoers/policy.c:127 plugins/sudoers/policy.c:151 -#: plugins/sudoers/policy.c:263 plugins/sudoers/policy.c:283 -#: plugins/sudoers/policy.c:292 plugins/sudoers/policy.c:322 -#: plugins/sudoers/policy.c:332 plugins/sudoers/policy.c:341 -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" +#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:253 +msgid "unable to parse network address list" +msgstr "verkko-osoiteluettelon jäsentäminen epäonnistui" # Parametri on path, mutta saattaa sisältää suoritettavan ohjelman -#: plugins/sudoers/policy.c:569 plugins/sudoers/visudo.c:773 +#: plugins/sudoers/policy.c:640 plugins/sudoers/visudo.c:840 #, c-format msgid "unable to execute %s" msgstr "kohteen %s suorittaminen epäonnistui" -#: plugins/sudoers/policy.c:701 +#: plugins/sudoers/policy.c:773 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Sudoers-menettelytapalisäosaversio %s\n" -#: plugins/sudoers/policy.c:703 +#: plugins/sudoers/policy.c:775 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Sudoers-tiedostokielioppiversio %d\n" -#: plugins/sudoers/policy.c:707 +#: plugins/sudoers/policy.c:779 #, c-format msgid "" "\n" @@ -1105,376 +1230,413 @@ "\n" "Sudoers-polku: %s\n" -#: plugins/sudoers/policy.c:710 +#: plugins/sudoers/policy.c:782 #, c-format msgid "nsswitch path: %s\n" msgstr "nsswitch-polku: %s\n" -#: plugins/sudoers/policy.c:712 +#: plugins/sudoers/policy.c:784 #, c-format msgid "ldap.conf path: %s\n" msgstr "ldap.conf-polku: %s\n" -#: plugins/sudoers/policy.c:713 +#: plugins/sudoers/policy.c:785 #, c-format msgid "ldap.secret path: %s\n" msgstr "ldap.secret-polku: %s\n" -#: plugins/sudoers/pwutil.c:149 +#: plugins/sudoers/policy.c:818 +#, 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:136 plugins/sudoers/pwutil.c:153 +#, c-format +msgid "unable to cache uid %u, out of memory" +msgstr "käyttäjän uid %u laittaminen välimuistiin epäonnistui, muistia ei riittävästi" + +#: plugins/sudoers/pwutil.c:147 #, 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ä" -#: plugins/sudoers/pwutil.c:194 +#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:207 +#: plugins/sudoers/pwutil.c:250 plugins/sudoers/pwutil.c:294 +#, c-format +msgid "unable to cache user %s, out of memory" +msgstr "käyttäjän %s laittaminen välimuistiin epäonnistui, muistia ei riittävästi" + +#: plugins/sudoers/pwutil.c:202 #, 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:400 +#: plugins/sudoers/pwutil.c:427 plugins/sudoers/pwutil.c:444 +#, c-format +msgid "unable to cache gid %u, out of memory" +msgstr "ryhmän gid %u laittaminen välimuistiin epäonnistui, muistia ei riittävästi" + +#: plugins/sudoers/pwutil.c:438 #, c-format msgid "unable to cache gid %u, already exists" msgstr "ryhmän gid %u laittaminen välimuistiin epäonnistui, ryhmä on jo siellä" -#: plugins/sudoers/pwutil.c:439 +#: plugins/sudoers/pwutil.c:476 plugins/sudoers/pwutil.c:492 +#: plugins/sudoers/pwutil.c:524 plugins/sudoers/pwutil.c:565 +#, c-format +msgid "unable to cache group %s, out of memory" +msgstr "ryhmän %s laittaminen välimuistiin epäonnistui, muistia ei riittävästi" + +#: plugins/sudoers/pwutil.c:487 #, 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:605 plugins/sudoers/pwutil.c:631 +#: plugins/sudoers/pwutil.c:676 plugins/sudoers/pwutil.c:710 #, 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ä" +#: plugins/sudoers/pwutil.c:682 plugins/sudoers/pwutil.c:715 +#, c-format +msgid "unable to cache group list for %s, out of memory" +msgstr "ryhmäluettelon laittaminen välimuistiin tiedostossa %s epäonnistui, muistia ei riittävästi" + # Parametri on sudoers file -#: plugins/sudoers/pwutil.c:627 +#: plugins/sudoers/pwutil.c:705 #, c-format msgid "unable to parse groups for %s" msgstr "ryhmien jäsentäminen tiedostossa %s epäonnistui" -#: plugins/sudoers/set_perms.c:122 plugins/sudoers/set_perms.c:447 -#: plugins/sudoers/set_perms.c:850 plugins/sudoers/set_perms.c:1147 -#: plugins/sudoers/set_perms.c:1439 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 +#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 +#: plugins/sudoers/set_perms.c:1430 msgid "perm stack overflow" msgstr "käyttöoikeuspinoylivuoto" -#: plugins/sudoers/set_perms.c:130 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:1076 -#: plugins/sudoers/set_perms.c:1155 plugins/sudoers/set_perms.c:1372 -#: plugins/sudoers/set_perms.c:1447 plugins/sudoers/set_perms.c:1536 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 +#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 +#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 +#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 +#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 msgid "perm stack underflow" msgstr "käyttöoikeuspinovajaus" -#: plugins/sudoers/set_perms.c:189 plugins/sudoers/set_perms.c:502 -#: plugins/sudoers/set_perms.c:1206 plugins/sudoers/set_perms.c:1479 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:493 +#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 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:599 -#: plugins/sudoers/set_perms.c:987 plugins/sudoers/set_perms.c:1283 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:590 +#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 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:604 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:595 +#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 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:615 -#: plugins/sudoers/set_perms.c:1001 plugins/sudoers/set_perms.c:1297 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:606 +#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 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:633 -#: plugins/sudoers/set_perms.c:1017 plugins/sudoers/set_perms.c:1313 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:624 +#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 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:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 msgid "too many processes" msgstr "liian monta prosessia" -#: plugins/sudoers/solaris_audit.c:47 +#: plugins/sudoers/solaris_audit.c:51 msgid "unable to get current working directory" msgstr "nykyisen työhakemiston hakeminen epäonnistui" -#: plugins/sudoers/solaris_audit.c:55 +#: plugins/sudoers/solaris_audit.c:59 #, c-format msgid "truncated audit path user_cmnd: %s" msgstr "typistetty audit-polku user_cmnd: %s" -#: plugins/sudoers/solaris_audit.c:62 +#: plugins/sudoers/solaris_audit.c:66 #, c-format msgid "truncated audit path argv[0]: %s" msgstr "typistetty audit-polku argv[0]: %s" -#: plugins/sudoers/solaris_audit.c:111 +#: plugins/sudoers/solaris_audit.c:115 msgid "audit_failure message too long" msgstr "audit_failure-viesti on liian pitkä" -#: plugins/sudoers/sssd.c:252 +#: plugins/sudoers/sssd.c:333 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:259 plugins/sudoers/sssd.c:267 -#: plugins/sudoers/sssd.c:275 plugins/sudoers/sssd.c:283 -#: plugins/sudoers/sssd.c:291 +#: plugins/sudoers/sssd.c:341 plugins/sudoers/sssd.c:350 +#: plugins/sudoers/sssd.c:359 plugins/sudoers/sssd.c:368 +#: plugins/sudoers/sssd.c:377 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "symbolin ”%s” löytäminen polusta %s epäonnistui" -#: plugins/sudoers/sudo_nss.c:296 +#: plugins/sudoers/sudo_nss.c:290 #, 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/sudo_nss.c:309 +#: plugins/sudoers/sudo_nss.c:308 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Runas- ja Command-kohtaiset oletukset kohteelle %s:\n" -#: plugins/sudoers/sudo_nss.c:322 +#: plugins/sudoers/sudo_nss.c:326 #, 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/sudo_nss.c:331 +#: plugins/sudoers/sudo_nss.c:339 #, 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/sudoers.c:160 plugins/sudoers/sudoers.c:201 -#: plugins/sudoers/sudoers.c:726 +#: plugins/sudoers/sudoers.c:172 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/visudo.c:223 plugins/sudoers/visudo.c:566 +msgid "unable to initialize sudoers default values" +msgstr "sudoers-oletusarvojen alustaminen epäonnistui" + +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:239 +#: plugins/sudoers/sudoers.c:833 msgid "problem with defaults entries" msgstr "oletusrivien pulma" -#: plugins/sudoers/sudoers.c:167 +#: plugins/sudoers/sudoers.c:205 msgid "no valid sudoers sources found, quitting" msgstr "ei löytynyt kelvollisia sudoers-lähteitä, poistutaan" -#: plugins/sudoers/sudoers.c:233 +#: plugins/sudoers/sudoers.c:275 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:278 +#: plugins/sudoers/sudoers.c:332 msgid "you are not permitted to use the -C option" msgstr "ei käyttöoikeuksia valitsimelle -C" -#: plugins/sudoers/sudoers.c:336 +#: plugins/sudoers/sudoers.c:396 #, c-format msgid "timestamp owner (%s): No such user" msgstr "aikaleimaomistaja (%s): Tuntematon käyttäjä" -#: plugins/sudoers/sudoers.c:350 +#: plugins/sudoers/sudoers.c:410 msgid "no tty" msgstr "ei tty:tä" -#: plugins/sudoers/sudoers.c:351 +#: plugins/sudoers/sudoers.c:411 msgid "sorry, you must have a tty to run sudo" msgstr "sudo-komennon suorittamiseksi on oltava tty" -#: plugins/sudoers/sudoers.c:402 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "komento nykyisessä hakemistossa" -#: plugins/sudoers/sudoers.c:422 +#: plugins/sudoers/sudoers.c:486 msgid "sorry, you are not allowed to preserve the environment" msgstr "ympäristöä ei ole lupa säilyttää" -#: plugins/sudoers/sudoers.c:674 +#: plugins/sudoers/sudoers.c:778 msgid "command too long" msgstr "komento on liian pitkä" -#: plugins/sudoers/sudoers.c:779 plugins/sudoers/visudo.c:333 -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/sudoers.c:886 plugins/sudoers/visudo.c:426 +#: plugins/sudoers/visudo.c:666 #, c-format msgid "unable to stat %s" msgstr "funktion stat %s kutsuminen epäonnistui" -#: plugins/sudoers/sudoers.c:783 +#: plugins/sudoers/sudoers.c:890 #, c-format msgid "%s is not a regular file" msgstr "%s ei ole tavallinen tiedosto" -#: plugins/sudoers/sudoers.c:787 plugins/sudoers/timestamp.c:289 toke.l:945 +#: plugins/sudoers/sudoers.c:894 plugins/sudoers/timestamp.c:225 toke.l:947 #, 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:791 toke.l:952 +#: plugins/sudoers/sudoers.c:898 toke.l:954 #, c-format msgid "%s is world writable" msgstr "%s on yleiskirjoitettava" -#: plugins/sudoers/sudoers.c:795 toke.l:957 +#: plugins/sudoers/sudoers.c:902 toke.l:959 #, 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:826 +#: plugins/sudoers/sudoers.c:933 #, 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:845 +#: plugins/sudoers/sudoers.c:952 #, c-format msgid "unknown login class: %s" msgstr "tuntematon kirjautumisluokka: %s" -#: plugins/sudoers/sudoers.c:889 plugins/sudoers/sudoers.c:904 +#: plugins/sudoers/sudoers.c:1031 plugins/sudoers/sudoers.c:1059 #, c-format msgid "unable to resolve host %s" msgstr "tietokoneen %s ratkaiseminen epäonnistui" -#: plugins/sudoers/sudoers.c:986 plugins/sudoers/testsudoers.c:388 +#: plugins/sudoers/sudoers.c:1126 plugins/sudoers/testsudoers.c:385 #, c-format msgid "unknown group: %s" msgstr "tuntematon ryhmä: %s" -#: plugins/sudoers/sudoreplay.c:280 +#: plugins/sudoers/sudoreplay.c:232 #, c-format msgid "invalid filter option: %s" msgstr "virheellinen suodatinvalitsin: %s" -#: plugins/sudoers/sudoreplay.c:293 +#: plugins/sudoers/sudoreplay.c:245 #, c-format msgid "invalid max wait: %s" msgstr "virheellinen enimmäisodotusaika: %s" -#: plugins/sudoers/sudoreplay.c:299 +#: plugins/sudoers/sudoreplay.c:251 #, c-format msgid "invalid speed factor: %s" msgstr "virheellinen nopeustekijä: %s" -#: plugins/sudoers/sudoreplay.c:302 plugins/sudoers/visudo.c:190 +#: plugins/sudoers/sudoreplay.c:254 plugins/sudoers/visudo.c:180 #, c-format msgid "%s version %s\n" msgstr "%s versio %s\n" -#: plugins/sudoers/sudoreplay.c:334 +#: plugins/sudoers/sudoreplay.c:286 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/ajoitus: %s" -#: plugins/sudoers/sudoreplay.c:340 +#: plugins/sudoers/sudoreplay.c:292 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/ajoitus: %s" -#: plugins/sudoers/sudoreplay.c:356 +#: plugins/sudoers/sudoreplay.c:308 #, c-format msgid "Replaying sudo session: %s\n" msgstr "Toistetaan sudo-istunto: %s\n" -#: plugins/sudoers/sudoreplay.c:362 +#: plugins/sudoers/sudoreplay.c:314 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Varoitus: pääteikkunasi on liian pieni tämän lokin toistamiseksi oikein.\n" -#: plugins/sudoers/sudoreplay.c:363 +#: plugins/sudoers/sudoreplay.c:315 #, 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:418 +#: plugins/sudoers/sudoreplay.c:368 msgid "unable to set tty to raw mode" msgstr "tty:n asettaminen raakatilaan epäonnistui" -#: plugins/sudoers/sudoreplay.c:449 +#: plugins/sudoers/sudoreplay.c:401 #, c-format msgid "invalid timing file line: %s" msgstr "virheellinen ajoitustiedostorivi: %s" -#: plugins/sudoers/sudoreplay.c:655 plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:611 plugins/sudoers/sudoreplay.c:636 #, c-format msgid "ambiguous expression \"%s\"" msgstr "monimerkityksellinen lauseke ”%s”" -#: plugins/sudoers/sudoreplay.c:702 +#: plugins/sudoers/sudoreplay.c:658 msgid "unmatched ')' in expression" msgstr "täsmäämätön ’)’ lausekkeessa" -#: plugins/sudoers/sudoreplay.c:706 +#: plugins/sudoers/sudoreplay.c:662 #, c-format msgid "unknown search term \"%s\"" msgstr "tuntematon hakutermi ”%s”" -#: plugins/sudoers/sudoreplay.c:720 +#: plugins/sudoers/sudoreplay.c:677 #, c-format msgid "%s requires an argument" msgstr "%s vaatii argumentin" -#: plugins/sudoers/sudoreplay.c:724 plugins/sudoers/sudoreplay.c:1096 +#: plugins/sudoers/sudoreplay.c:680 plugins/sudoers/sudoreplay.c:1060 #, c-format msgid "invalid regular expression: %s" msgstr "virheellinen säännöllinen lauseke: %s" -#: plugins/sudoers/sudoreplay.c:730 +#: plugins/sudoers/sudoreplay.c:684 #, c-format msgid "could not parse date \"%s\"" msgstr "päivämäärän ”%s” jäsentäminen epäonnistui" -#: plugins/sudoers/sudoreplay.c:739 +#: plugins/sudoers/sudoreplay.c:693 msgid "unmatched '(' in expression" msgstr "täsmäämätön ’(’ lausekkeessa" -#: plugins/sudoers/sudoreplay.c:741 +#: plugins/sudoers/sudoreplay.c:695 msgid "illegal trailing \"or\"" msgstr "virheellinen jäljessä oleva ”or”" -#: plugins/sudoers/sudoreplay.c:743 +#: plugins/sudoers/sudoreplay.c:697 msgid "illegal trailing \"!\"" msgstr "virheellinen jäljessä oleva ”!”" -#: plugins/sudoers/sudoreplay.c:796 +#: plugins/sudoers/sudoreplay.c:746 #, c-format msgid "unknown search type %d" msgstr "tuntematon hakutyyppi %d" -#: plugins/sudoers/sudoreplay.c:833 +#: plugins/sudoers/sudoreplay.c:784 #, c-format msgid "%s: invalid log file" msgstr "%s: virheellinen lokitiedosto" -#: plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:802 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: aikaleimakenttä puuttuu" -#: plugins/sudoers/sudoreplay.c:858 +#: plugins/sudoers/sudoreplay.c:809 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: aikaleima %s: %s" -#: plugins/sudoers/sudoreplay.c:865 +#: plugins/sudoers/sudoreplay.c:816 #, c-format msgid "%s: user field is missing" msgstr "%s: käyttäjäkenttä puuttuu" -#: plugins/sudoers/sudoreplay.c:873 +#: plugins/sudoers/sudoreplay.c:825 #, c-format msgid "%s: runas user field is missing" msgstr "%s: suorita käyttäjänä-kenttä puuttuu" -#: plugins/sudoers/sudoreplay.c:881 +#: plugins/sudoers/sudoreplay.c:834 #, c-format msgid "%s: runas group field is missing" msgstr "%s: suorita ryhmänä-kenttä puuttuu" -#: plugins/sudoers/sudoreplay.c:1236 +#: plugins/sudoers/sudoreplay.c:1197 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "käyttö: %s [-h] [-d hakemisto] [-m numero] [-s numero] ID-tunniste\n" -#: plugins/sudoers/sudoreplay.c:1239 +#: plugins/sudoers/sudoreplay.c:1200 #, 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:1248 +#: plugins/sudoers/sudoreplay.c:1209 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1483,7 +1645,7 @@ "%s - toista sudo-istuntolokit\n" "\n" -#: plugins/sudoers/sudoreplay.c:1250 +#: plugins/sudoers/sudoreplay.c:1211 msgid "" "\n" "Options:\n" @@ -1505,11 +1667,11 @@ " -s, --speed=numero nopeustekijä nopeuta tai hidasta tulostusta\n" " -V, --version näytä versiotiedot ja poistu" -#: plugins/sudoers/testsudoers.c:327 +#: plugins/sudoers/testsudoers.c:324 msgid "\thost unmatched" msgstr "\ttietokone täsmäämätön" -#: plugins/sudoers/testsudoers.c:330 +#: plugins/sudoers/testsudoers.c:327 msgid "" "\n" "Command allowed" @@ -1517,7 +1679,7 @@ "\n" "Komento sallittu" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command denied" @@ -1525,7 +1687,7 @@ "\n" "Komento kielletty" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command unmatched" @@ -1533,114 +1695,129 @@ "\n" "Täsmäämätön komento" -#: plugins/sudoers/timestamp.c:197 -#, 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:297 +#: plugins/sudoers/timestamp.c:233 #, c-format msgid "%s is group writable" msgstr "%s on ryhmäkirjoitettava" -#: plugins/sudoers/timestamp.c:318 +#: plugins/sudoers/timestamp.c:309 #, c-format -msgid "timestamp path too long: %s/%s" -msgstr "aikaleimapolku on liian pitkä: %s/%s" +msgid "unable to truncate time stamp file to %lld bytes" +msgstr "aikaleimatiedoston typistäminen %lld-tavun kokoiseksi epäonnistui" -#: plugins/sudoers/timestamp.c:498 +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:487 plugins/sudoers/visudo.c:493 +msgid "unable to read the clock" +msgstr "kellon lukeminen epäonnistui" + +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "ohitetaan aikaleima tulevaisuudesta" -#: plugins/sudoers/timestamp.c:510 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "aikaleima liian kaukana tulevaisuudessa: %20.20s" -#: plugins/sudoers/timestamp.c:613 plugins/sudoers/timestamp.c:634 +#: plugins/sudoers/timestamp.c:863 +#, c-format +msgid "unable to lock time stamp file %s" +msgstr "aikaleimatiedoston %s lukitseminen epäonnistui" + +#: plugins/sudoers/timestamp.c:906 plugins/sudoers/timestamp.c:926 #, c-format msgid "lecture status path too long: %s/%s" msgstr "luentotilapolku on liian pitkä: %s/%s" -#: plugins/sudoers/visudo.c:192 +#: plugins/sudoers/visudo.c:182 #, c-format msgid "%s grammar version %d\n" msgstr "%s kielioppiversio %d\n" -#: plugins/sudoers/visudo.c:263 plugins/sudoers/visudo.c:552 +#: plugins/sudoers/visudo.c:254 plugins/sudoers/visudo.c:618 #, c-format msgid "press return to edit %s: " msgstr "muokkaa %s painamalla enter-painiketta: " -#: plugins/sudoers/visudo.c:349 plugins/sudoers/visudo.c:355 +#: plugins/sudoers/visudo.c:319 +#, c-format +msgid "specified editor (%s) doesn't exist" +msgstr "määritelty editori (%s) ei ole olemassa" + +#: plugins/sudoers/visudo.c:337 +#, c-format +msgid "no editor found (editor path = %s)" +msgstr "editoria ei löytynyt (editoripolku = %s)" + +#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:454 msgid "write error" msgstr "kirjoitusvirhe" -#: plugins/sudoers/visudo.c:439 +#: plugins/sudoers/visudo.c:500 #, 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:444 +#: plugins/sudoers/visudo.c:507 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "nollapituinen tilapäinen tiedosto (%s), %s ennallaan" -#: plugins/sudoers/visudo.c:450 +#: plugins/sudoers/visudo.c:513 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "editori (%s) epäonnistui, %s ennallaan" -#: plugins/sudoers/visudo.c:472 +#: plugins/sudoers/visudo.c:535 #, c-format msgid "%s unchanged" msgstr "%s ennallaan" -#: plugins/sudoers/visudo.c:497 +#: plugins/sudoers/visudo.c:561 #, 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:507 +#: plugins/sudoers/visudo.c:572 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "tilapäisen tiedoston (%s) jäsentäminen epäonnistui, tuntematon virhe" -#: plugins/sudoers/visudo.c:543 +#: plugins/sudoers/visudo.c:609 #, 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:601 plugins/sudoers/visudo.c:610 +#: plugins/sudoers/visudo.c:668 plugins/sudoers/visudo.c:677 #, 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:605 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:672 plugins/sudoers/visudo.c:682 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "tilan %s vaihtaminen arvoon 0%o epäonnistui" -#: plugins/sudoers/visudo.c:632 +#: plugins/sudoers/visudo.c:699 #, 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:646 +#: plugins/sudoers/visudo.c:713 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "komento epäonnistui: ’%s %s %s’, %s ennallaan" -#: plugins/sudoers/visudo.c:656 +#: plugins/sudoers/visudo.c:723 #, c-format msgid "error renaming %s, %s unchanged" msgstr "virhe nimettäessä %s uudelleen, %s ennallaan" -#: plugins/sudoers/visudo.c:718 +#: plugins/sudoers/visudo.c:785 msgid "What now? " msgstr "Mitä nyt?" -#: plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:799 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1653,87 +1830,72 @@ " (Q) poistu ja tallenna muutokset sudoers-tiedostoon (VAARA!)\n" # Parametri on path, mutta saattaa sisältää suoritettavan ohjelman -#: plugins/sudoers/visudo.c:780 +#: plugins/sudoers/visudo.c:847 #, c-format msgid "unable to run %s" msgstr "kohteen %s suorittaminen epäonnistui" -#: plugins/sudoers/visudo.c:806 +#: plugins/sudoers/visudo.c:877 #, 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:813 +#: plugins/sudoers/visudo.c:884 #, 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:838 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:909 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "failed to parse %s file, unknown error" msgstr "tiedoston %s jäsentäminen epäonnistui, tuntematon virhe" -#: plugins/sudoers/visudo.c:854 plugins/sudoers/visudo_json.c:1054 +#: plugins/sudoers/visudo.c:925 plugins/sudoers/visudo_json.c:1041 #, c-format msgid "parse error in %s near line %d\n" msgstr "jäsentämisvirhe tiedostossa %s lähellä riviä %d\n" -#: plugins/sudoers/visudo.c:857 plugins/sudoers/visudo_json.c:1057 +#: plugins/sudoers/visudo.c:928 plugins/sudoers/visudo_json.c:1044 #, c-format msgid "parse error in %s\n" msgstr "jäsentämisvirhe tiedostossa %s\n" -#: plugins/sudoers/visudo.c:865 plugins/sudoers/visudo.c:872 +#: plugins/sudoers/visudo.c:936 plugins/sudoers/visudo.c:943 #, c-format msgid "%s: parsed OK\n" msgstr "%s: jäsentäminen valmis\n" -#: plugins/sudoers/visudo.c:918 +#: plugins/sudoers/visudo.c:990 #, c-format msgid "%s busy, try again later" msgstr "%s varattu, yritä myöhemmin uudelleen" -#: plugins/sudoers/visudo.c:962 -#, c-format -msgid "specified editor (%s) doesn't exist" -msgstr "määritelty editori (%s) ei ole olemassa" - -#: plugins/sudoers/visudo.c:985 -#, c-format -msgid "unable to stat editor (%s)" -msgstr "funktion stat editor (%s) kutsuminen epäonnistui" - -#: plugins/sudoers/visudo.c:1033 -#, c-format -msgid "no editor found (editor path = %s)" -msgstr "editoria ei löytynyt (editoripolku = %s)" - -#: plugins/sudoers/visudo.c:1136 +#: plugins/sudoers/visudo.c:1086 #, c-format msgid "Error: cycle in %s `%s'" msgstr "Virhe: jakso kohteessa %s ”%s”" -#: plugins/sudoers/visudo.c:1137 +#: plugins/sudoers/visudo.c:1087 #, c-format msgid "Warning: cycle in %s `%s'" msgstr "Varoitus: jakso kohteessa %s ”%s”" -#: plugins/sudoers/visudo.c:1141 +#: plugins/sudoers/visudo.c:1091 #, c-format msgid "Error: %s `%s' referenced but not defined" msgstr "Virhe: %s ”%s” uudelleenviitattu, mutta ei määritelty" -#: plugins/sudoers/visudo.c:1142 +#: plugins/sudoers/visudo.c:1092 #, c-format msgid "Warning: %s `%s' referenced but not defined" msgstr "Varoitus: %s ”%s” uudelleenviitattu, mutta ei määritelty" -#: plugins/sudoers/visudo.c:1281 +#: plugins/sudoers/visudo.c:1235 #, c-format msgid "Warning: unused %s `%s'" msgstr "Varoitus: käyttämätön %s ”%s”" -#: plugins/sudoers/visudo.c:1394 +#: plugins/sudoers/visudo.c:1348 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -1742,7 +1904,7 @@ "%s - muokkaa sudoers-tiedostoa turvallisesti\n" "\n" -#: plugins/sudoers/visudo.c:1396 +#: plugins/sudoers/visudo.c:1350 msgid "" "\n" "Options:\n" @@ -1764,15 +1926,30 @@ " -V, --version näytä versiotiedot ja poistu\n" " -x, --export=output_file kirjoita sudoers-tiedosto JSON-muodossa tiedostoon output_file" -#: plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo_json.c:1018 #, c-format msgid "%s: input and output files must be different" msgstr "%s: syöte- ja tulostetiedostojen on oltava erilaiset" -#: toke.l:915 +#: toke.l:918 msgid "too many levels of includes" msgstr "liian monta include-tasoa" +#~ msgid "timestamp path too long: %s/%s" +#~ msgstr "aikaleimapolku on liian pitkä: %s/%s" + +#~ msgid "unable to stat editor (%s)" +#~ msgstr "funktion stat editor (%s) kutsuminen epäonnistui" + +#~ msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" +#~ msgstr "sudo_ldap_conf_add_ports: hostbuf-puskuritila loppui" + +#~ msgid "sudo_ldap_parse_uri: out of space building hostbuf" +#~ msgstr "sudo_ldap_parse_uri: hostbuf-puskuritila loppui" + +#~ msgid "sudo_ldap_build_pass1 allocation mismatch" +#~ msgstr "sudo_ldap_build_pass1-varaustäsmäämättömyys" + #~ msgid "Password:" #~ msgstr "Salasana:" @@ -1885,9 +2062,6 @@ #~ msgid ">>> %s: %s near line %d <<<" #~ msgstr ">>> %s: %s lähellä riviä %d <<<" -#~ msgid "unable to allocate memory" -#~ msgstr "muistin varaaminen epäonnistui" - #~ msgid "unable to set locale to \"%s\", using \"C\"" #~ msgstr "locale-asetuksen ”%s” asettaminen epäonnistui, käytetään ”C”" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/plugins/sudoers/po/fr.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/plugins/sudoers/po/fr.mo differ diff -Nru sudo-1.8.12/plugins/sudoers/po/fr.po sudo-1.8.16/plugins/sudoers/po/fr.po --- sudo-1.8.12/plugins/sudoers/po/fr.po 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/po/fr.po 2016-03-17 16:13:10.000000000 +0000 @@ -1,13 +1,13 @@ # This file is put in the public domain. # This file is distributed under the same license as the sudo package. # -# Frédéric Hantrais , 2014. +# Frédéric Hantrais , 2014, 2015, 2016. msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.11b1\n" +"Project-Id-Version: sudoers 1.8.15rc3\n" "Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-07-30 09:37-0600\n" -"PO-Revision-Date: 2014-10-01 21:45-0400\n" +"POT-Creation-Date: 2015-10-24 06:26-0600\n" +"PO-Revision-Date: 2016-02-14 08:17-0500\n" "Last-Translator: Frédéric Hantrais \n" "Language-Team: French \n" "Language: fr\n" @@ -15,56 +15,198 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Lokalize 1.4\n" +"X-Generator: Lokalize 1.5\n" + +#: confstr.sh:1 +msgid "syntax error" +msgstr "erreur de syntaxe" #: confstr.sh:2 -msgid "Password:" -msgstr "Mot de passe :" +msgid "%p's password: " +msgstr "Mot de passe de %p : " #: confstr.sh:3 +msgid "[sudo] password for %p: " +msgstr "[sudo] Mot de passe de %p : " + +#: confstr.sh:4 +msgid "Password: " +msgstr "Mot de passe : " + +#: confstr.sh:5 msgid "*** SECURITY information for %h ***" msgstr "*** Informations de sécurité pour %h ***" -#: confstr.sh:4 +#: confstr.sh:6 msgid "Sorry, try again." msgstr "Désolé, essayez de nouveau." -#: plugins/sudoers/alias.c:136 +#: gram.y:183 gram.y:201 gram.y:207 gram.y:213 gram.y:219 gram.y:225 +#: gram.y:241 gram.y:248 gram.y:255 gram.y:262 gram.y:269 gram.y:285 +#: gram.y:308 gram.y:315 gram.y:322 gram.y:329 gram.y:336 gram.y:391 +#: gram.y:399 gram.y:409 gram.y:439 gram.y:446 gram.y:453 gram.y:460 +#: gram.y:572 gram.y:579 gram.y:588 gram.y:597 gram.y:614 gram.y:670 +#: gram.y:677 gram.y:684 gram.y:692 gram.y:784 gram.y:791 gram.y:798 +#: gram.y:805 gram.y:812 gram.y:838 gram.y:845 gram.y:852 gram.y:1136 +#: gram.y:1143 plugins/sudoers/alias.c:123 plugins/sudoers/alias.c:136 +#: plugins/sudoers/auth/bsdauth.c:141 plugins/sudoers/auth/kerb5.c:119 +#: plugins/sudoers/auth/kerb5.c:145 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/pam.c:449 plugins/sudoers/auth/rfc1938.c:109 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:516 +#: plugins/sudoers/defaults.c:720 plugins/sudoers/defaults.c:880 +#: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 +#: plugins/sudoers/editor.c:92 plugins/sudoers/env.c:233 +#: plugins/sudoers/group_plugin.c:133 plugins/sudoers/iolog.c:586 +#: plugins/sudoers/iolog.c:618 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:446 plugins/sudoers/ldap.c:477 +#: plugins/sudoers/ldap.c:529 plugins/sudoers/ldap.c:562 +#: plugins/sudoers/ldap.c:914 plugins/sudoers/ldap.c:1061 +#: plugins/sudoers/ldap.c:1348 plugins/sudoers/ldap.c:1521 +#: plugins/sudoers/ldap.c:1597 plugins/sudoers/ldap.c:1733 +#: plugins/sudoers/ldap.c:1757 plugins/sudoers/ldap.c:1787 +#: plugins/sudoers/ldap.c:1840 plugins/sudoers/ldap.c:1855 +#: plugins/sudoers/ldap.c:1951 plugins/sudoers/ldap.c:1984 +#: plugins/sudoers/ldap.c:2137 plugins/sudoers/ldap.c:2234 +#: plugins/sudoers/ldap.c:3041 plugins/sudoers/ldap.c:3074 +#: plugins/sudoers/ldap.c:3388 plugins/sudoers/ldap.c:3416 +#: plugins/sudoers/ldap.c:3427 plugins/sudoers/ldap.c:3517 +#: plugins/sudoers/ldap.c:3533 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:666 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:501 +#: plugins/sudoers/match.c:537 plugins/sudoers/match.c:699 +#: plugins/sudoers/match.c:756 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:384 +#: plugins/sudoers/policy.c:583 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/sssd.c:160 plugins/sudoers/sssd.c:192 +#: plugins/sudoers/sssd.c:235 plugins/sudoers/sssd.c:242 +#: plugins/sudoers/sssd.c:278 plugins/sudoers/sssd.c:323 +#: plugins/sudoers/sssd.c:917 plugins/sudoers/sssd.c:1050 +#: plugins/sudoers/sudoers.c:159 plugins/sudoers/sudoers.c:294 +#: plugins/sudoers/sudoers.c:304 plugins/sudoers/sudoers.c:312 +#: plugins/sudoers/sudoers.c:365 plugins/sudoers/sudoers.c:663 +#: plugins/sudoers/sudoers.c:749 plugins/sudoers/sudoers.c:793 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:472 +#: plugins/sudoers/sudoreplay.c:668 plugins/sudoers/sudoreplay.c:780 +#: plugins/sudoers/sudoreplay.c:820 plugins/sudoers/sudoreplay.c:829 +#: plugins/sudoers/sudoreplay.c:839 plugins/sudoers/sudoreplay.c:847 +#: plugins/sudoers/sudoreplay.c:851 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1011 plugins/sudoers/testsudoers.c:130 +#: plugins/sudoers/testsudoers.c:188 plugins/sudoers/testsudoers.c:215 +#: plugins/sudoers/testsudoers.c:232 plugins/sudoers/timestamp.c:390 +#: plugins/sudoers/timestamp.c:426 plugins/sudoers/timestamp.c:838 +#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 +#: plugins/sudoers/toke_util.c:147 plugins/sudoers/visudo.c:152 +#: plugins/sudoers/visudo.c:213 plugins/sudoers/visudo.c:297 +#: plugins/sudoers/visudo.c:303 plugins/sudoers/visudo.c:433 +#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo.c:1023 +#: plugins/sudoers/visudo.c:1119 toke.l:785 toke.l:806 toke.l:816 toke.l:924 +#: toke.l:1082 +msgid "unable to allocate memory" +msgstr "impossible d'allouer la mémoire" + +#: gram.y:471 +msgid "a digest requires a path name" +msgstr "un résumé (digest) nécessite un chemin d'accès" + +#: gram.y:1136 gram.y:1143 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/pam.c:449 plugins/sudoers/auth/rfc1938.c:109 +#: plugins/sudoers/defaults.c:516 plugins/sudoers/defaults.c:720 +#: plugins/sudoers/defaults.c:880 plugins/sudoers/editor.c:64 +#: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:92 +#: plugins/sudoers/env.c:233 plugins/sudoers/group_plugin.c:133 +#: plugins/sudoers/iolog.c:586 plugins/sudoers/iolog.c:618 +#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:446 +#: plugins/sudoers/ldap.c:477 plugins/sudoers/ldap.c:529 +#: plugins/sudoers/ldap.c:562 plugins/sudoers/ldap.c:914 +#: plugins/sudoers/ldap.c:1061 plugins/sudoers/ldap.c:1348 +#: plugins/sudoers/ldap.c:1521 plugins/sudoers/ldap.c:1597 +#: plugins/sudoers/ldap.c:1733 plugins/sudoers/ldap.c:1757 +#: plugins/sudoers/ldap.c:1787 plugins/sudoers/ldap.c:1840 +#: plugins/sudoers/ldap.c:1855 plugins/sudoers/ldap.c:1951 +#: plugins/sudoers/ldap.c:1984 plugins/sudoers/ldap.c:2137 +#: plugins/sudoers/ldap.c:2234 plugins/sudoers/ldap.c:3041 +#: plugins/sudoers/ldap.c:3074 plugins/sudoers/ldap.c:3388 +#: plugins/sudoers/ldap.c:3416 plugins/sudoers/ldap.c:3427 +#: plugins/sudoers/ldap.c:3517 plugins/sudoers/ldap.c:3533 +#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:501 +#: plugins/sudoers/match.c:537 plugins/sudoers/match.c:699 +#: plugins/sudoers/match.c:756 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:97 +#: plugins/sudoers/policy.c:106 plugins/sudoers/policy.c:115 +#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:250 +#: plugins/sudoers/policy.c:271 plugins/sudoers/policy.c:280 +#: plugins/sudoers/policy.c:319 plugins/sudoers/policy.c:329 +#: plugins/sudoers/policy.c:338 plugins/sudoers/policy.c:384 +#: plugins/sudoers/policy.c:583 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:160 +#: plugins/sudoers/sssd.c:192 plugins/sudoers/sssd.c:235 +#: plugins/sudoers/sssd.c:242 plugins/sudoers/sssd.c:278 +#: plugins/sudoers/sssd.c:323 plugins/sudoers/sssd.c:917 +#: plugins/sudoers/sssd.c:1050 plugins/sudoers/sudoers.c:159 +#: plugins/sudoers/sudoers.c:294 plugins/sudoers/sudoers.c:304 +#: plugins/sudoers/sudoers.c:312 plugins/sudoers/sudoers.c:365 +#: plugins/sudoers/sudoers.c:663 plugins/sudoers/sudoers.c:749 +#: plugins/sudoers/sudoers.c:793 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sudoreplay.c:472 plugins/sudoers/sudoreplay.c:668 +#: plugins/sudoers/sudoreplay.c:780 plugins/sudoers/sudoreplay.c:820 +#: plugins/sudoers/sudoreplay.c:829 plugins/sudoers/sudoreplay.c:839 +#: plugins/sudoers/sudoreplay.c:847 plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:1007 plugins/sudoers/sudoreplay.c:1011 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:188 +#: plugins/sudoers/testsudoers.c:215 plugins/sudoers/testsudoers.c:232 +#: plugins/sudoers/timestamp.c:390 plugins/sudoers/timestamp.c:426 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:147 +#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:213 +#: plugins/sudoers/visudo.c:297 plugins/sudoers/visudo.c:303 +#: plugins/sudoers/visudo.c:433 plugins/sudoers/visudo.c:979 +#: plugins/sudoers/visudo.c:1023 plugins/sudoers/visudo.c:1119 toke.l:785 +#: toke.l:806 toke.l:816 toke.l:924 toke.l:1082 +#, c-format +msgid "%s: %s" +msgstr "%s : %s" + +#: plugins/sudoers/alias.c:132 #, c-format msgid "Alias `%s' already defined" msgstr "L'alias « %s » est déjà défini" -#: plugins/sudoers/auth/bsdauth.c:75 +#: plugins/sudoers/auth/bsdauth.c:68 #, c-format msgid "unable to get login class for user %s" msgstr "récupération de la classe de connexion impossible pour l'utilisateur %s" -#: plugins/sudoers/auth/bsdauth.c:80 +#: plugins/sudoers/auth/bsdauth.c:73 msgid "unable to begin bsd authentication" msgstr "démarrage de l'authentification bsd impossible" -#: plugins/sudoers/auth/bsdauth.c:88 +#: plugins/sudoers/auth/bsdauth.c:81 msgid "invalid authentication type" msgstr "type d'authentification non valide" -#: plugins/sudoers/auth/bsdauth.c:97 +#: plugins/sudoers/auth/bsdauth.c:90 msgid "unable to initialize BSD authentication" msgstr "démarrage de l'authentification BSD impossible" -#: plugins/sudoers/auth/fwtk.c:59 +#: plugins/sudoers/auth/fwtk.c:52 msgid "unable to read fwtk config" msgstr "lecture de la configuration fwtk (firewall) impossible" -#: plugins/sudoers/auth/fwtk.c:64 +#: plugins/sudoers/auth/fwtk.c:57 msgid "unable to connect to authentication server" msgstr "connexion au serveur d'authentification impossible" -#: plugins/sudoers/auth/fwtk.c:70 plugins/sudoers/auth/fwtk.c:94 -#: plugins/sudoers/auth/fwtk.c:127 +#: plugins/sudoers/auth/fwtk.c:63 plugins/sudoers/auth/fwtk.c:87 +#: plugins/sudoers/auth/fwtk.c:120 msgid "lost connection to authentication server" msgstr "perte de la connexion au serveur d'authentification" -#: plugins/sudoers/auth/fwtk.c:74 +#: plugins/sudoers/auth/fwtk.c:67 #, c-format msgid "" "authentication server error:\n" @@ -73,151 +215,155 @@ "erreur du serveur d'authentification :\n" "%s" -#: plugins/sudoers/auth/kerb5.c:116 +#: plugins/sudoers/auth/kerb5.c:111 #, c-format msgid "%s: unable to convert principal to string ('%s'): %s" msgstr "%s : conversion de l'identité de l'hôte en chaîne de caractères impossible(« %s ») : %s" -#: plugins/sudoers/auth/kerb5.c:158 +#: plugins/sudoers/auth/kerb5.c:161 #, c-format msgid "%s: unable to parse '%s': %s" msgstr "%s : analyse grammaticale (parse) de « %s » impossible : %s" -#: plugins/sudoers/auth/kerb5.c:167 +#: plugins/sudoers/auth/kerb5.c:170 #, c-format msgid "%s: unable to resolve credential cache: %s" msgstr "%s : accès au cache des données d'identification impossible : %s" -#: plugins/sudoers/auth/kerb5.c:214 +#: plugins/sudoers/auth/kerb5.c:217 #, c-format msgid "%s: unable to allocate options: %s" -msgstr "%s : allocation des options impossible : %s" +msgstr "%s : allocation des options impossible : %s" -#: plugins/sudoers/auth/kerb5.c:229 +#: plugins/sudoers/auth/kerb5.c:232 #, c-format msgid "%s: unable to get credentials: %s" -msgstr "%s : récupération des données d'identification impossible : %s" +msgstr "%s : récupération des données d'identification impossible : %s" -#: plugins/sudoers/auth/kerb5.c:242 +#: plugins/sudoers/auth/kerb5.c:245 #, c-format msgid "%s: unable to initialize credential cache: %s" -msgstr "%s : initialisation du cache des données d'identification impossible : %s" +msgstr "%s : initialisation du cache des données d'identification impossible : %s" -#: plugins/sudoers/auth/kerb5.c:245 +#: plugins/sudoers/auth/kerb5.c:248 #, c-format msgid "%s: unable to store credential in cache: %s" msgstr "%s : enregistrement des données d'identification dans le cache impossible : %s" -#: plugins/sudoers/auth/kerb5.c:309 +#: plugins/sudoers/auth/kerb5.c:312 #, c-format msgid "%s: unable to get host principal: %s" -msgstr "%s : récupération de l'identité kerberos de l'hôte (host \"\"principal) impossible: %s" +msgstr "%s : récupération de l'identité kerberos de l'hôte (host \"\"principal) impossible : %s" -#: plugins/sudoers/auth/kerb5.c:323 +#: plugins/sudoers/auth/kerb5.c:326 #, c-format msgid "%s: Cannot verify TGT! Possible attack!: %s" -msgstr "%s : vérification du ticket TGT impossible ! Il s'agit peut-être d'une attaque ! : %s" +msgstr "%s : vérification du ticket TGT impossible ! Il s'agit peut-être d'une attaque ! : %s" -#: plugins/sudoers/auth/pam.c:98 +#: plugins/sudoers/auth/pam.c:92 msgid "unable to initialize PAM" msgstr "initialisation du module PAM impossible" -#: plugins/sudoers/auth/pam.c:149 +#: plugins/sudoers/auth/pam.c:164 msgid "account validation failure, is your account locked?" msgstr "la validation du compte a échoué, vérifiez que le compte n'est pas verrouillé. " -#: plugins/sudoers/auth/pam.c:153 +#: plugins/sudoers/auth/pam.c:168 msgid "Account or password is expired, reset your password and try again" msgstr "Le compte ou le mot de passe a expiré, réinitialisez votre mot de passe puis réessayez de vous connecter" -#: plugins/sudoers/auth/pam.c:161 +#: plugins/sudoers/auth/pam.c:176 #, c-format msgid "unable to change expired password: %s" msgstr "changement du mot de passe expiré impossible : %s" -#: plugins/sudoers/auth/pam.c:166 +#: plugins/sudoers/auth/pam.c:181 msgid "Password expired, contact your system administrator" msgstr "Le mot de passe a expiré, contactez votre administrateur système" -#: plugins/sudoers/auth/pam.c:170 +#: plugins/sudoers/auth/pam.c:185 msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator" msgstr "Le compte a expiré, ou la section « account » du module PAM n'est pas renseignée pour sudo, contactez votre administrateur système" -#: plugins/sudoers/auth/pam.c:187 +#: plugins/sudoers/auth/pam.c:199 #, c-format msgid "PAM authentication error: %s" msgstr "Erreur du serveur d'authentification PAM : %s" -#: plugins/sudoers/auth/rfc1938.c:103 plugins/sudoers/visudo.c:222 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:218 #, c-format msgid "you do not exist in the %s database" msgstr "votre compte n'existe pas dans la base de données %s" -#: plugins/sudoers/auth/securid5.c:80 +#: plugins/sudoers/auth/securid5.c:73 msgid "failed to initialise the ACE API library" msgstr "échec de l'initialisation de la bibliothèque d'API ACE" -#: plugins/sudoers/auth/securid5.c:106 +#: plugins/sudoers/auth/securid5.c:99 msgid "unable to contact the SecurID server" msgstr "le contact avec le serveur SecurID n'a pas pu être établi" -#: plugins/sudoers/auth/securid5.c:115 +#: plugins/sudoers/auth/securid5.c:108 msgid "User ID locked for SecurID Authentication" msgstr "échec de l'authentification SecurId, l'identifiant de l'utilisateur est verrouillé" -#: plugins/sudoers/auth/securid5.c:119 plugins/sudoers/auth/securid5.c:170 +#: plugins/sudoers/auth/securid5.c:112 plugins/sudoers/auth/securid5.c:163 msgid "invalid username length for SecurID" msgstr "la longueur du nom de l'utilisateur n'est pas conforme aux règles fixées pour SecurID" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:175 +#: plugins/sudoers/auth/securid5.c:116 plugins/sudoers/auth/securid5.c:168 msgid "invalid Authentication Handle for SecurID" msgstr "le mode de traitement de l'authentification n'est pas accepté par SecurID" -#: plugins/sudoers/auth/securid5.c:127 +#: plugins/sudoers/auth/securid5.c:120 msgid "SecurID communication failed" msgstr "la communication avec SecurID a échoué" -#: plugins/sudoers/auth/securid5.c:131 plugins/sudoers/auth/securid5.c:214 +#: plugins/sudoers/auth/securid5.c:124 plugins/sudoers/auth/securid5.c:207 msgid "unknown SecurID error" msgstr "erreur SecurID non identifiée" -#: plugins/sudoers/auth/securid5.c:165 +#: plugins/sudoers/auth/securid5.c:158 msgid "invalid passcode length for SecurID" msgstr "la longueur du mot de passe n'est pas conforme aux règles fixées pour SecurID" -#: plugins/sudoers/auth/sia.c:105 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:124 msgid "unable to initialize SIA session" msgstr "initialisation de la session SIA impossible" -#: plugins/sudoers/auth/sudo_auth.c:117 +#: plugins/sudoers/auth/sudo_auth.c:126 msgid "invalid authentication methods" msgstr "méthodes d'authentification invalides" -#: plugins/sudoers/auth/sudo_auth.c:119 +#: plugins/sudoers/auth/sudo_auth.c:128 msgid "Invalid authentication methods compiled into sudo! You may not mix standalone and non-standalone authentication." -msgstr "Méthodes d'authentification non valides compilées dans sudo ! La combinaison d'authentifications autonomes et non-autonomes n'est pas permise." +msgstr "Méthodes d'authentification non valides compilées dans sudo ! La combinaison d'authentifications autonomes et non-autonomes n'est pas permise." -#: plugins/sudoers/auth/sudo_auth.c:188 +#: plugins/sudoers/auth/sudo_auth.c:225 plugins/sudoers/auth/sudo_auth.c:274 msgid "no authentication methods" msgstr "Pas de méthodes d'authentification" -#: plugins/sudoers/auth/sudo_auth.c:190 +#: plugins/sudoers/auth/sudo_auth.c:227 msgid "There are no authentication methods compiled into sudo! If you want to turn off authentication, use the --disable-authentication configure option." -msgstr "Aucune méthode d'authentification compilée dans sudo ! Si vous souhaitez désactiver l'authentification, utilisez l'option de configuration --disable-authentication" +msgstr "Aucune méthode d'authentification compilée dans sudo ! Si vous souhaitez désactiver l'authentification, utilisez l'option de configuration --disable-authentication" -#: plugins/sudoers/auth/sudo_auth.c:360 +#: plugins/sudoers/auth/sudo_auth.c:276 +msgid "Unable to initialize authentication methods." +msgstr "Initialisation des méthodes d'authentification impossible." + +#: plugins/sudoers/auth/sudo_auth.c:435 msgid "Authentication methods:" -msgstr "Méthodes d'authentification :" +msgstr "Méthodes d'authentification : " -#: plugins/sudoers/bsm_audit.c:100 plugins/sudoers/bsm_audit.c:189 +#: plugins/sudoers/bsm_audit.c:111 plugins/sudoers/bsm_audit.c:200 msgid "Could not determine audit condition" msgstr "Identification de la condition d'audit impossible" -#: plugins/sudoers/bsm_audit.c:161 plugins/sudoers/bsm_audit.c:249 +#: plugins/sudoers/bsm_audit.c:172 plugins/sudoers/bsm_audit.c:260 msgid "unable to commit audit record" msgstr "impossible d'enregistrer l'enregistrement d'audit" -#: plugins/sudoers/check.c:197 +#: plugins/sudoers/check.c:252 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -233,21 +379,21 @@ "\n" " #1) Respectez la vie privée des autres.\n" " #2) Réfléchissez avant d'utiliser le clavier.\n" -" #3) De grands pouvoirs confèrent de grande responsabilités.\n" +" #3) De grands pouvoirs confèrent de grandes responsabilités.\n" "\n" -#: plugins/sudoers/check.c:240 plugins/sudoers/check.c:250 -#: plugins/sudoers/sudoers.c:599 plugins/sudoers/sudoers.c:628 +#: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 +#: plugins/sudoers/sudoers.c:699 plugins/sudoers/sudoers.c:728 #, c-format msgid "unknown uid: %u" -msgstr "identifiant utilisateur inconnu : %u" +msgstr "identifiant utilisateur inconnu : %u" -#: plugins/sudoers/check.c:245 plugins/sudoers/policy.c:671 -#: plugins/sudoers/sudoers.c:918 plugins/sudoers/testsudoers.c:211 -#: plugins/sudoers/testsudoers.c:363 +#: plugins/sudoers/check.c:300 plugins/sudoers/policy.c:755 +#: plugins/sudoers/sudoers.c:1095 plugins/sudoers/testsudoers.c:206 +#: plugins/sudoers/testsudoers.c:361 #, c-format msgid "unknown user: %s" -msgstr "utilisateur inconnu : %s" +msgstr "utilisateur inconnu : %s" #: plugins/sudoers/def_data.c:27 #, c-format @@ -293,535 +439,542 @@ msgstr "Envoi d'un courriel si l'utilisateur n'est pas autorisé à exécuter une commande" #: plugins/sudoers/def_data.c:67 +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:71 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:71 +#: plugins/sudoers/def_data.c:75 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:75 +#: plugins/sudoers/def_data.c:79 #, c-format msgid "File containing the sudo lecture: %s" -msgstr "Fichier contenant les recommandations sur l'usage de sudo : %s" +msgstr "Fichier contenant les recommandations sur l'usage de sudo : %s" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:83 msgid "Require users to authenticate by default" msgstr "Exige l'authentification de l'utilisateur par défaut" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:87 msgid "Root may run sudo" msgstr "L'utilisateur root peut exécuter sudo" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:91 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:91 +#: plugins/sudoers/def_data.c:95 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:95 +#: plugins/sudoers/def_data.c:99 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:99 +#: plugins/sudoers/def_data.c:103 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Assignation à $HOME du répertoire de l'utilisateur cible lorsque l'interpréteur de commandes est lancé avec l'option -s" -#: plugins/sudoers/def_data.c:103 +#: plugins/sudoers/def_data.c:107 msgid "Always set $HOME to the target user's home directory" msgstr "Assignation systématique à $HOME du répertoire personnel de l'utilisateur cible" -#: plugins/sudoers/def_data.c:107 +#: plugins/sudoers/def_data.c:111 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:111 +#: plugins/sudoers/def_data.c:115 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:115 +#: plugins/sudoers/def_data.c:119 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:119 +#: plugins/sudoers/def_data.c:123 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:123 +#: plugins/sudoers/def_data.c:127 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:127 +#: plugins/sudoers/def_data.c:131 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:131 +#: plugins/sudoers/def_data.c:135 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:135 +#: plugins/sudoers/def_data.c:139 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:139 +#: plugins/sudoers/def_data.c:143 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:143 +#: plugins/sudoers/def_data.c:147 msgid "Set the LOGNAME and USER environment variables" msgstr "Affectation les variables d'environnement LOGNAME et USER" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:151 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Attribution de l'identifiant utilisateur (UID) effectif à l'utilisateur cible, et non l'identifiant réel." -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:155 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:155 +#: plugins/sudoers/def_data.c:159 #, 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 (0 indique qu'il n'y a pas de retour à la ligne) : %u" -#: plugins/sudoers/def_data.c:159 +#: plugins/sudoers/def_data.c:163 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" -msgstr "Délai d'expiration de l'horodatage de l'authentification : %.1f minutes" +msgstr "Délai d'expiration de l'horodatage de l'authentification : %.1f minutes" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:167 #, 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:167 +#: plugins/sudoers/def_data.c:171 #, 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:171 +#: plugins/sudoers/def_data.c:175 #, 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:175 +#: plugins/sudoers/def_data.c:179 #, c-format msgid "Path to log file: %s" -msgstr "Emplacement du fichier de journalisation : %s" +msgstr "Emplacement du fichier de journalisation : %s" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:183 #, c-format msgid "Path to mail program: %s" msgstr "Emplacement du programme d'envoi de courriel : %s" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:187 #, c-format msgid "Flags for mail program: %s" msgstr "Attributs à affecter au programme d'envoi de courriel : %s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:191 #, c-format msgid "Address to send mail to: %s" msgstr "Adresse du destinataire des courriels : %s" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:195 #, c-format msgid "Address to send mail from: %s" msgstr "Adresse de l'expéditeur des courriels : %s" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:199 #, c-format msgid "Subject line for mail messages: %s" msgstr "Champ objet des courriels envoyés : %s" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:203 #, 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:203 +#: plugins/sudoers/def_data.c:207 #, 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:207 +#: plugins/sudoers/def_data.c:211 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Répertoire contenant l'horodatage de l'authentification : %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:215 #, 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:215 +#: plugins/sudoers/def_data.c:219 #, 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:219 +#: plugins/sudoers/def_data.c:223 #, c-format msgid "Default password prompt: %s" msgstr "Invite de mot de passe par défaut : %s" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:227 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:227 +#: plugins/sudoers/def_data.c:231 #, 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:231 +#: plugins/sudoers/def_data.c:235 #, 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:235 +#: plugins/sudoers/def_data.c:239 #, 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:239 +#: plugins/sudoers/def_data.c:243 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Quand demander un mot de passe pour l'usage des pseudo commandes de « list » : %s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:247 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Quand demander un mot de passe pour l'utilisation des pseudo commandes de « verify » : %s" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:251 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:251 +#: plugins/sudoers/def_data.c:255 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:255 +#: plugins/sudoers/def_data.c:259 #, 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:259 +#: plugins/sudoers/def_data.c:263 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:263 +#: plugins/sudoers/def_data.c:267 msgid "Allow users to set arbitrary environment variables" msgstr "Autorise les utilisateurs à définir des variables d'environnement arbitraires" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:271 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:271 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to check for sanity:" msgstr "Variables d'environnement à valider pour s'assurer du bon fonctionnement :" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to remove:" msgstr "Variables d'environnement à supprimer :" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:283 msgid "Environment variables to preserve:" -msgstr "Variables d'environnement à conserver : " +msgstr "Variables d'environnement à conserver : " -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:287 #, 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:287 +#: plugins/sudoers/def_data.c:291 #, 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:291 +#: plugins/sudoers/def_data.c:295 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Emplacement du fichiers d'environnement propre à sudo : %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:299 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Localisation à utiliser lors du traitement de sudoers : %s" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:303 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:303 +#: plugins/sudoers/def_data.c:307 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:307 +#: plugins/sudoers/def_data.c:311 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Utilisation du 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:311 +#: plugins/sudoers/def_data.c:315 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:315 +#: plugins/sudoers/def_data.c:319 msgid "Log user's input for the command being run" -msgstr "Consignation des saisies des utilisateur dans le journal pour la commande en cours d'exécution " +msgstr "Consignation des saisies des utilisateur dans le journal pour la commande en cours d'exécution" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:323 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:323 +#: plugins/sudoers/def_data.c:327 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:327 +#: plugins/sudoers/def_data.c:331 msgid "Always run commands in a pseudo-tty" msgstr "Exécute toujours les commandes dans un pseudo-terminal (tty)" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:335 #, 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:335 +#: plugins/sudoers/def_data.c:339 #, 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" +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:339 +#: plugins/sudoers/def_data.c:343 #, 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" +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:343 +#: plugins/sudoers/def_data.c:347 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:347 +#: plugins/sudoers/def_data.c:351 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:351 +#: plugins/sudoers/def_data.c:355 msgid "Set of permitted privileges" msgstr "Jeu de privilèges autorisés" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:359 msgid "Set of limit privileges" msgstr "Jeu de limites autorisées" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:363 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:363 +#: plugins/sudoers/def_data.c:367 msgid "PAM service name to use" msgstr "Nom de service PAM à utiliser" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:371 msgid "PAM service name to use for login shells" msgstr "Nom de service PAM à utiliser pour les interpréteurs de commandes" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:375 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:375 +#: plugins/sudoers/def_data.c:379 msgid "Create a new PAM session for the command to run in" msgstr "Création d'une nouvelle session PAM pour la commande à exécuter" -#: plugins/sudoers/def_data.c:379 +#: plugins/sudoers/def_data.c:383 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Numéro de séquence maximum dans le journal E/S : %u" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:387 msgid "Enable sudoers netgroup support" msgstr "Activation de la prise en charge de netgroup par sudoers" -#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:601 -#: plugins/sudoers/visudo_json.c:642 plugins/sudoers/visudo_json.c:677 +#: plugins/sudoers/def_data.c:391 +msgid "Check the parent directory for writability when editing files with sudoedit" +msgstr "Vérification que les droits du répertoire parent autorisent la modification des fichiers lors de l'édition" + +#: plugins/sudoers/def_data.c:395 +msgid "Follow symbolic links when editing files with sudoedit" +msgstr "Prise en compte des liens symboliques lors de l'édition des fichiers" + +#: plugins/sudoers/def_data.c:399 +msgid "Query the group plugin for unknown system groups" +msgstr "interroge le greffon group pour les groupes système inconnus" + +#: plugins/sudoers/defaults.c:199 plugins/sudoers/defaults.c:608 +#: plugins/sudoers/visudo_json.c:633 plugins/sudoers/visudo_json.c:668 #, c-format msgid "unknown defaults entry `%s'" msgstr "Entrée par défaut inconnue « %s »" -#: plugins/sudoers/defaults.c:218 plugins/sudoers/defaults.c:228 -#: plugins/sudoers/defaults.c:248 plugins/sudoers/defaults.c:261 -#: plugins/sudoers/defaults.c:274 plugins/sudoers/defaults.c:287 -#: plugins/sudoers/defaults.c:300 plugins/sudoers/defaults.c:320 -#: plugins/sudoers/defaults.c:330 +#: plugins/sudoers/defaults.c:207 plugins/sudoers/defaults.c:217 +#: plugins/sudoers/defaults.c:241 plugins/sudoers/defaults.c:256 +#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 +#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 +#: plugins/sudoers/defaults.c:325 #, c-format msgid "value `%s' is invalid for option `%s'" msgstr "la valeur « %s » ne convient pas pour l'option « %s »" -#: plugins/sudoers/defaults.c:221 plugins/sudoers/defaults.c:231 -#: plugins/sudoers/defaults.c:239 plugins/sudoers/defaults.c:256 -#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 -#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 -#: plugins/sudoers/defaults.c:326 +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:220 +#: plugins/sudoers/defaults.c:228 plugins/sudoers/defaults.c:251 +#: plugins/sudoers/defaults.c:264 plugins/sudoers/defaults.c:277 +#: plugins/sudoers/defaults.c:290 plugins/sudoers/defaults.c:310 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "no value specified for `%s'" msgstr "pas de valeur précisée pour « %s »" -#: plugins/sudoers/defaults.c:244 +#: plugins/sudoers/defaults.c:233 #, c-format msgid "values for `%s' must start with a '/'" msgstr "Les valeurs de « %s » doivent commencer par « / »" -#: plugins/sudoers/defaults.c:306 +#: plugins/sudoers/defaults.c:301 #, c-format msgid "option `%s' does not take a value" msgstr "l'option « %s » ne prend pas de valeur" -#: plugins/sudoers/env.c:274 plugins/sudoers/env.c:281 -#: plugins/sudoers/env.c:384 plugins/sudoers/linux_audit.c:89 -#: plugins/sudoers/logging.c:918 plugins/sudoers/policy.c:468 -#: plugins/sudoers/policy.c:477 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:708 plugins/sudoers/testsudoers.c:241 -#: plugins/sudoers/toke_util.c:174 +#: plugins/sudoers/env.c:295 plugins/sudoers/env.c:302 +#: plugins/sudoers/env.c:407 plugins/sudoers/ldap.c:450 +#: plugins/sudoers/ldap.c:540 plugins/sudoers/ldap.c:1152 +#: plugins/sudoers/ldap.c:1354 plugins/sudoers/ldap.c:1526 +#: plugins/sudoers/ldap.c:1682 plugins/sudoers/linux_audit.c:82 +#: plugins/sudoers/logging.c:929 plugins/sudoers/policy.c:502 +#: plugins/sudoers/policy.c:511 plugins/sudoers/prompt.c:161 +#: plugins/sudoers/sudoers.c:815 plugins/sudoers/testsudoers.c:236 +#: plugins/sudoers/toke_util.c:160 #, c-format msgid "internal error, %s overflow" msgstr "erreur interne, dépassement de %s" -#: plugins/sudoers/env.c:357 +#: plugins/sudoers/env.c:376 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv : envp est corrompu, longueur incorrecte" -#: plugins/sudoers/env.c:1051 +#: plugins/sudoers/env.c:1076 +msgid "unable to rebuild the environment" +msgstr "recréation de l'environnement impossible" + +#: plugins/sudoers/env.c:1150 #, 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/group_plugin.c:94 +#: plugins/sudoers/group_plugin.c:85 #, c-format msgid "%s must be owned by uid %d" msgstr "%s doit appartenir à l'utilisateur (uid) %d" -#: plugins/sudoers/group_plugin.c:98 +#: plugins/sudoers/group_plugin.c:89 #, c-format msgid "%s must only be writable by owner" msgstr "Seul le propriétaire doit avoir le droit en écriture sur %s" -#: plugins/sudoers/group_plugin.c:105 plugins/sudoers/sssd.c:252 +#: plugins/sudoers/group_plugin.c:97 plugins/sudoers/sssd.c:331 #, c-format msgid "unable to load %s: %s" -msgstr "chargement de %s impossible : %s" +msgstr "chargement de %s impossible : %s" -#: plugins/sudoers/group_plugin.c:110 +#: plugins/sudoers/group_plugin.c:103 #, c-format msgid "unable to find symbol \"group_plugin\" in %s" msgstr "le symbole « group_plugin » est introuvable dans %s" -#: plugins/sudoers/group_plugin.c:115 +#: plugins/sudoers/group_plugin.c:108 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" -msgstr "%s : la version majeure du greffon de group %d est incompatible, la version attendue est %d" +msgstr "%s : la version majeure du greffon group %d est incompatible, la version attendue est %d" -#: plugins/sudoers/interfaces.c:116 +#: plugins/sudoers/interfaces.c:117 msgid "Local IP address and netmask pairs:\n" msgstr "Couples adresse IP locale/netmask :\n" -#: plugins/sudoers/iolog.c:101 plugins/sudoers/iolog.c:119 -#: plugins/sudoers/timestamp.c:233 +#: plugins/sudoers/iolog.c:92 plugins/sudoers/iolog.c:110 +#: plugins/sudoers/timestamp.c:169 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s existe mais n'est pas un répertoire (0%o)" -#: plugins/sudoers/iolog.c:112 plugins/sudoers/iolog.c:133 -#: plugins/sudoers/iolog.c:140 plugins/sudoers/timestamp.c:227 -#: plugins/sudoers/timestamp.c:248 +#: plugins/sudoers/iolog.c:103 plugins/sudoers/iolog.c:124 +#: plugins/sudoers/iolog.c:131 plugins/sudoers/timestamp.c:163 +#: plugins/sudoers/timestamp.c:184 #, c-format msgid "unable to mkdir %s" msgstr "création du répertoire (mkdir) %s impossible" -#: plugins/sudoers/iolog.c:209 plugins/sudoers/sudoers.c:764 -#: plugins/sudoers/sudoreplay.c:344 plugins/sudoers/sudoreplay.c:815 -#: plugins/sudoers/sudoreplay.c:1012 plugins/sudoers/timestamp.c:357 -#: plugins/sudoers/visudo.c:826 plugins/sudoers/visudo_json.c:1025 -#: plugins/sudoers/visudo_json.c:1038 +#: plugins/sudoers/iolog.c:200 plugins/sudoers/sudoers.c:871 +#: plugins/sudoers/sudoreplay.c:300 plugins/sudoers/sudoreplay.c:769 +#: plugins/sudoers/sudoreplay.c:973 plugins/sudoers/timestamp.c:399 +#: plugins/sudoers/visudo.c:903 plugins/sudoers/visudo_json.c:1012 +#: plugins/sudoers/visudo_json.c:1025 #, c-format msgid "unable to open %s" msgstr "ouverture de %s impossible" -#: plugins/sudoers/iolog.c:250 plugins/sudoers/sudoers.c:768 -#: plugins/sudoers/sudoreplay.c:1119 +#: plugins/sudoers/iolog.c:241 plugins/sudoers/sudoers.c:875 +#: plugins/sudoers/sudoreplay.c:1084 #, c-format msgid "unable to read %s" msgstr "lecture de %s impossible" -#: plugins/sudoers/iolog.c:282 plugins/sudoers/sudoreplay.c:584 -#: plugins/sudoers/timestamp.c:186 plugins/sudoers/timestamp.c:189 +#: plugins/sudoers/iolog.c:277 plugins/sudoers/sudoreplay.c:550 +#: plugins/sudoers/timestamp.c:298 plugins/sudoers/timestamp.c:301 #, c-format msgid "unable to write to %s" msgstr "Écriture impossible dans %s" -#: plugins/sudoers/iolog.c:347 plugins/sudoers/iolog.c:545 +#: plugins/sudoers/iolog.c:342 plugins/sudoers/iolog.c:540 #, c-format msgid "unable to create %s" msgstr "création de %s impossible" -#: plugins/sudoers/ldap.c:406 +#: plugins/sudoers/ldap.c:428 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports : valeur de port trop élevée" -#: plugins/sudoers/ldap.c:431 -msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" -msgstr "sudo_ldap_conf_add_ports : espace insuffisant pour étendre hostbuf" - -#: plugins/sudoers/ldap.c:464 +#: plugins/sudoers/ldap.c:488 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "Type d'uri LDAP non pris en charge : %s" -#: plugins/sudoers/ldap.c:495 +#: plugins/sudoers/ldap.c:515 msgid "unable to mix ldap and ldaps URIs" msgstr "fusion des URIs ldap et ldaps impossible" -#: plugins/sudoers/ldap.c:499 plugins/sudoers/ldap.c:532 +#: plugins/sudoers/ldap.c:519 plugins/sudoers/ldap.c:555 msgid "starttls not supported when using ldaps" msgstr "starttls n'est pas pris en charge lors de l'utilisation de ldap" -#: plugins/sudoers/ldap.c:517 -msgid "sudo_ldap_parse_uri: out of space building hostbuf" -msgstr "sudo_ldap_parse_uri :espace insuffisant pour créer hostbuf" - -#: plugins/sudoers/ldap.c:599 +#: plugins/sudoers/ldap.c:626 #, c-format msgid "unable to initialize SSL cert and key db: %s" -msgstr "initialisation du certificat SSL et la base de clés impossible : %s" +msgstr "initialisation du certificat SSL et la base de clés impossible : %s" -#: plugins/sudoers/ldap.c:602 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "TLS_CERT doit être défini dans %s pour pouvoir utiliser SSL" -#: plugins/sudoers/ldap.c:1093 +#: plugins/sudoers/ldap.c:1138 msgid "unable to get GMT time" msgstr "récupération de l'heure GMT impossible" -#: plugins/sudoers/ldap.c:1099 +#: plugins/sudoers/ldap.c:1144 msgid "unable to format timestamp" msgstr "impossible de formater l'horodatage" -#: plugins/sudoers/ldap.c:1107 -msgid "unable to build time filter" -msgstr "création du filtre temporel impossible" - -#: plugins/sudoers/ldap.c:1326 -msgid "sudo_ldap_build_pass1 allocation mismatch" -msgstr "sudo_ldap_build_pass1 : erreur d'allocation" - -#: plugins/sudoers/ldap.c:1469 +#: plugins/sudoers/ldap.c:1830 #, c-format msgid "%s: %s: %s: %s" msgstr "%s : %s : %s : %s" -#: plugins/sudoers/ldap.c:1963 +#: plugins/sudoers/ldap.c:2372 #, c-format msgid "" "\n" @@ -830,7 +983,7 @@ "\n" "Rôle LDAP : %s\n" -#: plugins/sudoers/ldap.c:1965 +#: plugins/sudoers/ldap.c:2374 #, c-format msgid "" "\n" @@ -839,108 +992,108 @@ "\n" "Rôle LDAP : INCONNU\n" -#: plugins/sudoers/ldap.c:2012 +#: plugins/sudoers/ldap.c:2421 #, c-format msgid " Order: %s\n" msgstr " Ordre : %s\n" -#: plugins/sudoers/ldap.c:2020 plugins/sudoers/parse.c:506 -#: plugins/sudoers/sssd.c:1298 +#: plugins/sudoers/ldap.c:2429 plugins/sudoers/parse.c:555 +#: plugins/sudoers/sssd.c:1417 #, c-format msgid " Commands:\n" msgstr " Commandes :\n" -#: plugins/sudoers/ldap.c:2570 +#: plugins/sudoers/ldap.c:2993 #, c-format msgid "unable to initialize LDAP: %s" -msgstr "initialisation de LDAP impossible : %s" +msgstr "initialisation de LDAP impossible : %s" -#: plugins/sudoers/ldap.c:2612 +#: plugins/sudoers/ldap.c:3029 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "start_tls est sélectionné, mais les bibliothèques LDAP ne gèrent pas ldap_start_tls_s() ou ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:2845 +#: plugins/sudoers/ldap.c:3286 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "attribut sudoOrder invalide : %s" -#: plugins/sudoers/linux_audit.c:61 +#: plugins/sudoers/linux_audit.c:52 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:93 msgid "unable to send audit message" msgstr "envoi du message d'audit impossible" -#: plugins/sudoers/logging.c:134 +#: plugins/sudoers/logging.c:106 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: plugins/sudoers/logging.c:162 +#: plugins/sudoers/logging.c:134 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s : (suite de la commande) %s" -#: plugins/sudoers/logging.c:187 +#: plugins/sudoers/logging.c:159 #, c-format msgid "unable to open log file: %s: %s" -msgstr "ouverture du fichier de journalisation impossible : %s : %s" +msgstr "ouverture du fichier de journalisation impossible : %s : %s" -#: plugins/sudoers/logging.c:190 +#: plugins/sudoers/logging.c:162 #, c-format msgid "unable to lock log file: %s: %s" -msgstr "verrouillage du fichier de journalisation impossible : %s : %s" +msgstr "verrouillage du fichier de journalisation impossible : %s : %s" -#: plugins/sudoers/logging.c:242 +#: plugins/sudoers/logging.c:211 msgid "No user or host" msgstr "Pas d'utilisateur ou d'hôte" -#: plugins/sudoers/logging.c:244 +#: plugins/sudoers/logging.c:213 msgid "validation failure" msgstr "échec de la validation" -#: plugins/sudoers/logging.c:251 +#: plugins/sudoers/logging.c:220 msgid "user NOT in sudoers" msgstr "l'utilisateur n'apparaît PAS dans sudoers" -#: plugins/sudoers/logging.c:253 +#: plugins/sudoers/logging.c:222 msgid "user NOT authorized on host" msgstr "l'utilisateur n'est PAS autorisé sur cet hôte" -#: plugins/sudoers/logging.c:255 +#: plugins/sudoers/logging.c:224 msgid "command not allowed" msgstr "commande non autorisée" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:259 #, 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 événement sera signalé.\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:262 #, 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 événement sera signalé.\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:266 #, 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:269 #, 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:407 -#: plugins/sudoers/sudoers.c:409 plugins/sudoers/sudoers.c:411 -#: plugins/sudoers/sudoers.c:413 plugins/sudoers/sudoers.c:1091 -#: plugins/sudoers/sudoers.c:1092 +#: plugins/sudoers/logging.c:306 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1222 +#: plugins/sudoers/sudoers.c:1224 #, c-format msgid "%s: command not found" msgstr "%s : commande introuvable" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:403 +#: plugins/sudoers/logging.c:308 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring `%s' found in '.'\n" @@ -949,71 +1102,71 @@ "« %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:353 +#: plugins/sudoers/logging.c:325 msgid "authentication failure" msgstr "échec de l'authentification" -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:351 msgid "a password is required" msgstr "il est nécessaire de saisir un mot de passe" -#: plugins/sudoers/logging.c:446 plugins/sudoers/logging.c:501 +#: plugins/sudoers/logging.c:422 plugins/sudoers/logging.c:484 #, 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:584 +#: plugins/sudoers/logging.c:572 msgid "unable to fork" msgstr "création du processus fils impossible" -#: plugins/sudoers/logging.c:592 plugins/sudoers/logging.c:648 +#: plugins/sudoers/logging.c:580 plugins/sudoers/logging.c:640 #, c-format msgid "unable to fork: %m" -msgstr "création du processus fils impossible : %m" +msgstr "création du processus fils impossible : %m" -#: plugins/sudoers/logging.c:638 +#: plugins/sudoers/logging.c:630 #, c-format msgid "unable to open pipe: %m" -msgstr "ouverture du tube impossible : %m" +msgstr "ouverture du tube impossible : %m" -#: plugins/sudoers/logging.c:663 +#: plugins/sudoers/logging.c:655 #, c-format msgid "unable to dup stdin: %m" -msgstr "duplicqtion (dup) de stdin impossible : %m" +msgstr "duplication (dup) de stdin impossible : %m" -#: plugins/sudoers/logging.c:698 +#: plugins/sudoers/logging.c:693 #, c-format msgid "unable to execute %s: %m" -msgstr "exécution de %s impossible : %m" +msgstr "exécution de %s impossible : %m" -#: plugins/sudoers/match.c:627 +#: plugins/sudoers/match.c:606 #, c-format msgid "unsupported digest type %d for %s" -msgstr "Le type résumé (digest type ) %d pour n'est pas autorisé pour %s " +msgstr "le type résumé (digest type ) %d pour n'est pas autorisé pour %s" -#: plugins/sudoers/match.c:656 +#: plugins/sudoers/match.c:639 #, c-format msgid "%s: read error" msgstr "%s : erreur en lecture" -#: plugins/sudoers/match.c:670 +#: plugins/sudoers/match.c:653 #, c-format 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:116 +#: plugins/sudoers/parse.c:114 #, 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/parse.c:119 +#: plugins/sudoers/parse.c:117 #, c-format msgid "parse error in %s" msgstr "erreur d'analyse grammaticale dans %s" -#: plugins/sudoers/parse.c:453 +#: plugins/sudoers/parse.c:502 #, c-format msgid "" "\n" @@ -1022,49 +1175,41 @@ "\n" "Entrée sudoers :\n" -#: plugins/sudoers/parse.c:454 +#: plugins/sudoers/parse.c:503 #, c-format msgid " RunAsUsers: " msgstr " RunAsUsers : " -#: plugins/sudoers/parse.c:468 +#: plugins/sudoers/parse.c:517 #, c-format msgid " RunAsGroups: " msgstr " RunAsGroups : " -#: plugins/sudoers/parse.c:477 +#: plugins/sudoers/parse.c:526 #, c-format msgid " Options: " msgstr " Options : " -#: plugins/sudoers/policy.c:109 plugins/sudoers/policy.c:118 -#: plugins/sudoers/policy.c:127 plugins/sudoers/policy.c:151 -#: plugins/sudoers/policy.c:267 plugins/sudoers/policy.c:287 -#: plugins/sudoers/policy.c:296 plugins/sudoers/policy.c:326 -#: plugins/sudoers/policy.c:336 plugins/sudoers/policy.c:345 -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 -#, c-format -msgid "%s: %s" -msgstr "%s : %s" +#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:253 +msgid "unable to parse network address list" +msgstr "analyse grammaticale (parse) des adresses réseau impossible" -#: plugins/sudoers/policy.c:559 plugins/sudoers/visudo.c:767 +#: plugins/sudoers/policy.c:640 plugins/sudoers/visudo.c:840 #, c-format msgid "unable to execute %s" msgstr "exécution de %s impossible" -#: plugins/sudoers/policy.c:689 +#: plugins/sudoers/policy.c:773 #, 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:691 +#: plugins/sudoers/policy.c:775 #, 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:695 +#: plugins/sudoers/policy.c:779 #, c-format msgid "" "\n" @@ -1073,374 +1218,411 @@ "\n" "Chemin d'accès à sudoers : %s\n" -#: plugins/sudoers/policy.c:698 +#: plugins/sudoers/policy.c:782 #, c-format msgid "nsswitch path: %s\n" msgstr "chemin d'accès à nsswitch : %s\n" -#: plugins/sudoers/policy.c:700 +#: plugins/sudoers/policy.c:784 #, c-format msgid "ldap.conf path: %s\n" msgstr "chemin d'accès à ldap_conf : %s\n" -#: plugins/sudoers/policy.c:701 +#: plugins/sudoers/policy.c:785 #, c-format msgid "ldap.secret path: %s\n" msgstr "chemin d'accès à ldap.secret : %s\n" -#: plugins/sudoers/pwutil.c:149 +#: plugins/sudoers/policy.c:818 +#, 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:136 plugins/sudoers/pwutil.c:153 +#, c-format +msgid "unable to cache uid %u, out of memory" +msgstr "enregistrement de l'uid %u dans le cache impossible, mémoire insuffisante" + +#: plugins/sudoers/pwutil.c:147 #, 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:194 +#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:207 +#: plugins/sudoers/pwutil.c:250 plugins/sudoers/pwutil.c:294 +#, c-format +msgid "unable to cache user %s, out of memory" +msgstr "enregistrement des informations de l'utilisateur %s dans le cache impossible, mémoire insuffisante" + +#: plugins/sudoers/pwutil.c:202 #, 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:400 +#: plugins/sudoers/pwutil.c:427 plugins/sudoers/pwutil.c:444 +#, c-format +msgid "unable to cache gid %u, out of memory" +msgstr "enregistrement du gid %u dans le cache impossible, mémoire insuffisante" + +#: plugins/sudoers/pwutil.c:438 #, 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:439 +#: plugins/sudoers/pwutil.c:476 plugins/sudoers/pwutil.c:492 +#: plugins/sudoers/pwutil.c:524 plugins/sudoers/pwutil.c:565 +#, c-format +msgid "unable to cache group %s, out of memory" +msgstr "enregistrement du groupe %s dans le cache impossible, mémoire insuffisante" + +#: plugins/sudoers/pwutil.c:487 #, 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:605 plugins/sudoers/pwutil.c:631 +#: plugins/sudoers/pwutil.c:676 plugins/sudoers/pwutil.c:710 #, 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:627 +#: plugins/sudoers/pwutil.c:682 plugins/sudoers/pwutil.c:715 +#, c-format +msgid "unable to cache group list for %s, out of memory" +msgstr "enregistrement de la liste de groupe %s dans le cache impossible, mémoire insuffisante" + +#: plugins/sudoers/pwutil.c:705 #, c-format msgid "unable to parse groups for %s" msgstr "analyse grammaticale (parse) de %s impossible" -#: plugins/sudoers/set_perms.c:122 plugins/sudoers/set_perms.c:447 -#: plugins/sudoers/set_perms.c:850 plugins/sudoers/set_perms.c:1147 -#: plugins/sudoers/set_perms.c:1439 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 +#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 +#: plugins/sudoers/set_perms.c:1430 msgid "perm stack overflow" msgstr "débordement de la pile perm" -#: plugins/sudoers/set_perms.c:130 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:1076 -#: plugins/sudoers/set_perms.c:1155 plugins/sudoers/set_perms.c:1372 -#: plugins/sudoers/set_perms.c:1447 plugins/sudoers/set_perms.c:1536 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 +#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 +#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 +#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 +#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 msgid "perm stack underflow" msgstr "débordement inférieur de la pile perm" -#: plugins/sudoers/set_perms.c:189 plugins/sudoers/set_perms.c:502 -#: plugins/sudoers/set_perms.c:1206 plugins/sudoers/set_perms.c:1479 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:493 +#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 msgid "unable to change to root gid" msgstr "changement de l'identificateur de groupe (gid) de root impossible" -#: plugins/sudoers/set_perms.c:278 plugins/sudoers/set_perms.c:599 -#: plugins/sudoers/set_perms.c:987 plugins/sudoers/set_perms.c:1283 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:590 +#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 msgid "unable to change to runas gid" msgstr "changement du groupe effectif (runas) impossible" -#: plugins/sudoers/set_perms.c:283 plugins/sudoers/set_perms.c:604 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:595 +#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 msgid "unable to set runas group vector" msgstr "positionnement du vecteur du groupe effectif (runas) impossible" -#: plugins/sudoers/set_perms.c:294 plugins/sudoers/set_perms.c:615 -#: plugins/sudoers/set_perms.c:1001 plugins/sudoers/set_perms.c:1297 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:606 +#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 msgid "unable to change to runas uid" msgstr "changement de l'uid effectif (runas) impossible" -#: plugins/sudoers/set_perms.c:312 plugins/sudoers/set_perms.c:633 -#: plugins/sudoers/set_perms.c:1017 plugins/sudoers/set_perms.c:1313 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:624 +#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 msgid "unable to change to sudoers gid" msgstr "changement du groupe (gid) de sudoers impossible" -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 msgid "too many processes" msgstr "trop de processus" -#: plugins/sudoers/solaris_audit.c:48 +#: plugins/sudoers/solaris_audit.c:51 msgid "unable to get current working directory" msgstr "récupération du répertoire de travail impossible" -#: plugins/sudoers/solaris_audit.c:56 +#: plugins/sudoers/solaris_audit.c:59 #, c-format msgid "truncated audit path user_cmnd: %s" -msgstr "le chemin d'accès à l'audit user_cmnd est incomplet : %s" +msgstr "le chemin d'accès à l'audit user_cmnd est incomplet : %s" -#: plugins/sudoers/solaris_audit.c:63 +#: plugins/sudoers/solaris_audit.c:66 #, c-format msgid "truncated audit path argv[0]: %s" -msgstr "le chemin d'accès à l'audit argv[0] est incomplet : %s" +msgstr "le chemin d'accès à l'audit argv[0] est incomplet : %s" -#: plugins/sudoers/solaris_audit.c:112 +#: plugins/sudoers/solaris_audit.c:115 msgid "audit_failure message too long" msgstr "le message audit_failure est trop long" -#: plugins/sudoers/sssd.c:253 +#: plugins/sudoers/sssd.c:333 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 ?" +msgstr "initialisation de la source SSS impossible. SSSD est-il installé sur cette machine ?" -#: plugins/sudoers/sssd.c:260 plugins/sudoers/sssd.c:268 -#: plugins/sudoers/sssd.c:276 plugins/sudoers/sssd.c:284 -#: plugins/sudoers/sssd.c:292 +#: plugins/sudoers/sssd.c:341 plugins/sudoers/sssd.c:350 +#: plugins/sudoers/sssd.c:359 plugins/sudoers/sssd.c:368 +#: plugins/sudoers/sssd.c:377 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "Le symbole « %s » est introuvable dans %s" -#: plugins/sudoers/sudo_nss.c:285 +#: plugins/sudoers/sudo_nss.c:290 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Entrées par défaut pour %s sur %s :\n" -#: plugins/sudoers/sudo_nss.c:298 +#: plugins/sudoers/sudo_nss.c:308 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Paramètres par défaut de runas ou d'autres commandes pour %s :\n" -#: plugins/sudoers/sudo_nss.c:311 +#: plugins/sudoers/sudo_nss.c:326 #, 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/sudo_nss.c:320 +#: plugins/sudoers/sudo_nss.c:339 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "L'utilisateur %s n'est pas autorisé à exécuter sudo sur %s.\n" -#: plugins/sudoers/sudoers.c:160 plugins/sudoers/sudoers.c:201 -#: plugins/sudoers/sudoers.c:726 +#: plugins/sudoers/sudoers.c:172 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/visudo.c:223 plugins/sudoers/visudo.c:566 +msgid "unable to initialize sudoers default values" +msgstr "initialisation des valeurs par défaut de sudoers impossible" + +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:239 +#: plugins/sudoers/sudoers.c:833 msgid "problem with defaults entries" msgstr "les entrées par défaut posent un problème" -#: plugins/sudoers/sudoers.c:167 +#: plugins/sudoers/sudoers.c:205 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:233 +#: plugins/sudoers/sudoers.c:275 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:278 +#: plugins/sudoers/sudoers.c:332 msgid "you are not permitted to use the -C option" -msgstr "vous n'êtes pas autorisé à utiliser l'option -C" +msgstr "vous n'êtes pas autorisé à utiliser l'option -C" -#: plugins/sudoers/sudoers.c:336 +#: plugins/sudoers/sudoers.c:396 #, c-format msgid "timestamp owner (%s): No such user" msgstr "propriétaire du fichier d'horodatage (%s) : utilisateur inconnu" -#: plugins/sudoers/sudoers.c:350 +#: plugins/sudoers/sudoers.c:410 msgid "no tty" msgstr "pas de terminal tty" -#: plugins/sudoers/sudoers.c:351 +#: plugins/sudoers/sudoers.c:411 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:402 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "commande dans le répertoire courant" -#: plugins/sudoers/sudoers.c:422 +#: plugins/sudoers/sudoers.c:486 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:674 +#: plugins/sudoers/sudoers.c:778 msgid "command too long" msgstr "commande trop longue" -#: plugins/sudoers/sudoers.c:779 plugins/sudoers/visudo.c:327 -#: plugins/sudoers/visudo.c:593 +#: plugins/sudoers/sudoers.c:886 plugins/sudoers/visudo.c:426 +#: plugins/sudoers/visudo.c:666 #, c-format msgid "unable to stat %s" msgstr "impossible d'appliquer la fonction stat à %s" -#: plugins/sudoers/sudoers.c:783 +#: plugins/sudoers/sudoers.c:890 #, c-format msgid "%s is not a regular file" msgstr "%s n'est pas un fichier ordinaire" -#: plugins/sudoers/sudoers.c:787 plugins/sudoers/timestamp.c:289 toke.l:945 +#: plugins/sudoers/sudoers.c:894 plugins/sudoers/timestamp.c:225 toke.l:947 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "Le fichier %s a l'utilisateur (uid) %u pour propriétaire, alors qu'il devraitappartenir à %u" -#: plugins/sudoers/sudoers.c:791 toke.l:952 +#: plugins/sudoers/sudoers.c:898 toke.l:954 #, c-format msgid "%s is world writable" msgstr "Le fichier %s est ouvert en écriture pour tous" -#: plugins/sudoers/sudoers.c:795 toke.l:957 +#: plugins/sudoers/sudoers.c:902 toke.l:959 #, 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:826 +#: plugins/sudoers/sudoers.c:933 #, c-format msgid "only root can use `-c %s'" msgstr "« -c %s » est réservé à l'utilisateur root" -#: plugins/sudoers/sudoers.c:845 +#: plugins/sudoers/sudoers.c:952 #, c-format msgid "unknown login class: %s" msgstr "classe de connexion inconnue : %s" -#: plugins/sudoers/sudoers.c:882 +#: plugins/sudoers/sudoers.c:1031 plugins/sudoers/sudoers.c:1059 #, c-format msgid "unable to resolve host %s" msgstr "impossible de déterminer le nom de l'hôte %s" -#: plugins/sudoers/sudoers.c:949 plugins/sudoers/testsudoers.c:387 +#: plugins/sudoers/sudoers.c:1126 plugins/sudoers/testsudoers.c:385 #, c-format msgid "unknown group: %s" msgstr "groupe inconnu : %s" -#: plugins/sudoers/sudoreplay.c:276 +#: plugins/sudoers/sudoreplay.c:232 #, c-format msgid "invalid filter option: %s" msgstr "option du filte invalide : %s" -#: plugins/sudoers/sudoreplay.c:289 +#: plugins/sudoers/sudoreplay.c:245 #, c-format msgid "invalid max wait: %s" msgstr "attente maximum invalide : %s" -#: plugins/sudoers/sudoreplay.c:295 +#: plugins/sudoers/sudoreplay.c:251 #, c-format msgid "invalid speed factor: %s" msgstr "facteur de vitesse invalide : %s" -#: plugins/sudoers/sudoreplay.c:298 plugins/sudoers/visudo.c:184 +#: plugins/sudoers/sudoreplay.c:254 plugins/sudoers/visudo.c:180 #, c-format msgid "%s version %s\n" msgstr "%s version %s\n" -#: plugins/sudoers/sudoreplay.c:330 +#: plugins/sudoers/sudoreplay.c:286 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/timing : %s" -#: plugins/sudoers/sudoreplay.c:336 +#: plugins/sudoers/sudoreplay.c:292 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/timing : %s" -#: plugins/sudoers/sudoreplay.c:352 +#: plugins/sudoers/sudoreplay.c:308 #, c-format msgid "Replaying sudo session: %s\n" msgstr "Rejeu de la session sudo : %s\n" -#: plugins/sudoers/sudoreplay.c:358 +#: plugins/sudoers/sudoreplay.c:314 #, c-format 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:359 +#: plugins/sudoers/sudoreplay.c:315 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "La taille du journal est %d x %d, la taille de votre terminal est %d x %d." -#: plugins/sudoers/sudoreplay.c:414 +#: plugins/sudoers/sudoreplay.c:368 msgid "unable to set tty to raw mode" msgstr "impossible d'initialiser le terminal tty en mode direct" -#: plugins/sudoers/sudoreplay.c:445 +#: plugins/sudoers/sudoreplay.c:401 #, c-format msgid "invalid timing file line: %s" msgstr "entrée invalide dans le fichier de timing : %s" -#: plugins/sudoers/sudoreplay.c:651 plugins/sudoers/sudoreplay.c:676 +#: plugins/sudoers/sudoreplay.c:611 plugins/sudoers/sudoreplay.c:636 #, c-format msgid "ambiguous expression \"%s\"" msgstr "expression ambiguë « %s »" -#: plugins/sudoers/sudoreplay.c:698 +#: plugins/sudoers/sudoreplay.c:658 msgid "unmatched ')' in expression" msgstr "il manque une parenthèse ouvrante « ( » dans l'expression" -#: plugins/sudoers/sudoreplay.c:702 +#: plugins/sudoers/sudoreplay.c:662 #, c-format msgid "unknown search term \"%s\"" msgstr "terme de recherche « %s » inconnu" -#: plugins/sudoers/sudoreplay.c:716 +#: plugins/sudoers/sudoreplay.c:677 #, c-format msgid "%s requires an argument" msgstr "%s requiert le passage d'un argument" -#: plugins/sudoers/sudoreplay.c:720 plugins/sudoers/sudoreplay.c:1092 +#: plugins/sudoers/sudoreplay.c:680 plugins/sudoers/sudoreplay.c:1060 #, c-format msgid "invalid regular expression: %s" msgstr "expression régulière invalide : %s" -#: plugins/sudoers/sudoreplay.c:726 +#: plugins/sudoers/sudoreplay.c:684 #, c-format msgid "could not parse date \"%s\"" msgstr "Analyse grammaticale de la date « %s » impossible" -#: plugins/sudoers/sudoreplay.c:735 +#: plugins/sudoers/sudoreplay.c:693 msgid "unmatched '(' in expression" msgstr "il manque une parenthèse fermante « ) » dans l'expression" -#: plugins/sudoers/sudoreplay.c:737 +#: plugins/sudoers/sudoreplay.c:695 msgid "illegal trailing \"or\"" msgstr "« or » n'est pas autorisé en fin d'expression" -#: plugins/sudoers/sudoreplay.c:739 +#: plugins/sudoers/sudoreplay.c:697 msgid "illegal trailing \"!\"" msgstr "« ! » n'est pas autorisé en fin d'expression" -#: plugins/sudoers/sudoreplay.c:792 +#: plugins/sudoers/sudoreplay.c:746 #, c-format msgid "unknown search type %d" msgstr "type de recherche « %d » inconnu" -#: plugins/sudoers/sudoreplay.c:829 +#: plugins/sudoers/sudoreplay.c:784 #, c-format msgid "%s: invalid log file" msgstr "%s : fichier de journalisation incorrect" -#: plugins/sudoers/sudoreplay.c:847 +#: plugins/sudoers/sudoreplay.c:802 #, c-format msgid "%s: time stamp field is missing" -msgstr "%s : il manque le champ d'horodatage" +msgstr "%s : il manque le champ d'horodatage" -#: plugins/sudoers/sudoreplay.c:854 +#: plugins/sudoers/sudoreplay.c:809 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s : horodatage %s : %s" -#: plugins/sudoers/sudoreplay.c:861 +#: plugins/sudoers/sudoreplay.c:816 #, c-format msgid "%s: user field is missing" -msgstr "%s : il manque le champ utilisateur" +msgstr "%s : il manque le champ utilisateur" -#: plugins/sudoers/sudoreplay.c:869 +#: plugins/sudoers/sudoreplay.c:825 #, c-format msgid "%s: runas user field is missing" -msgstr "%s : il manque le champ précisant l'utilisateur effectif (runas)" +msgstr "%s : il manque le champ précisant l'utilisateur effectif (runas)" -#: plugins/sudoers/sudoreplay.c:877 +#: plugins/sudoers/sudoreplay.c:834 #, c-format msgid "%s: runas group field is missing" -msgstr "%s : il manque le champ précisant le groupe effectif (runas)" +msgstr "%s : il manque le champ précisant le groupe effectif (runas)" -#: plugins/sudoers/sudoreplay.c:1232 +#: plugins/sudoers/sudoreplay.c:1197 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "Utilisation : %s [-h] [-d répertoire] [-m nombre] [-s nombre] ID\n" -#: plugins/sudoers/sudoreplay.c:1235 +#: plugins/sudoers/sudoreplay.c:1200 #, 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:1244 +#: plugins/sudoers/sudoreplay.c:1209 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1449,7 +1631,7 @@ "%s - Rejeu du journal de la session sudo\n" "\n" -#: plugins/sudoers/sudoreplay.c:1246 +#: plugins/sudoers/sudoreplay.c:1211 msgid "" "\n" "Options:\n" @@ -1471,11 +1653,11 @@ " -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:326 +#: plugins/sudoers/testsudoers.c:324 msgid "\thost unmatched" msgstr "\tl'hôte n'a pas de correspondance" -#: plugins/sudoers/testsudoers.c:329 +#: plugins/sudoers/testsudoers.c:327 msgid "" "\n" "Command allowed" @@ -1483,7 +1665,7 @@ "\n" "Commande autorisée" -#: plugins/sudoers/testsudoers.c:330 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command denied" @@ -1491,7 +1673,7 @@ "\n" "Commande refusée" -#: plugins/sudoers/testsudoers.c:330 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command unmatched" @@ -1499,114 +1681,129 @@ "\n" "Commande sans correspondance" -#: plugins/sudoers/timestamp.c:197 -#, c-format -msgid "unable to truncate time stamp file to %lld bytes" -msgstr "impossible de tronquer le fichier d'horodatage de %lld octets" - -#: plugins/sudoers/timestamp.c:297 +#: plugins/sudoers/timestamp.c:233 #, c-format msgid "%s is group writable" msgstr "%s est accessible en écriture pour les membres du groupe" -#: plugins/sudoers/timestamp.c:318 +#: plugins/sudoers/timestamp.c:309 #, c-format -msgid "timestamp path too long: %s/%s" -msgstr "Chemin d'accès au fichier d'horodatage trop long : %s/%s" +msgid "unable to truncate time stamp file to %lld bytes" +msgstr "impossible de tronquer le fichier d'horodatage de %lld octets" + +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:487 plugins/sudoers/visudo.c:493 +msgid "unable to read the clock" +msgstr "lecture du bloc impossible" -#: plugins/sudoers/timestamp.c:498 +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "un horodatage dans le futur n'a pas été pris en compte" -#: plugins/sudoers/timestamp.c:510 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "l'horodatage est trop avancé dans le temps : %20.20s" -#: plugins/sudoers/timestamp.c:613 plugins/sudoers/timestamp.c:634 +#: plugins/sudoers/timestamp.c:863 +#, c-format +msgid "unable to lock time stamp file %s" +msgstr "verrouillage de l'horodatage du fichier %s impossible" + +#: plugins/sudoers/timestamp.c:906 plugins/sudoers/timestamp.c:926 #, c-format msgid "lecture status path too long: %s/%s" msgstr "le chemin d'accès au fichier d'état de la recommandation est trop long : %s/%s" -#: plugins/sudoers/visudo.c:186 +#: plugins/sudoers/visudo.c:182 #, c-format msgid "%s grammar version %d\n" msgstr "Version de la grammaire de %s : %d\n" -#: plugins/sudoers/visudo.c:257 plugins/sudoers/visudo.c:546 +#: plugins/sudoers/visudo.c:254 plugins/sudoers/visudo.c:618 #, c-format msgid "press return to edit %s: " msgstr "appuyer sur entrée pour afficher %s : " -#: plugins/sudoers/visudo.c:343 plugins/sudoers/visudo.c:349 +#: plugins/sudoers/visudo.c:319 +#, c-format +msgid "specified editor (%s) doesn't exist" +msgstr "l'éditeur indiqué (%s) n'existe pas" + +#: plugins/sudoers/visudo.c:337 +#, c-format +msgid "no editor found (editor path = %s)" +msgstr "aucun éditeur trouvé (chemin d'accès à l'éditeur : %s)" + +#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:454 msgid "write error" msgstr "erreur en écriture" -#: plugins/sudoers/visudo.c:433 +#: plugins/sudoers/visudo.c:500 #, 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:438 +#: plugins/sudoers/visudo.c:507 #, 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:444 +#: plugins/sudoers/visudo.c:513 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "l'éditeur (%s) a échoué, %s n'a pas été modifié" -#: plugins/sudoers/visudo.c:466 +#: plugins/sudoers/visudo.c:535 #, c-format msgid "%s unchanged" msgstr "%s n'a pas été modifié" -#: plugins/sudoers/visudo.c:491 +#: plugins/sudoers/visudo.c:561 #, 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:501 +#: plugins/sudoers/visudo.c:572 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "impossible d'effectuer l'analyse grammaticale du fichier temporaire (%s), erreur inconnue" -#: plugins/sudoers/visudo.c:537 +#: plugins/sudoers/visudo.c:609 #, 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:595 plugins/sudoers/visudo.c:604 +#: plugins/sudoers/visudo.c:668 plugins/sudoers/visudo.c:677 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "impossible d'affecter (uid, gid) de %s à (%u, %u)" -#: plugins/sudoers/visudo.c:599 plugins/sudoers/visudo.c:609 +#: plugins/sudoers/visudo.c:672 plugins/sudoers/visudo.c:682 #, 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" -#: plugins/sudoers/visudo.c:626 +#: plugins/sudoers/visudo.c:699 #, 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:640 +#: plugins/sudoers/visudo.c:713 #, 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:650 +#: plugins/sudoers/visudo.c:723 #, 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:712 +#: plugins/sudoers/visudo.c:785 msgid "What now? " msgstr "Et maintenant ?" -#: plugins/sudoers/visudo.c:726 +#: plugins/sudoers/visudo.c:799 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1618,87 +1815,72 @@ " 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:774 +#: plugins/sudoers/visudo.c:847 #, c-format msgid "unable to run %s" msgstr "lancement de %s impossible" -#: plugins/sudoers/visudo.c:800 +#: plugins/sudoers/visudo.c:877 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s : mauvais utilisateur (uid, gid), celui-ci devrait être (%u,%u)\n" -#: plugins/sudoers/visudo.c:807 +#: plugins/sudoers/visudo.c:884 #, 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:832 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:909 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "failed to parse %s file, unknown error" msgstr "échec lors de l'analyse grammaticale de %s, erreur inconnue" -#: plugins/sudoers/visudo.c:848 plugins/sudoers/visudo_json.c:1054 +#: plugins/sudoers/visudo.c:925 plugins/sudoers/visudo_json.c:1041 #, 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/visudo.c:851 plugins/sudoers/visudo_json.c:1057 +#: plugins/sudoers/visudo.c:928 plugins/sudoers/visudo_json.c:1044 #, c-format msgid "parse error in %s\n" msgstr "erreur lors de l'analyse grammaticale de %s\n" -#: plugins/sudoers/visudo.c:859 plugins/sudoers/visudo.c:866 +#: plugins/sudoers/visudo.c:936 plugins/sudoers/visudo.c:943 #, c-format msgid "%s: parsed OK\n" msgstr "%s : analyse grammaticale réussie\n" -#: plugins/sudoers/visudo.c:912 +#: plugins/sudoers/visudo.c:990 #, c-format msgid "%s busy, try again later" msgstr "%s n'est pas disponible, réessayez plus tard" -#: plugins/sudoers/visudo.c:956 -#, c-format -msgid "specified editor (%s) doesn't exist" -msgstr "l'éditeur indiqué (%s) n'existe pas" - -#: plugins/sudoers/visudo.c:979 -#, c-format -msgid "unable to stat editor (%s)" -msgstr "impossible d'obtenir les stats de l'éditeur (%s)" - -#: plugins/sudoers/visudo.c:1027 -#, c-format -msgid "no editor found (editor path = %s)" -msgstr "aucun éditeur trouvé (chemin d'accès à l'éditeur : %s)" - -#: plugins/sudoers/visudo.c:1130 +#: plugins/sudoers/visudo.c:1086 #, c-format msgid "Error: cycle in %s `%s'" msgstr "Erreur : boucle dans %s « %s »" -#: plugins/sudoers/visudo.c:1131 +#: plugins/sudoers/visudo.c:1087 #, c-format msgid "Warning: cycle in %s `%s'" msgstr "Attention : boucle dans %s « %s »" -#: plugins/sudoers/visudo.c:1135 +#: plugins/sudoers/visudo.c:1091 #, c-format msgid "Error: %s `%s' referenced but not defined" msgstr "Erreur : il est fait mention de %s « %s » alors qu'il n'a pas été défini" -#: plugins/sudoers/visudo.c:1136 +#: plugins/sudoers/visudo.c:1092 #, c-format msgid "Warning: %s `%s' referenced but not defined" msgstr "Attention : il est fait mention de %s « %s » alors qu'il n'a pas été défini" -#: plugins/sudoers/visudo.c:1275 +#: plugins/sudoers/visudo.c:1235 #, c-format msgid "Warning: unused %s `%s'" msgstr "Attention : %s « %s » n'est pas utilisé" -#: plugins/sudoers/visudo.c:1335 +#: plugins/sudoers/visudo.c:1348 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -1707,7 +1889,7 @@ "%s - édite le fichier sudoers\n" "\n" -#: plugins/sudoers/visudo.c:1337 +#: plugins/sudoers/visudo.c:1350 msgid "" "\n" "Options:\n" @@ -1728,15 +1910,33 @@ " -s, --strict validation stricte de la syntaxe\n" " -V, --version affiche la version, puis met fin à l'exécution -x, --export=fichier_sortie affiche sudoers au format JSON dans le fichier fichier_sortie" -#: plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo_json.c:1018 #, 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" +msgstr "%s : les fichiers d'entrée et de sortie doivent être différents" -#: toke.l:915 +#: toke.l:918 msgid "too many levels of includes" msgstr "nombre de niveaux d'inclusions trop élevé" +#~ msgid "timestamp path too long: %s/%s" +#~ msgstr "Chemin d'accès au fichier d'horodatage trop long : %s/%s" + +#~ msgid "unable to stat editor (%s)" +#~ msgstr "impossible d'obtenir les stats de l'éditeur (%s)" + +#~ msgid "Password:" +#~ msgstr "Mot de passe :" + +#~ msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" +#~ msgstr "sudo_ldap_conf_add_ports : espace insuffisant pour étendre hostbuf" + +#~ msgid "sudo_ldap_parse_uri: out of space building hostbuf" +#~ msgstr "sudo_ldap_parse_uri :espace insuffisant pour créer hostbuf" + +#~ msgid "sudo_ldap_build_pass1 allocation mismatch" +#~ msgstr "sudo_ldap_build_pass1 : erreur d'allocation" + #~ msgid "unable to setup authentication" #~ msgstr "configuration de l'authentification impossible" @@ -1791,9 +1991,6 @@ #~ msgid "pam_authenticate: %s" #~ msgstr "pam_authenticate : %s" -#~ msgid "Password: " -#~ msgstr "Mot de passe :" - #~ msgid "getaudit: failed" #~ msgstr "getaudit : échec" @@ -1818,9 +2015,6 @@ #~ msgid "au_to_text: failed" #~ msgstr "au_to_text : échec" -#~ msgid "unable to allocate memory" -#~ msgstr "impossible d'allouer la mémoire" - #~ msgid "unable to set locale to \"%s\", using \"C\"" #~ msgstr "impossible d'initialiser la localisation à « %s », initialisation à « C »" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/plugins/sudoers/po/hu.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/plugins/sudoers/po/hu.mo differ diff -Nru sudo-1.8.12/plugins/sudoers/po/hu.po sudo-1.8.16/plugins/sudoers/po/hu.po --- sudo-1.8.12/plugins/sudoers/po/hu.po 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/po/hu.po 2015-10-31 23:35:24.000000000 +0000 @@ -0,0 +1,1876 @@ +# Hungarian translation of the sudoers plugin +# Portable object template file for the sudoers plugin +# This file is put in the public domain. +# +# Todd C. Miller , 2011-2014. +# Gabor Kelemen , 2015. +msgid "" +msgstr "" +"Project-Id-Version: sudoers 1.8.14b2\n" +"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" +"POT-Creation-Date: 2015-07-03 07:09-0600\n" +"PO-Revision-Date: 2015-07-07 19:49+0200\n" +"Last-Translator: Gabor Kelemen \n" +"Language-Team: Hungarian \n" +"Language: hu\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: Lokalize 1.5\n" + +#: confstr.sh:1 +msgid "syntax error" +msgstr "szintaktikai hiba" + +#: confstr.sh:2 +msgid "%p's password: " +msgstr "%p jelszava: " + +#: confstr.sh:3 +msgid "[sudo] password for %p: " +msgstr "[sudo] %p jelszava: " + +#: confstr.sh:4 +msgid "Password: " +msgstr "Jelszó: " + +#: confstr.sh:5 +msgid "*** SECURITY information for %h ***" +msgstr "*** BIZTONSÁGI információk erről: %h ***" + +#: confstr.sh:6 +msgid "Sorry, try again." +msgstr "Elnézést, próbálja újra." + +#: gram.y:181 gram.y:199 gram.y:205 gram.y:211 gram.y:217 gram.y:223 +#: gram.y:239 gram.y:246 gram.y:253 gram.y:260 gram.y:267 gram.y:283 +#: gram.y:306 gram.y:313 gram.y:320 gram.y:327 gram.y:334 gram.y:387 +#: gram.y:395 gram.y:405 gram.y:435 gram.y:442 gram.y:449 gram.y:456 +#: gram.y:568 gram.y:575 gram.y:584 gram.y:593 gram.y:610 gram.y:661 +#: gram.y:668 gram.y:675 gram.y:683 gram.y:775 gram.y:782 gram.y:789 +#: gram.y:796 gram.y:803 gram.y:829 gram.y:836 gram.y:843 gram.y:1110 +#: gram.y:1117 plugins/sudoers/alias.c:123 plugins/sudoers/alias.c:136 +#: plugins/sudoers/auth/bsdauth.c:141 plugins/sudoers/auth/kerb5.c:119 +#: plugins/sudoers/auth/kerb5.c:145 plugins/sudoers/auth/pam.c:371 +#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/auth/sia.c:110 +#: plugins/sudoers/defaults.c:516 plugins/sudoers/defaults.c:720 +#: plugins/sudoers/defaults.c:880 plugins/sudoers/editor.c:64 +#: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:92 +#: plugins/sudoers/env.c:233 plugins/sudoers/group_plugin.c:131 +#: plugins/sudoers/iolog.c:582 plugins/sudoers/iolog.c:614 +#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:446 +#: plugins/sudoers/ldap.c:477 plugins/sudoers/ldap.c:529 +#: plugins/sudoers/ldap.c:562 plugins/sudoers/ldap.c:914 +#: plugins/sudoers/ldap.c:1060 plugins/sudoers/ldap.c:1339 +#: plugins/sudoers/ldap.c:1512 plugins/sudoers/ldap.c:1588 +#: plugins/sudoers/ldap.c:1724 plugins/sudoers/ldap.c:1748 +#: plugins/sudoers/ldap.c:1778 plugins/sudoers/ldap.c:1831 +#: plugins/sudoers/ldap.c:1846 plugins/sudoers/ldap.c:1942 +#: plugins/sudoers/ldap.c:1975 plugins/sudoers/ldap.c:2128 +#: plugins/sudoers/ldap.c:2225 plugins/sudoers/ldap.c:3028 +#: plugins/sudoers/ldap.c:3061 plugins/sudoers/ldap.c:3375 +#: plugins/sudoers/ldap.c:3403 plugins/sudoers/ldap.c:3414 +#: plugins/sudoers/ldap.c:3504 plugins/sudoers/ldap.c:3520 +#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 +#: plugins/sudoers/logging.c:662 plugins/sudoers/logging.c:916 +#: plugins/sudoers/match.c:501 plugins/sudoers/match.c:537 +#: plugins/sudoers/match.c:695 plugins/sudoers/match.c:752 +#: plugins/sudoers/parse.c:235 plugins/sudoers/parse.c:247 +#: plugins/sudoers/parse.c:262 plugins/sudoers/parse.c:274 +#: plugins/sudoers/policy.c:384 plugins/sudoers/policy.c:575 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/sssd.c:160 +#: plugins/sudoers/sssd.c:192 plugins/sudoers/sssd.c:198 +#: plugins/sudoers/sssd.c:236 plugins/sudoers/sssd.c:243 +#: plugins/sudoers/sssd.c:279 plugins/sudoers/sssd.c:324 +#: plugins/sudoers/sssd.c:916 plugins/sudoers/sssd.c:1049 +#: plugins/sudoers/sudoers.c:159 plugins/sudoers/sudoers.c:294 +#: plugins/sudoers/sudoers.c:304 plugins/sudoers/sudoers.c:312 +#: plugins/sudoers/sudoers.c:365 plugins/sudoers/sudoers.c:663 +#: plugins/sudoers/sudoers.c:749 plugins/sudoers/sudoers.c:793 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:471 +#: plugins/sudoers/sudoreplay.c:667 plugins/sudoers/sudoreplay.c:779 +#: plugins/sudoers/sudoreplay.c:819 plugins/sudoers/sudoreplay.c:828 +#: plugins/sudoers/sudoreplay.c:838 plugins/sudoers/sudoreplay.c:846 +#: plugins/sudoers/sudoreplay.c:850 plugins/sudoers/sudoreplay.c:1006 +#: plugins/sudoers/sudoreplay.c:1010 plugins/sudoers/testsudoers.c:130 +#: plugins/sudoers/testsudoers.c:187 plugins/sudoers/testsudoers.c:214 +#: plugins/sudoers/testsudoers.c:231 plugins/sudoers/visudo.c:155 +#: plugins/sudoers/visudo.c:215 plugins/sudoers/visudo.c:299 +#: plugins/sudoers/visudo.c:305 plugins/sudoers/visudo.c:435 +#: plugins/sudoers/visudo.c:971 plugins/sudoers/visudo.c:1015 +#: plugins/sudoers/visudo.c:1111 +msgid "unable to allocate memory" +msgstr "nem foglalható memória" + +#: gram.y:467 +msgid "a digest requires a path name" +msgstr "" + +#: gram.y:1110 gram.y:1117 plugins/sudoers/auth/pam.c:371 +#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/defaults.c:516 +#: plugins/sudoers/defaults.c:720 plugins/sudoers/defaults.c:880 +#: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 +#: plugins/sudoers/editor.c:92 plugins/sudoers/env.c:233 +#: plugins/sudoers/group_plugin.c:131 plugins/sudoers/iolog.c:582 +#: plugins/sudoers/iolog.c:614 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:446 plugins/sudoers/ldap.c:477 +#: plugins/sudoers/ldap.c:529 plugins/sudoers/ldap.c:562 +#: plugins/sudoers/ldap.c:914 plugins/sudoers/ldap.c:1060 +#: plugins/sudoers/ldap.c:1339 plugins/sudoers/ldap.c:1512 +#: plugins/sudoers/ldap.c:1588 plugins/sudoers/ldap.c:1724 +#: plugins/sudoers/ldap.c:1748 plugins/sudoers/ldap.c:1778 +#: plugins/sudoers/ldap.c:1831 plugins/sudoers/ldap.c:1846 +#: plugins/sudoers/ldap.c:1942 plugins/sudoers/ldap.c:1975 +#: plugins/sudoers/ldap.c:2128 plugins/sudoers/ldap.c:2225 +#: plugins/sudoers/ldap.c:3028 plugins/sudoers/ldap.c:3061 +#: plugins/sudoers/ldap.c:3375 plugins/sudoers/ldap.c:3403 +#: plugins/sudoers/ldap.c:3414 plugins/sudoers/ldap.c:3504 +#: plugins/sudoers/ldap.c:3520 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:916 +#: plugins/sudoers/match.c:501 plugins/sudoers/match.c:537 +#: plugins/sudoers/match.c:695 plugins/sudoers/match.c:752 +#: plugins/sudoers/parse.c:235 plugins/sudoers/parse.c:247 +#: plugins/sudoers/parse.c:262 plugins/sudoers/parse.c:274 +#: plugins/sudoers/policy.c:97 plugins/sudoers/policy.c:106 +#: plugins/sudoers/policy.c:115 plugins/sudoers/policy.c:139 +#: plugins/sudoers/policy.c:250 plugins/sudoers/policy.c:271 +#: plugins/sudoers/policy.c:280 plugins/sudoers/policy.c:319 +#: plugins/sudoers/policy.c:329 plugins/sudoers/policy.c:338 +#: plugins/sudoers/policy.c:384 plugins/sudoers/policy.c:575 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/set_perms.c:356 +#: plugins/sudoers/set_perms.c:695 plugins/sudoers/set_perms.c:1054 +#: plugins/sudoers/set_perms.c:1350 plugins/sudoers/set_perms.c:1514 +#: plugins/sudoers/sssd.c:160 plugins/sudoers/sssd.c:192 +#: plugins/sudoers/sssd.c:198 plugins/sudoers/sssd.c:236 +#: plugins/sudoers/sssd.c:243 plugins/sudoers/sssd.c:279 +#: plugins/sudoers/sssd.c:324 plugins/sudoers/sssd.c:916 +#: plugins/sudoers/sssd.c:1049 plugins/sudoers/sudoers.c:159 +#: plugins/sudoers/sudoers.c:294 plugins/sudoers/sudoers.c:304 +#: plugins/sudoers/sudoers.c:312 plugins/sudoers/sudoers.c:365 +#: plugins/sudoers/sudoers.c:663 plugins/sudoers/sudoers.c:749 +#: plugins/sudoers/sudoers.c:793 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sudoreplay.c:471 plugins/sudoers/sudoreplay.c:667 +#: plugins/sudoers/sudoreplay.c:779 plugins/sudoers/sudoreplay.c:819 +#: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:838 +#: plugins/sudoers/sudoreplay.c:846 plugins/sudoers/sudoreplay.c:850 +#: plugins/sudoers/sudoreplay.c:1006 plugins/sudoers/sudoreplay.c:1010 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:187 +#: plugins/sudoers/testsudoers.c:214 plugins/sudoers/testsudoers.c:231 +#: plugins/sudoers/visudo.c:155 plugins/sudoers/visudo.c:215 +#: plugins/sudoers/visudo.c:299 plugins/sudoers/visudo.c:305 +#: plugins/sudoers/visudo.c:435 plugins/sudoers/visudo.c:971 +#: plugins/sudoers/visudo.c:1015 plugins/sudoers/visudo.c:1111 +#, c-format +msgid "%s: %s" +msgstr "%s: %s" + +#: plugins/sudoers/alias.c:132 +#, c-format +msgid "Alias `%s' already defined" +msgstr "" + +#: plugins/sudoers/auth/bsdauth.c:68 +#, c-format +msgid "unable to get login class for user %s" +msgstr "" + +#: plugins/sudoers/auth/bsdauth.c:73 +msgid "unable to begin bsd authentication" +msgstr "" + +#: plugins/sudoers/auth/bsdauth.c:81 +msgid "invalid authentication type" +msgstr "" + +#: plugins/sudoers/auth/bsdauth.c:90 +msgid "unable to initialize BSD authentication" +msgstr "" + +#: plugins/sudoers/auth/fwtk.c:52 +msgid "unable to read fwtk config" +msgstr "" + +#: plugins/sudoers/auth/fwtk.c:57 +msgid "unable to connect to authentication server" +msgstr "" + +#: plugins/sudoers/auth/fwtk.c:63 plugins/sudoers/auth/fwtk.c:87 +#: plugins/sudoers/auth/fwtk.c:120 +msgid "lost connection to authentication server" +msgstr "" + +#: plugins/sudoers/auth/fwtk.c:67 +#, c-format +msgid "" +"authentication server error:\n" +"%s" +msgstr "" + +#: plugins/sudoers/auth/kerb5.c:111 +#, c-format +msgid "%s: unable to convert principal to string ('%s'): %s" +msgstr "" + +#: plugins/sudoers/auth/kerb5.c:161 +#, c-format +msgid "%s: unable to parse '%s': %s" +msgstr "" + +#: plugins/sudoers/auth/kerb5.c:170 +#, c-format +msgid "%s: unable to resolve credential cache: %s" +msgstr "" + +#: plugins/sudoers/auth/kerb5.c:217 +#, c-format +msgid "%s: unable to allocate options: %s" +msgstr "" + +#: plugins/sudoers/auth/kerb5.c:232 +#, c-format +msgid "%s: unable to get credentials: %s" +msgstr "" + +#: plugins/sudoers/auth/kerb5.c:245 +#, c-format +msgid "%s: unable to initialize credential cache: %s" +msgstr "" + +#: plugins/sudoers/auth/kerb5.c:248 +#, c-format +msgid "%s: unable to store credential in cache: %s" +msgstr "" + +#: plugins/sudoers/auth/kerb5.c:312 +#, c-format +msgid "%s: unable to get host principal: %s" +msgstr "" + +#: plugins/sudoers/auth/kerb5.c:326 +#, c-format +msgid "%s: Cannot verify TGT! Possible attack!: %s" +msgstr "" + +#: plugins/sudoers/auth/pam.c:90 +msgid "unable to initialize PAM" +msgstr "" + +#: plugins/sudoers/auth/pam.c:146 +msgid "account validation failure, is your account locked?" +msgstr "" + +#: plugins/sudoers/auth/pam.c:150 +msgid "Account or password is expired, reset your password and try again" +msgstr "" + +#: plugins/sudoers/auth/pam.c:158 +#, c-format +msgid "unable to change expired password: %s" +msgstr "" + +#: plugins/sudoers/auth/pam.c:163 +msgid "Password expired, contact your system administrator" +msgstr "" + +#: plugins/sudoers/auth/pam.c:167 +msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator" +msgstr "" + +#: plugins/sudoers/auth/pam.c:179 +#, c-format +msgid "PAM authentication error: %s" +msgstr "" + +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:220 +#, c-format +msgid "you do not exist in the %s database" +msgstr "" + +#: plugins/sudoers/auth/securid5.c:73 +msgid "failed to initialise the ACE API library" +msgstr "" + +#: plugins/sudoers/auth/securid5.c:99 +msgid "unable to contact the SecurID server" +msgstr "" + +#: plugins/sudoers/auth/securid5.c:108 +msgid "User ID locked for SecurID Authentication" +msgstr "" + +#: plugins/sudoers/auth/securid5.c:112 plugins/sudoers/auth/securid5.c:163 +msgid "invalid username length for SecurID" +msgstr "" + +#: plugins/sudoers/auth/securid5.c:116 plugins/sudoers/auth/securid5.c:168 +msgid "invalid Authentication Handle for SecurID" +msgstr "" + +#: plugins/sudoers/auth/securid5.c:120 +msgid "SecurID communication failed" +msgstr "" + +#: plugins/sudoers/auth/securid5.c:124 plugins/sudoers/auth/securid5.c:207 +msgid "unknown SecurID error" +msgstr "" + +#: plugins/sudoers/auth/securid5.c:158 +msgid "invalid passcode length for SecurID" +msgstr "" + +#: plugins/sudoers/auth/sia.c:120 +msgid "unable to initialize SIA session" +msgstr "" + +#: plugins/sudoers/auth/sudo_auth.c:126 +msgid "invalid authentication methods" +msgstr "" + +#: plugins/sudoers/auth/sudo_auth.c:128 +msgid "Invalid authentication methods compiled into sudo! You may not mix standalone and non-standalone authentication." +msgstr "" + +#: plugins/sudoers/auth/sudo_auth.c:224 plugins/sudoers/auth/sudo_auth.c:273 +msgid "no authentication methods" +msgstr "" + +#: plugins/sudoers/auth/sudo_auth.c:226 +msgid "There are no authentication methods compiled into sudo! If you want to turn off authentication, use the --disable-authentication configure option." +msgstr "" + +#: plugins/sudoers/auth/sudo_auth.c:275 +msgid "Unable to initialize authentication methods." +msgstr "" + +#: plugins/sudoers/auth/sudo_auth.c:433 +msgid "Authentication methods:" +msgstr "" + +#: plugins/sudoers/bsm_audit.c:111 plugins/sudoers/bsm_audit.c:200 +msgid "Could not determine audit condition" +msgstr "" + +#: plugins/sudoers/bsm_audit.c:172 plugins/sudoers/bsm_audit.c:260 +msgid "unable to commit audit record" +msgstr "" + +#: plugins/sudoers/check.c:200 +msgid "" +"\n" +"We trust you have received the usual lecture from the local System\n" +"Administrator. It usually boils down to these three things:\n" +"\n" +" #1) Respect the privacy of others.\n" +" #2) Think before you type.\n" +" #3) With great power comes great responsibility.\n" +"\n" +msgstr "" + +#: plugins/sudoers/check.c:243 plugins/sudoers/check.c:253 +#: plugins/sudoers/sudoers.c:699 plugins/sudoers/sudoers.c:728 +#, c-format +msgid "unknown uid: %u" +msgstr "" + +#: plugins/sudoers/check.c:248 plugins/sudoers/policy.c:747 +#: plugins/sudoers/sudoers.c:1095 plugins/sudoers/testsudoers.c:205 +#: plugins/sudoers/testsudoers.c:360 +#, c-format +msgid "unknown user: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:27 +#, c-format +msgid "Syslog facility if syslog is being used for logging: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:31 +#, c-format +msgid "Syslog priority to use when user authenticates successfully: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:35 +#, c-format +msgid "Syslog priority to use when user authenticates unsuccessfully: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:39 +msgid "Put OTP prompt on its own line" +msgstr "" + +#: plugins/sudoers/def_data.c:43 +msgid "Ignore '.' in $PATH" +msgstr "" + +#: plugins/sudoers/def_data.c:47 +msgid "Always send mail when sudo is run" +msgstr "" + +#: plugins/sudoers/def_data.c:51 +msgid "Send mail if user authentication fails" +msgstr "" + +#: plugins/sudoers/def_data.c:55 +msgid "Send mail if the user is not in sudoers" +msgstr "" + +#: plugins/sudoers/def_data.c:59 +msgid "Send mail if the user is not in sudoers for this host" +msgstr "" + +#: plugins/sudoers/def_data.c:63 +msgid "Send mail if the user is not allowed to run a command" +msgstr "" + +#: plugins/sudoers/def_data.c:67 +msgid "Send mail if the user tries to run a command" +msgstr "" + +#: plugins/sudoers/def_data.c:71 +msgid "Use a separate timestamp for each user/tty combo" +msgstr "" + +#: plugins/sudoers/def_data.c:75 +msgid "Lecture user the first time they run sudo" +msgstr "" + +#: plugins/sudoers/def_data.c:79 +#, c-format +msgid "File containing the sudo lecture: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:83 +msgid "Require users to authenticate by default" +msgstr "" + +#: plugins/sudoers/def_data.c:87 +msgid "Root may run sudo" +msgstr "" + +#: plugins/sudoers/def_data.c:91 +msgid "Log the hostname in the (non-syslog) log file" +msgstr "" + +#: plugins/sudoers/def_data.c:95 +msgid "Log the year in the (non-syslog) log file" +msgstr "" + +#: plugins/sudoers/def_data.c:99 +msgid "If sudo is invoked with no arguments, start a shell" +msgstr "" + +#: plugins/sudoers/def_data.c:103 +msgid "Set $HOME to the target user when starting a shell with -s" +msgstr "" + +#: plugins/sudoers/def_data.c:107 +msgid "Always set $HOME to the target user's home directory" +msgstr "" + +#: plugins/sudoers/def_data.c:111 +msgid "Allow some information gathering to give useful error messages" +msgstr "" + +#: plugins/sudoers/def_data.c:115 +msgid "Require fully-qualified hostnames in the sudoers file" +msgstr "" + +#: plugins/sudoers/def_data.c:119 +msgid "Insult the user when they enter an incorrect password" +msgstr "" + +#: plugins/sudoers/def_data.c:123 +msgid "Only allow the user to run sudo if they have a tty" +msgstr "" + +#: plugins/sudoers/def_data.c:127 +msgid "Visudo will honor the EDITOR environment variable" +msgstr "" + +#: plugins/sudoers/def_data.c:131 +msgid "Prompt for root's password, not the users's" +msgstr "" + +#: plugins/sudoers/def_data.c:135 +msgid "Prompt for the runas_default user's password, not the users's" +msgstr "" + +#: plugins/sudoers/def_data.c:139 +msgid "Prompt for the target user's password, not the users's" +msgstr "" + +#: plugins/sudoers/def_data.c:143 +msgid "Apply defaults in the target user's login class if there is one" +msgstr "" + +#: plugins/sudoers/def_data.c:147 +msgid "Set the LOGNAME and USER environment variables" +msgstr "" + +#: plugins/sudoers/def_data.c:151 +msgid "Only set the effective uid to the target user, not the real uid" +msgstr "" + +#: plugins/sudoers/def_data.c:155 +msgid "Don't initialize the group vector to that of the target user" +msgstr "" + +#: plugins/sudoers/def_data.c:159 +#, c-format +msgid "Length at which to wrap log file lines (0 for no wrap): %u" +msgstr "" + +#: plugins/sudoers/def_data.c:163 +#, c-format +msgid "Authentication timestamp timeout: %.1f minutes" +msgstr "" + +#: plugins/sudoers/def_data.c:167 +#, c-format +msgid "Password prompt timeout: %.1f minutes" +msgstr "" + +#: plugins/sudoers/def_data.c:171 +#, c-format +msgid "Number of tries to enter a password: %u" +msgstr "" + +#: plugins/sudoers/def_data.c:175 +#, c-format +msgid "Umask to use or 0777 to use user's: 0%o" +msgstr "" + +#: plugins/sudoers/def_data.c:179 +#, c-format +msgid "Path to log file: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:183 +#, c-format +msgid "Path to mail program: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:187 +#, c-format +msgid "Flags for mail program: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:191 +#, c-format +msgid "Address to send mail to: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:195 +#, c-format +msgid "Address to send mail from: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:199 +#, c-format +msgid "Subject line for mail messages: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:203 +#, c-format +msgid "Incorrect password message: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:207 +#, c-format +msgid "Path to lecture status dir: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:211 +#, c-format +msgid "Path to authentication timestamp dir: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:215 +#, c-format +msgid "Owner of the authentication timestamp dir: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:219 +#, c-format +msgid "Users in this group are exempt from password and PATH requirements: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:223 +#, c-format +msgid "Default password prompt: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:227 +msgid "If set, passprompt will override system prompt in all cases." +msgstr "" + +#: plugins/sudoers/def_data.c:231 +#, c-format +msgid "Default user to run commands as: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:235 +#, c-format +msgid "Value to override user's $PATH with: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:239 +#, c-format +msgid "Path to the editor for use by visudo: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:243 +#, c-format +msgid "When to require a password for 'list' pseudocommand: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:247 +#, c-format +msgid "When to require a password for 'verify' pseudocommand: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:251 +msgid "Preload the dummy exec functions contained in the sudo_noexec library" +msgstr "" + +#: plugins/sudoers/def_data.c:255 +msgid "If LDAP directory is up, do we ignore local sudoers file" +msgstr "" + +#: plugins/sudoers/def_data.c:259 +#, c-format +msgid "File descriptors >= %d will be closed before executing a command" +msgstr "" + +#: plugins/sudoers/def_data.c:263 +msgid "If set, users may override the value of `closefrom' with the -C option" +msgstr "" + +#: plugins/sudoers/def_data.c:267 +msgid "Allow users to set arbitrary environment variables" +msgstr "" + +#: plugins/sudoers/def_data.c:271 +msgid "Reset the environment to a default set of variables" +msgstr "" + +#: plugins/sudoers/def_data.c:275 +msgid "Environment variables to check for sanity:" +msgstr "" + +#: plugins/sudoers/def_data.c:279 +msgid "Environment variables to remove:" +msgstr "" + +#: plugins/sudoers/def_data.c:283 +msgid "Environment variables to preserve:" +msgstr "" + +#: plugins/sudoers/def_data.c:287 +#, c-format +msgid "SELinux role to use in the new security context: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:291 +#, c-format +msgid "SELinux type to use in the new security context: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:295 +#, c-format +msgid "Path to the sudo-specific environment file: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:299 +#, c-format +msgid "Locale to use while parsing sudoers: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:303 +msgid "Allow sudo to prompt for a password even if it would be visible" +msgstr "" + +#: plugins/sudoers/def_data.c:307 +msgid "Provide visual feedback at the password prompt when there is user input" +msgstr "" + +#: plugins/sudoers/def_data.c:311 +msgid "Use faster globbing that is less accurate but does not access the filesystem" +msgstr "" + +#: plugins/sudoers/def_data.c:315 +msgid "The umask specified in sudoers will override the user's, even if it is more permissive" +msgstr "" + +#: plugins/sudoers/def_data.c:319 +msgid "Log user's input for the command being run" +msgstr "" + +#: plugins/sudoers/def_data.c:323 +msgid "Log the output of the command being run" +msgstr "" + +#: plugins/sudoers/def_data.c:327 +msgid "Compress I/O logs using zlib" +msgstr "" + +#: plugins/sudoers/def_data.c:331 +msgid "Always run commands in a pseudo-tty" +msgstr "" + +#: plugins/sudoers/def_data.c:335 +#, c-format +msgid "Plugin for non-Unix group support: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:339 +#, c-format +msgid "Directory in which to store input/output logs: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:343 +#, c-format +msgid "File in which to store the input/output log: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:347 +msgid "Add an entry to the utmp/utmpx file when allocating a pty" +msgstr "" + +#: plugins/sudoers/def_data.c:351 +msgid "Set the user in utmp to the runas user, not the invoking user" +msgstr "" + +#: plugins/sudoers/def_data.c:355 +msgid "Set of permitted privileges" +msgstr "" + +#: plugins/sudoers/def_data.c:359 +msgid "Set of limit privileges" +msgstr "" + +#: plugins/sudoers/def_data.c:363 +msgid "Run commands on a pty in the background" +msgstr "" + +#: plugins/sudoers/def_data.c:367 +msgid "PAM service name to use" +msgstr "" + +#: plugins/sudoers/def_data.c:371 +msgid "PAM service name to use for login shells" +msgstr "" + +#: plugins/sudoers/def_data.c:375 +msgid "Attempt to establish PAM credentials for the target user" +msgstr "" + +#: plugins/sudoers/def_data.c:379 +msgid "Create a new PAM session for the command to run in" +msgstr "" + +#: plugins/sudoers/def_data.c:383 +#, c-format +msgid "Maximum I/O log sequence number: %u" +msgstr "" + +#: plugins/sudoers/def_data.c:387 +msgid "Enable sudoers netgroup support" +msgstr "" + +#: plugins/sudoers/defaults.c:199 plugins/sudoers/defaults.c:608 +#: plugins/sudoers/visudo_json.c:633 plugins/sudoers/visudo_json.c:668 +#, c-format +msgid "unknown defaults entry `%s'" +msgstr "" + +#: plugins/sudoers/defaults.c:207 plugins/sudoers/defaults.c:217 +#: plugins/sudoers/defaults.c:241 plugins/sudoers/defaults.c:256 +#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 +#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 +#: plugins/sudoers/defaults.c:325 +#, c-format +msgid "value `%s' is invalid for option `%s'" +msgstr "" + +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:220 +#: plugins/sudoers/defaults.c:228 plugins/sudoers/defaults.c:251 +#: plugins/sudoers/defaults.c:264 plugins/sudoers/defaults.c:277 +#: plugins/sudoers/defaults.c:290 plugins/sudoers/defaults.c:310 +#: plugins/sudoers/defaults.c:321 +#, c-format +msgid "no value specified for `%s'" +msgstr "" + +#: plugins/sudoers/defaults.c:233 +#, c-format +msgid "values for `%s' must start with a '/'" +msgstr "" + +#: plugins/sudoers/defaults.c:301 +#, c-format +msgid "option `%s' does not take a value" +msgstr "" + +#: plugins/sudoers/env.c:295 plugins/sudoers/env.c:302 +#: plugins/sudoers/env.c:404 plugins/sudoers/ldap.c:450 +#: plugins/sudoers/ldap.c:540 plugins/sudoers/ldap.c:1143 +#: plugins/sudoers/ldap.c:1345 plugins/sudoers/ldap.c:1517 +#: plugins/sudoers/ldap.c:1673 plugins/sudoers/linux_audit.c:82 +#: plugins/sudoers/logging.c:921 plugins/sudoers/policy.c:494 +#: plugins/sudoers/policy.c:503 plugins/sudoers/prompt.c:161 +#: plugins/sudoers/sudoers.c:815 plugins/sudoers/testsudoers.c:235 +#: plugins/sudoers/toke_util.c:160 +#, c-format +msgid "internal error, %s overflow" +msgstr "" + +#: plugins/sudoers/env.c:376 +msgid "sudo_putenv: corrupted envp, length mismatch" +msgstr "" + +#: plugins/sudoers/env.c:1047 +msgid "unable to rebuild the environment" +msgstr "" + +#: plugins/sudoers/env.c:1121 +#, c-format +msgid "sorry, you are not allowed to set the following environment variables: %s" +msgstr "" + +#: plugins/sudoers/group_plugin.c:85 +#, c-format +msgid "%s must be owned by uid %d" +msgstr "" + +#: plugins/sudoers/group_plugin.c:89 +#, c-format +msgid "%s must only be writable by owner" +msgstr "" + +#: plugins/sudoers/group_plugin.c:96 plugins/sudoers/sssd.c:331 +#, c-format +msgid "unable to load %s: %s" +msgstr "a(z) %s nem tölthető be: %s" + +#: plugins/sudoers/group_plugin.c:101 +#, c-format +msgid "unable to find symbol \"group_plugin\" in %s" +msgstr "" + +#: plugins/sudoers/group_plugin.c:106 +#, c-format +msgid "%s: incompatible group plugin major version %d, expected %d" +msgstr "" + +#: plugins/sudoers/interfaces.c:110 +msgid "Local IP address and netmask pairs:\n" +msgstr "" + +#: plugins/sudoers/iolog.c:92 plugins/sudoers/iolog.c:110 +#: plugins/sudoers/timestamp.c:218 +#, c-format +msgid "%s exists but is not a directory (0%o)" +msgstr "" + +#: plugins/sudoers/iolog.c:103 plugins/sudoers/iolog.c:124 +#: plugins/sudoers/iolog.c:131 plugins/sudoers/timestamp.c:212 +#: plugins/sudoers/timestamp.c:233 +#, c-format +msgid "unable to mkdir %s" +msgstr "%s könyvtár nem hozható létre" + +#: plugins/sudoers/iolog.c:200 plugins/sudoers/sudoers.c:871 +#: plugins/sudoers/sudoreplay.c:302 plugins/sudoers/sudoreplay.c:768 +#: plugins/sudoers/sudoreplay.c:972 plugins/sudoers/timestamp.c:370 +#: plugins/sudoers/visudo.c:895 plugins/sudoers/visudo_json.c:1026 +#: plugins/sudoers/visudo_json.c:1039 +#, c-format +msgid "unable to open %s" +msgstr "%s nem nyitható meg" + +#: plugins/sudoers/iolog.c:241 plugins/sudoers/sudoers.c:875 +#: plugins/sudoers/sudoreplay.c:1083 +#, c-format +msgid "unable to read %s" +msgstr "%s nem olvasható" + +#: plugins/sudoers/iolog.c:273 plugins/sudoers/sudoreplay.c:549 +#: plugins/sudoers/timestamp.c:171 plugins/sudoers/timestamp.c:174 +#, c-format +msgid "unable to write to %s" +msgstr "%s nem írható" + +#: plugins/sudoers/iolog.c:338 plugins/sudoers/iolog.c:536 +#, c-format +msgid "unable to create %s" +msgstr "%s létrehozása sikertelen" + +#: plugins/sudoers/ldap.c:428 +msgid "sudo_ldap_conf_add_ports: port too large" +msgstr "" + +#: plugins/sudoers/ldap.c:488 +#, c-format +msgid "unsupported LDAP uri type: %s" +msgstr "" + +#: plugins/sudoers/ldap.c:515 +msgid "unable to mix ldap and ldaps URIs" +msgstr "" + +#: plugins/sudoers/ldap.c:519 plugins/sudoers/ldap.c:555 +msgid "starttls not supported when using ldaps" +msgstr "" + +#: plugins/sudoers/ldap.c:626 +#, c-format +msgid "unable to initialize SSL cert and key db: %s" +msgstr "" + +#: plugins/sudoers/ldap.c:629 +#, c-format +msgid "you must set TLS_CERT in %s to use SSL" +msgstr "" + +#: plugins/sudoers/ldap.c:1129 +msgid "unable to get GMT time" +msgstr "" + +#: plugins/sudoers/ldap.c:1135 +msgid "unable to format timestamp" +msgstr "" + +#: plugins/sudoers/ldap.c:1821 +#, c-format +msgid "%s: %s: %s: %s" +msgstr "" + +#: plugins/sudoers/ldap.c:2360 +#, c-format +msgid "" +"\n" +"LDAP Role: %s\n" +msgstr "" + +#: plugins/sudoers/ldap.c:2362 +#, c-format +msgid "" +"\n" +"LDAP Role: UNKNOWN\n" +msgstr "" + +#: plugins/sudoers/ldap.c:2409 +#, c-format +msgid " Order: %s\n" +msgstr " Sorrend: %s\n" + +#: plugins/sudoers/ldap.c:2417 plugins/sudoers/parse.c:573 +#: plugins/sudoers/sssd.c:1408 +#, c-format +msgid " Commands:\n" +msgstr " Parancsok:\n" + +#: plugins/sudoers/ldap.c:2980 +#, c-format +msgid "unable to initialize LDAP: %s" +msgstr "" + +#: plugins/sudoers/ldap.c:3016 +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:3273 +#, c-format +msgid "invalid sudoOrder attribute: %s" +msgstr "" + +#: plugins/sudoers/linux_audit.c:52 +msgid "unable to open audit system" +msgstr "" + +#: plugins/sudoers/linux_audit.c:93 +msgid "unable to send audit message" +msgstr "" + +#: plugins/sudoers/logging.c:106 +#, c-format +msgid "%8s : %s" +msgstr "%8s : %s" + +#: plugins/sudoers/logging.c:134 +#, c-format +msgid "%8s : (command continued) %s" +msgstr "%8s : (parancs folytatása) %s" + +#: plugins/sudoers/logging.c:159 +#, c-format +msgid "unable to open log file: %s: %s" +msgstr "a naplófájlt nem lehet megnyitni: %s: %s" + +#: plugins/sudoers/logging.c:162 +#, c-format +msgid "unable to lock log file: %s: %s" +msgstr "a naplófájlt nem lehet zárolni: %s: %s" + +#: plugins/sudoers/logging.c:211 +msgid "No user or host" +msgstr "Nem felhasználó vagy gép" + +#: plugins/sudoers/logging.c:213 +msgid "validation failure" +msgstr "érvényesítési hiba" + +#: plugins/sudoers/logging.c:220 +msgid "user NOT in sudoers" +msgstr "a felhasználó NINCS a sudoers-ben" + +#: plugins/sudoers/logging.c:222 +msgid "user NOT authorized on host" +msgstr "a felhasználó NINCS felhatalmazva a gépen" + +#: plugins/sudoers/logging.c:224 +msgid "command not allowed" +msgstr "a parancs nem engedélyezett" + +#: plugins/sudoers/logging.c:259 +#, c-format +msgid "%s is not in the sudoers file. This incident will be reported.\n" +msgstr "%s nincs a sudoers fájlban. Ez az eset jelentésre kerül.\n" + +#: plugins/sudoers/logging.c:262 +#, c-format +msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" +msgstr "%s nem futtathatja a sudo-t ezen: %s. Ez az eset jelentésre kerül.\n" + +#: plugins/sudoers/logging.c:266 +#, c-format +msgid "Sorry, user %s may not run sudo on %s.\n" +msgstr "Elnézést, %s felhasználó nem futtathatja a sudo-t ezen: %s.\n" + +#: plugins/sudoers/logging.c:269 +#, 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:306 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1220 +#: plugins/sudoers/sudoers.c:1222 +#, c-format +msgid "%s: command not found" +msgstr "%s: parancs nem található" + +#: plugins/sudoers/logging.c:308 plugins/sudoers/sudoers.c:467 +#, 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:325 +msgid "authentication failure" +msgstr "hitelesítési hiba" + +#: plugins/sudoers/logging.c:351 +msgid "a password is required" +msgstr "jelszó szükséges" + +#: plugins/sudoers/logging.c:422 plugins/sudoers/logging.c:484 +#, c-format +msgid "%u incorrect password attempt" +msgid_plural "%u incorrect password attempts" +msgstr[0] "%u helytelen jelszópróbálkozás" +msgstr[1] "%u helytelen jelszópróbálkozás" + +#: plugins/sudoers/logging.c:572 +msgid "unable to fork" +msgstr "" + +#: plugins/sudoers/logging.c:580 plugins/sudoers/logging.c:636 +#, c-format +msgid "unable to fork: %m" +msgstr "" + +#: plugins/sudoers/logging.c:626 +#, c-format +msgid "unable to open pipe: %m" +msgstr "" + +#: plugins/sudoers/logging.c:651 +#, c-format +msgid "unable to dup stdin: %m" +msgstr "" + +#: plugins/sudoers/logging.c:689 +#, c-format +msgid "unable to execute %s: %m" +msgstr "" + +#: plugins/sudoers/match.c:606 +#, c-format +msgid "unsupported digest type %d for %s" +msgstr "" + +#: plugins/sudoers/match.c:635 +#, c-format +msgid "%s: read error" +msgstr "%s: olvasási hiba" + +#: plugins/sudoers/match.c:649 +#, c-format +msgid "digest for %s (%s) is not in %s form" +msgstr "" + +#: plugins/sudoers/parse.c:114 +#, c-format +msgid "parse error in %s near line %d" +msgstr "" + +#: plugins/sudoers/parse.c:117 +#, c-format +msgid "parse error in %s" +msgstr "" + +#: plugins/sudoers/parse.c:520 +#, c-format +msgid "" +"\n" +"Sudoers entry:\n" +msgstr "" + +#: plugins/sudoers/parse.c:521 +#, c-format +msgid " RunAsUsers: " +msgstr "" + +#: plugins/sudoers/parse.c:535 +#, c-format +msgid " RunAsGroups: " +msgstr "" + +#: plugins/sudoers/parse.c:544 +#, c-format +msgid " Options: " +msgstr " Beállítások: " + +#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:252 +msgid "unable to parse network address list" +msgstr "" + +#: plugins/sudoers/policy.c:632 plugins/sudoers/visudo.c:836 +#, c-format +msgid "unable to execute %s" +msgstr "%s nem hajtható végre" + +#: plugins/sudoers/policy.c:765 +#, c-format +msgid "Sudoers policy plugin version %s\n" +msgstr "" + +#: plugins/sudoers/policy.c:767 +#, c-format +msgid "Sudoers file grammar version %d\n" +msgstr "" + +#: plugins/sudoers/policy.c:771 +#, c-format +msgid "" +"\n" +"Sudoers path: %s\n" +msgstr "" + +#: plugins/sudoers/policy.c:774 +#, c-format +msgid "nsswitch path: %s\n" +msgstr "" + +#: plugins/sudoers/policy.c:776 +#, c-format +msgid "ldap.conf path: %s\n" +msgstr "" + +#: plugins/sudoers/policy.c:777 +#, c-format +msgid "ldap.secret path: %s\n" +msgstr "" + +#: plugins/sudoers/policy.c:810 +#, c-format +msgid "unable to register hook of type %d (version %d.%d)" +msgstr "" + +#: plugins/sudoers/pwutil.c:136 plugins/sudoers/pwutil.c:153 +#, c-format +msgid "unable to cache uid %u, out of memory" +msgstr "" + +#: plugins/sudoers/pwutil.c:147 +#, c-format +msgid "unable to cache uid %u, already exists" +msgstr "" + +#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:207 +#: plugins/sudoers/pwutil.c:250 plugins/sudoers/pwutil.c:294 +#, c-format +msgid "unable to cache user %s, out of memory" +msgstr "" + +#: plugins/sudoers/pwutil.c:202 +#, c-format +msgid "unable to cache user %s, already exists" +msgstr "" + +#: plugins/sudoers/pwutil.c:427 plugins/sudoers/pwutil.c:444 +#, c-format +msgid "unable to cache gid %u, out of memory" +msgstr "" + +#: plugins/sudoers/pwutil.c:438 +#, c-format +msgid "unable to cache gid %u, already exists" +msgstr "" + +#: plugins/sudoers/pwutil.c:476 plugins/sudoers/pwutil.c:492 +#: plugins/sudoers/pwutil.c:524 plugins/sudoers/pwutil.c:565 +#, c-format +msgid "unable to cache group %s, out of memory" +msgstr "" + +#: plugins/sudoers/pwutil.c:487 +#, c-format +msgid "unable to cache group %s, already exists" +msgstr "" + +#: plugins/sudoers/pwutil.c:676 plugins/sudoers/pwutil.c:710 +#, c-format +msgid "unable to cache group list for %s, already exists" +msgstr "" + +#: plugins/sudoers/pwutil.c:682 plugins/sudoers/pwutil.c:715 +#, c-format +msgid "unable to cache group list for %s, out of memory" +msgstr "" + +#: plugins/sudoers/pwutil.c:705 +#, c-format +msgid "unable to parse groups for %s" +msgstr "" + +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 +#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 +#: plugins/sudoers/set_perms.c:1430 +msgid "perm stack overflow" +msgstr "" + +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 +#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 +#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 +#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 +#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 +msgid "perm stack underflow" +msgstr "" + +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:493 +#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 +msgid "unable to change to root gid" +msgstr "" + +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:590 +#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 +msgid "unable to change to runas gid" +msgstr "" + +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:595 +#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 +msgid "unable to set runas group vector" +msgstr "" + +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:606 +#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +msgid "unable to change to runas uid" +msgstr "" + +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:624 +#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 +msgid "unable to change to sudoers gid" +msgstr "" + +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 +msgid "too many processes" +msgstr "túl sok folyamat" + +#: plugins/sudoers/solaris_audit.c:51 +msgid "unable to get current working directory" +msgstr "az aktuális munkakönyvtár lekérése meghiúsult" + +#: plugins/sudoers/solaris_audit.c:59 +#, c-format +msgid "truncated audit path user_cmnd: %s" +msgstr "" + +#: plugins/sudoers/solaris_audit.c:66 +#, c-format +msgid "truncated audit path argv[0]: %s" +msgstr "" + +#: plugins/sudoers/solaris_audit.c:115 +msgid "audit_failure message too long" +msgstr "" + +#: plugins/sudoers/sssd.c:332 +msgid "unable to initialize SSS source. Is SSSD installed on your machine?" +msgstr "" + +#: plugins/sudoers/sssd.c:340 plugins/sudoers/sssd.c:349 +#: plugins/sudoers/sssd.c:358 plugins/sudoers/sssd.c:367 +#: plugins/sudoers/sssd.c:376 +#, c-format +msgid "unable to find symbol \"%s\" in %s" +msgstr "" + +#: plugins/sudoers/sudo_nss.c:290 +#, c-format +msgid "Matching Defaults entries for %s on %s:\n" +msgstr "" + +#: plugins/sudoers/sudo_nss.c:308 +#, c-format +msgid "Runas and Command-specific defaults for %s:\n" +msgstr "" + +#: plugins/sudoers/sudo_nss.c:326 +#, c-format +msgid "User %s may run the following commands on %s:\n" +msgstr "" + +#: plugins/sudoers/sudo_nss.c:339 +#, c-format +msgid "User %s is not allowed to run sudo on %s.\n" +msgstr "" + +#: plugins/sudoers/sudoers.c:172 plugins/sudoers/testsudoers.c:244 +#: plugins/sudoers/visudo.c:225 plugins/sudoers/visudo.c:562 +msgid "unable to initialize sudoers default values" +msgstr "" + +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:239 +#: plugins/sudoers/sudoers.c:833 +msgid "problem with defaults entries" +msgstr "" + +#: plugins/sudoers/sudoers.c:205 +msgid "no valid sudoers sources found, quitting" +msgstr "" + +#: plugins/sudoers/sudoers.c:275 +msgid "sudoers specifies that root is not allowed to sudo" +msgstr "" + +#: plugins/sudoers/sudoers.c:332 +msgid "you are not permitted to use the -C option" +msgstr "" + +#: plugins/sudoers/sudoers.c:396 +#, c-format +msgid "timestamp owner (%s): No such user" +msgstr "" + +#: plugins/sudoers/sudoers.c:410 +msgid "no tty" +msgstr "" + +#: plugins/sudoers/sudoers.c:411 +msgid "sorry, you must have a tty to run sudo" +msgstr "" + +#: plugins/sudoers/sudoers.c:466 +msgid "command in current directory" +msgstr "" + +#: plugins/sudoers/sudoers.c:486 +msgid "sorry, you are not allowed to preserve the environment" +msgstr "" + +#: plugins/sudoers/sudoers.c:778 +msgid "command too long" +msgstr "a parancs túl hosszú" + +#: plugins/sudoers/sudoers.c:886 plugins/sudoers/visudo.c:428 +#: plugins/sudoers/visudo.c:662 +#, c-format +msgid "unable to stat %s" +msgstr "%s nem érhető el" + +#: plugins/sudoers/sudoers.c:890 +#, c-format +msgid "%s is not a regular file" +msgstr "a(z) %s nem egy szabályos fájl" + +#: plugins/sudoers/sudoers.c:894 plugins/sudoers/timestamp.c:274 toke.l:933 +#, c-format +msgid "%s is owned by uid %u, should be %u" +msgstr "" + +#: plugins/sudoers/sudoers.c:898 toke.l:940 +#, c-format +msgid "%s is world writable" +msgstr "" + +#: plugins/sudoers/sudoers.c:902 toke.l:945 +#, c-format +msgid "%s is owned by gid %u, should be %u" +msgstr "" + +#: plugins/sudoers/sudoers.c:933 +#, c-format +msgid "only root can use `-c %s'" +msgstr "" + +#: plugins/sudoers/sudoers.c:952 +#, c-format +msgid "unknown login class: %s" +msgstr "" + +#: plugins/sudoers/sudoers.c:1031 plugins/sudoers/sudoers.c:1059 +#, c-format +msgid "unable to resolve host %s" +msgstr "" + +#: plugins/sudoers/sudoers.c:1126 plugins/sudoers/testsudoers.c:384 +#, c-format +msgid "unknown group: %s" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:234 +#, c-format +msgid "invalid filter option: %s" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:247 +#, c-format +msgid "invalid max wait: %s" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:253 +#, c-format +msgid "invalid speed factor: %s" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:256 plugins/sudoers/visudo.c:182 +#, c-format +msgid "%s version %s\n" +msgstr "%s: %s verzió\n" + +#: plugins/sudoers/sudoreplay.c:288 +#, c-format +msgid "%s/%.2s/%.2s/%.2s/timing: %s" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:294 +#, c-format +msgid "%s/%s/timing: %s" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:310 +#, c-format +msgid "Replaying sudo session: %s\n" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:316 +#, c-format +msgid "Warning: your terminal is too small to properly replay the log.\n" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:317 +#, c-format +msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." +msgstr "" + +#: plugins/sudoers/sudoreplay.c:369 +msgid "unable to set tty to raw mode" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:400 +#, c-format +msgid "invalid timing file line: %s" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:610 plugins/sudoers/sudoreplay.c:635 +#, c-format +msgid "ambiguous expression \"%s\"" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:657 +msgid "unmatched ')' in expression" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:661 +#, c-format +msgid "unknown search term \"%s\"" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:676 +#, c-format +msgid "%s requires an argument" +msgstr "%s egy argumentumot igényel" + +#: plugins/sudoers/sudoreplay.c:679 plugins/sudoers/sudoreplay.c:1059 +#, c-format +msgid "invalid regular expression: %s" +msgstr "érvénytelen reguláris kifejezés: %s" + +#: plugins/sudoers/sudoreplay.c:683 +#, c-format +msgid "could not parse date \"%s\"" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:692 +msgid "unmatched '(' in expression" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:694 +msgid "illegal trailing \"or\"" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:696 +msgid "illegal trailing \"!\"" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:745 +#, c-format +msgid "unknown search type %d" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:783 +#, c-format +msgid "%s: invalid log file" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:801 +#, c-format +msgid "%s: time stamp field is missing" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:808 +#, c-format +msgid "%s: time stamp %s: %s" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:815 +#, c-format +msgid "%s: user field is missing" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:824 +#, c-format +msgid "%s: runas user field is missing" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:833 +#, c-format +msgid "%s: runas group field is missing" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:1196 +#, c-format +msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" +msgstr "használat: %s [-h] [-d kvt] [-m szám] [-s szám] AZONOSÍTÓ\n" + +#: plugins/sudoers/sudoreplay.c:1199 +#, c-format +msgid "usage: %s [-h] [-d dir] -l [search expression]\n" +msgstr "használat: %s [-h] [-d kvt] -l [keresőkifejezés]\n" + +#: plugins/sudoers/sudoreplay.c:1208 +#, c-format +msgid "" +"%s - replay sudo session logs\n" +"\n" +msgstr "" +"%s - sudo munkamenetek naplójának újrajátszása\n" +"\n" + +#: plugins/sudoers/sudoreplay.c:1210 +msgid "" +"\n" +"Options:\n" +" -d, --directory=dir specify directory for session logs\n" +" -f, --filter=filter specify which I/O type(s) to display\n" +" -h, --help display help message and exit\n" +" -l, --list list available session IDs, with optional expression\n" +" -m, --max-wait=num max number of seconds to wait between events\n" +" -s, --speed=num speed up or slow down output\n" +" -V, --version display version information and exit" +msgstr "" +"\n" +"Beállítások:\n" +" -d, --directory=kvt munkamenet-naplók könyvtárának megadása\n" +" -f, --filter=szűrő megjelenítendő I/O típusok megadása\n" +" -h, --help súgóüzenet megjelenítése és kilépés\n" +" -l, --list elérhető munkamenet-azonosítók listája, elhagyható\n" +" kifejezéssel\n" +" -m, --max-wait=szám események közti várakozás legfeljebb ennyi másodpercig\n" +" -s, --speed=szám kimenet felgyorsítása vagy lelassítása\n" +" -V, --version verzióinformációk kiírása és kilépés" + +#: plugins/sudoers/testsudoers.c:323 +msgid "\thost unmatched" +msgstr "" + +#: plugins/sudoers/testsudoers.c:326 +msgid "" +"\n" +"Command allowed" +msgstr "" + +#: plugins/sudoers/testsudoers.c:327 +msgid "" +"\n" +"Command denied" +msgstr "" + +#: plugins/sudoers/testsudoers.c:327 +msgid "" +"\n" +"Command unmatched" +msgstr "" + +#: plugins/sudoers/timestamp.c:182 +#, c-format +msgid "unable to truncate time stamp file to %lld bytes" +msgstr "" + +#: plugins/sudoers/timestamp.c:282 +#, c-format +msgid "%s is group writable" +msgstr "" + +#: plugins/sudoers/timestamp.c:303 +#, c-format +msgid "timestamp path too long: %s/%s" +msgstr "" + +#: plugins/sudoers/timestamp.c:362 plugins/sudoers/timestamp.c:446 +#: plugins/sudoers/visudo.c:483 plugins/sudoers/visudo.c:489 +msgid "unable to read the clock" +msgstr "" + +#: plugins/sudoers/timestamp.c:516 +msgid "ignoring time stamp from the future" +msgstr "" + +#: plugins/sudoers/timestamp.c:528 +#, c-format +msgid "time stamp too far in the future: %20.20s" +msgstr "" + +#: plugins/sudoers/timestamp.c:638 plugins/sudoers/timestamp.c:658 +#, c-format +msgid "lecture status path too long: %s/%s" +msgstr "" + +#: plugins/sudoers/visudo.c:184 +#, c-format +msgid "%s grammar version %d\n" +msgstr "" + +#: plugins/sudoers/visudo.c:256 plugins/sudoers/visudo.c:614 +#, c-format +msgid "press return to edit %s: " +msgstr "" + +#: plugins/sudoers/visudo.c:321 +#, c-format +msgid "specified editor (%s) doesn't exist" +msgstr "" + +#: plugins/sudoers/visudo.c:337 +#, c-format +msgid "no editor found (editor path = %s)" +msgstr "" + +#: plugins/sudoers/visudo.c:445 plugins/sudoers/visudo.c:451 +#, fuzzy +msgid "write error" +msgstr "íráshiba" + +#: plugins/sudoers/visudo.c:496 +#, c-format +msgid "unable to stat temporary file (%s), %s unchanged" +msgstr "" + +#: plugins/sudoers/visudo.c:503 +#, c-format +msgid "zero length temporary file (%s), %s unchanged" +msgstr "" + +#: plugins/sudoers/visudo.c:509 +#, c-format +msgid "editor (%s) failed, %s unchanged" +msgstr "" + +#: plugins/sudoers/visudo.c:531 +#, c-format +msgid "%s unchanged" +msgstr "" + +#: plugins/sudoers/visudo.c:557 +#, c-format +msgid "unable to re-open temporary file (%s), %s unchanged." +msgstr "" + +#: plugins/sudoers/visudo.c:568 +#, c-format +msgid "unabled to parse temporary file (%s), unknown error" +msgstr "" + +#: plugins/sudoers/visudo.c:605 +#, c-format +msgid "internal error, unable to find %s in list!" +msgstr "" + +#: plugins/sudoers/visudo.c:664 plugins/sudoers/visudo.c:673 +#, c-format +msgid "unable to set (uid, gid) of %s to (%u, %u)" +msgstr "" + +#: plugins/sudoers/visudo.c:668 plugins/sudoers/visudo.c:678 +#, c-format +msgid "unable to change mode of %s to 0%o" +msgstr "" + +#: plugins/sudoers/visudo.c:695 +#, c-format +msgid "%s and %s not on the same file system, using mv to rename" +msgstr "" + +#: plugins/sudoers/visudo.c:709 +#, c-format +msgid "command failed: '%s %s %s', %s unchanged" +msgstr "" + +#: plugins/sudoers/visudo.c:719 +#, c-format +msgid "error renaming %s, %s unchanged" +msgstr "" + +#: plugins/sudoers/visudo.c:781 +msgid "What now? " +msgstr "" + +#: plugins/sudoers/visudo.c:795 +msgid "" +"Options are:\n" +" (e)dit sudoers file again\n" +" e(x)it without saving changes to sudoers file\n" +" (Q)uit and save changes to sudoers file (DANGER!)\n" +msgstr "" + +#: plugins/sudoers/visudo.c:843 +#, c-format +msgid "unable to run %s" +msgstr "" + +#: plugins/sudoers/visudo.c:869 +#, c-format +msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" +msgstr "" + +#: plugins/sudoers/visudo.c:876 +#, c-format +msgid "%s: bad permissions, should be mode 0%o\n" +msgstr "" + +#: plugins/sudoers/visudo.c:901 plugins/sudoers/visudo_json.c:1046 +#, c-format +msgid "failed to parse %s file, unknown error" +msgstr "" + +#: plugins/sudoers/visudo.c:917 plugins/sudoers/visudo_json.c:1055 +#, c-format +msgid "parse error in %s near line %d\n" +msgstr "" + +#: plugins/sudoers/visudo.c:920 plugins/sudoers/visudo_json.c:1058 +#, c-format +msgid "parse error in %s\n" +msgstr "" + +#: plugins/sudoers/visudo.c:928 plugins/sudoers/visudo.c:935 +#, c-format +msgid "%s: parsed OK\n" +msgstr "" + +#: plugins/sudoers/visudo.c:982 +#, c-format +msgid "%s busy, try again later" +msgstr "" + +#: plugins/sudoers/visudo.c:1078 +#, c-format +msgid "Error: cycle in %s `%s'" +msgstr "" + +#: plugins/sudoers/visudo.c:1079 +#, c-format +msgid "Warning: cycle in %s `%s'" +msgstr "" + +#: plugins/sudoers/visudo.c:1083 +#, c-format +msgid "Error: %s `%s' referenced but not defined" +msgstr "" + +#: plugins/sudoers/visudo.c:1084 +#, c-format +msgid "Warning: %s `%s' referenced but not defined" +msgstr "" + +#: plugins/sudoers/visudo.c:1227 +#, c-format +msgid "Warning: unused %s `%s'" +msgstr "" + +#: plugins/sudoers/visudo.c:1340 +#, c-format +msgid "" +"%s - safely edit the sudoers file\n" +"\n" +msgstr "" +"%s - a sudoers fájl biztonságos szerkesztése\n" +"\n" + +#: plugins/sudoers/visudo.c:1342 +msgid "" +"\n" +"Options:\n" +" -c, --check check-only mode\n" +" -f, --file=sudoers specify sudoers file location\n" +" -h, --help display help message and exit\n" +" -q, --quiet less verbose (quiet) syntax error messages\n" +" -s, --strict strict syntax checking\n" +" -V, --version display version information and exit\n" +" -x, --export=output_file write sudoers in JSON format to output_file" +msgstr "" +"\n" +"Kapcsolók:\n" +" -c, --check csak ellenőrzés mód\n" +" -f, --file=sudoers a sudoers fájl helyének megadása\n" +" -h, --help súgóüzenet megjelenítése és kilépés\n" +" -q, --quiet kevésbé részletes (csendes) szintaktikaihiba-üzenetek\n" +" -s, --strict szigorú szintaxis-ellenőrzés\n" +" -V, --version verzióinformációk kiírása és kilépés\n" +" -x, --export=KIMENETIFÁJL a sudoers kiírása JSON formátumban a KIMENETIFÁJLBA" + +#: plugins/sudoers/visudo_json.c:1032 +#, c-format +msgid "%s: input and output files must be different" +msgstr "" + +#: toke.l:904 +msgid "too many levels of includes" +msgstr "" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/plugins/sudoers/po/it.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/plugins/sudoers/po/it.mo differ diff -Nru sudo-1.8.12/plugins/sudoers/po/it.po sudo-1.8.16/plugins/sudoers/po/it.po --- sudo-1.8.12/plugins/sudoers/po/it.po 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/po/it.po 2016-03-17 16:13:10.000000000 +0000 @@ -1,13 +1,13 @@ # Italian translations for sudoers package # This file is put in the public domain. -# Milo Casagrande , 2011, 2012, 2013. +# Milo Casagrande , 2011, 2012, 2013, 2014, 2015, 2016. # msgid "" msgstr "" -"Project-Id-Version: sudoers-1.8.12b3\n" -"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-11-20 13:33-0700\n" -"PO-Revision-Date: 2014-11-22 15:55+0100\n" +"Project-Id-Version: sudoers-1.8.16b1\n" +"Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" +"POT-Creation-Date: 2016-02-19 15:48-0700\n" +"PO-Revision-Date: 2016-02-28 16:36+0100\n" "Last-Translator: Milo Casagrande \n" "Language-Team: Italian \n" "Language: it\n" @@ -15,7 +15,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 1.6.10\n" +"X-Generator: Poedit 1.8.7\n" "X-Poedit-SourceCharset: UTF-8\n" #: confstr.sh:1 @@ -42,46 +42,172 @@ msgid "Sorry, try again." msgstr "Riprovare." -#: gram.y:379 +#: gram.y:183 gram.y:201 gram.y:207 gram.y:213 gram.y:219 gram.y:225 +#: gram.y:241 gram.y:248 gram.y:255 gram.y:262 gram.y:269 gram.y:285 +#: gram.y:308 gram.y:315 gram.y:322 gram.y:329 gram.y:336 gram.y:391 +#: gram.y:399 gram.y:409 gram.y:439 gram.y:446 gram.y:453 gram.y:460 +#: gram.y:572 gram.y:579 gram.y:588 gram.y:597 gram.y:614 gram.y:670 +#: gram.y:677 gram.y:684 gram.y:692 gram.y:784 gram.y:791 gram.y:798 +#: gram.y:805 gram.y:812 gram.y:838 gram.y:845 gram.y:852 gram.y:1136 +#: gram.y:1143 plugins/sudoers/alias.c:123 plugins/sudoers/alias.c:136 +#: plugins/sudoers/auth/bsdauth.c:141 plugins/sudoers/auth/kerb5.c:119 +#: plugins/sudoers/auth/kerb5.c:145 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/auth/sia.c:59 +#: plugins/sudoers/defaults.c:518 plugins/sudoers/defaults.c:722 +#: plugins/sudoers/defaults.c:882 plugins/sudoers/editor.c:64 +#: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:92 +#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/iolog.c:586 +#: plugins/sudoers/iolog.c:618 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:446 plugins/sudoers/ldap.c:477 +#: plugins/sudoers/ldap.c:529 plugins/sudoers/ldap.c:562 +#: plugins/sudoers/ldap.c:917 plugins/sudoers/ldap.c:1064 +#: plugins/sudoers/ldap.c:1384 plugins/sudoers/ldap.c:1542 +#: plugins/sudoers/ldap.c:1620 plugins/sudoers/ldap.c:1756 +#: plugins/sudoers/ldap.c:1780 plugins/sudoers/ldap.c:1810 +#: plugins/sudoers/ldap.c:1863 plugins/sudoers/ldap.c:1878 +#: plugins/sudoers/ldap.c:1974 plugins/sudoers/ldap.c:2007 +#: plugins/sudoers/ldap.c:2160 plugins/sudoers/ldap.c:2257 +#: plugins/sudoers/ldap.c:3063 plugins/sudoers/ldap.c:3096 +#: plugins/sudoers/ldap.c:3407 plugins/sudoers/ldap.c:3435 +#: plugins/sudoers/ldap.c:3451 plugins/sudoers/ldap.c:3540 +#: plugins/sudoers/ldap.c:3556 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:666 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:508 +#: plugins/sudoers/match.c:544 plugins/sudoers/match.c:742 +#: plugins/sudoers/match.c:799 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:393 +#: plugins/sudoers/policy.c:602 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/sssd.c:160 plugins/sudoers/sssd.c:192 +#: plugins/sudoers/sssd.c:235 plugins/sudoers/sssd.c:242 +#: plugins/sudoers/sssd.c:278 plugins/sudoers/sssd.c:323 +#: plugins/sudoers/sssd.c:920 plugins/sudoers/sssd.c:1053 +#: plugins/sudoers/sudoers.c:159 plugins/sudoers/sudoers.c:294 +#: plugins/sudoers/sudoers.c:304 plugins/sudoers/sudoers.c:312 +#: plugins/sudoers/sudoers.c:365 plugins/sudoers/sudoers.c:663 +#: plugins/sudoers/sudoers.c:749 plugins/sudoers/sudoers.c:793 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:472 +#: plugins/sudoers/sudoreplay.c:668 plugins/sudoers/sudoreplay.c:780 +#: plugins/sudoers/sudoreplay.c:820 plugins/sudoers/sudoreplay.c:829 +#: plugins/sudoers/sudoreplay.c:839 plugins/sudoers/sudoreplay.c:847 +#: plugins/sudoers/sudoreplay.c:851 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1011 plugins/sudoers/testsudoers.c:130 +#: plugins/sudoers/testsudoers.c:188 plugins/sudoers/testsudoers.c:215 +#: plugins/sudoers/testsudoers.c:232 plugins/sudoers/timestamp.c:390 +#: plugins/sudoers/timestamp.c:426 plugins/sudoers/timestamp.c:838 +#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 +#: plugins/sudoers/toke_util.c:147 plugins/sudoers/visudo.c:152 +#: plugins/sudoers/visudo.c:213 plugins/sudoers/visudo.c:298 +#: plugins/sudoers/visudo.c:304 plugins/sudoers/visudo.c:434 +#: plugins/sudoers/visudo.c:980 plugins/sudoers/visudo.c:1024 +#: plugins/sudoers/visudo.c:1120 toke.l:785 toke.l:806 toke.l:816 toke.l:924 +#: toke.l:1082 +msgid "unable to allocate memory" +msgstr "impossibile allocare memoria" + +#: gram.y:471 msgid "a digest requires a path name" msgstr "un digest richiede il nome di percorso" -#: plugins/sudoers/alias.c:136 +#: gram.y:1136 gram.y:1143 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/defaults.c:518 +#: plugins/sudoers/defaults.c:722 plugins/sudoers/defaults.c:882 +#: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 +#: plugins/sudoers/editor.c:92 plugins/sudoers/env.c:234 +#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 +#: plugins/sudoers/iolog.c:586 plugins/sudoers/iolog.c:618 +#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:446 +#: plugins/sudoers/ldap.c:477 plugins/sudoers/ldap.c:529 +#: plugins/sudoers/ldap.c:562 plugins/sudoers/ldap.c:917 +#: plugins/sudoers/ldap.c:1064 plugins/sudoers/ldap.c:1384 +#: plugins/sudoers/ldap.c:1542 plugins/sudoers/ldap.c:1620 +#: plugins/sudoers/ldap.c:1756 plugins/sudoers/ldap.c:1780 +#: plugins/sudoers/ldap.c:1810 plugins/sudoers/ldap.c:1863 +#: plugins/sudoers/ldap.c:1878 plugins/sudoers/ldap.c:1974 +#: plugins/sudoers/ldap.c:2007 plugins/sudoers/ldap.c:2160 +#: plugins/sudoers/ldap.c:2257 plugins/sudoers/ldap.c:3063 +#: plugins/sudoers/ldap.c:3096 plugins/sudoers/ldap.c:3407 +#: plugins/sudoers/ldap.c:3434 plugins/sudoers/ldap.c:3450 +#: plugins/sudoers/ldap.c:3540 plugins/sudoers/ldap.c:3556 +#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:508 +#: plugins/sudoers/match.c:544 plugins/sudoers/match.c:742 +#: plugins/sudoers/match.c:799 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:97 +#: plugins/sudoers/policy.c:106 plugins/sudoers/policy.c:115 +#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:250 +#: plugins/sudoers/policy.c:277 plugins/sudoers/policy.c:286 +#: plugins/sudoers/policy.c:325 plugins/sudoers/policy.c:335 +#: plugins/sudoers/policy.c:344 plugins/sudoers/policy.c:393 +#: plugins/sudoers/policy.c:602 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:160 +#: plugins/sudoers/sssd.c:192 plugins/sudoers/sssd.c:235 +#: plugins/sudoers/sssd.c:242 plugins/sudoers/sssd.c:278 +#: plugins/sudoers/sssd.c:323 plugins/sudoers/sssd.c:920 +#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sudoers.c:159 +#: plugins/sudoers/sudoers.c:294 plugins/sudoers/sudoers.c:304 +#: plugins/sudoers/sudoers.c:312 plugins/sudoers/sudoers.c:365 +#: plugins/sudoers/sudoers.c:663 plugins/sudoers/sudoers.c:749 +#: plugins/sudoers/sudoers.c:793 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sudoreplay.c:472 plugins/sudoers/sudoreplay.c:668 +#: plugins/sudoers/sudoreplay.c:780 plugins/sudoers/sudoreplay.c:820 +#: plugins/sudoers/sudoreplay.c:829 plugins/sudoers/sudoreplay.c:839 +#: plugins/sudoers/sudoreplay.c:847 plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:1007 plugins/sudoers/sudoreplay.c:1011 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:188 +#: plugins/sudoers/testsudoers.c:215 plugins/sudoers/testsudoers.c:232 +#: plugins/sudoers/timestamp.c:390 plugins/sudoers/timestamp.c:426 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:147 +#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:213 +#: plugins/sudoers/visudo.c:298 plugins/sudoers/visudo.c:304 +#: plugins/sudoers/visudo.c:434 plugins/sudoers/visudo.c:980 +#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1120 toke.l:785 +#: toke.l:806 toke.l:816 toke.l:924 toke.l:1082 +#, c-format +msgid "%s: %s" +msgstr "%s: %s" + +#: plugins/sudoers/alias.c:132 #, c-format msgid "Alias `%s' already defined" msgstr "Alias \"%s\" già definito" -#: plugins/sudoers/auth/bsdauth.c:75 +#: plugins/sudoers/auth/bsdauth.c:68 #, c-format msgid "unable to get login class for user %s" msgstr "impossibile ottenere la classe di login per l'utente %s" -#: plugins/sudoers/auth/bsdauth.c:80 +#: plugins/sudoers/auth/bsdauth.c:73 msgid "unable to begin bsd authentication" msgstr "impossibile iniziare l'autenticazione bsd" -#: plugins/sudoers/auth/bsdauth.c:88 +#: plugins/sudoers/auth/bsdauth.c:81 msgid "invalid authentication type" msgstr "tipo di autenticazione non valida" -#: plugins/sudoers/auth/bsdauth.c:97 +#: plugins/sudoers/auth/bsdauth.c:90 msgid "unable to initialize BSD authentication" msgstr "impossibile iniziare l'autenticazione BSD" -#: plugins/sudoers/auth/fwtk.c:59 +#: plugins/sudoers/auth/fwtk.c:52 msgid "unable to read fwtk config" msgstr "impossibile leggere la configurazione fwtk" -#: plugins/sudoers/auth/fwtk.c:64 +#: plugins/sudoers/auth/fwtk.c:57 msgid "unable to connect to authentication server" msgstr "impossibile connettersi al server di autenticazione" -#: plugins/sudoers/auth/fwtk.c:70 plugins/sudoers/auth/fwtk.c:94 -#: plugins/sudoers/auth/fwtk.c:127 +#: plugins/sudoers/auth/fwtk.c:63 plugins/sudoers/auth/fwtk.c:87 +#: plugins/sudoers/auth/fwtk.c:121 msgid "lost connection to authentication server" msgstr "connessione al server di autenticazione persa" -#: plugins/sudoers/auth/fwtk.c:74 +#: plugins/sudoers/auth/fwtk.c:67 #, c-format msgid "" "authentication server error:\n" @@ -90,155 +216,155 @@ "errore del server di autenticazione:\n" "%s" -#: plugins/sudoers/auth/kerb5.c:116 +#: plugins/sudoers/auth/kerb5.c:111 #, c-format msgid "%s: unable to convert principal to string ('%s'): %s" msgstr "%s: impossibile convertire il principal in stringa (\"%s\"): %s" -#: plugins/sudoers/auth/kerb5.c:158 +#: plugins/sudoers/auth/kerb5.c:161 #, c-format msgid "%s: unable to parse '%s': %s" msgstr "%s: impossibile analizzare \"%s\": %s" -#: plugins/sudoers/auth/kerb5.c:167 +#: plugins/sudoers/auth/kerb5.c:170 #, c-format msgid "%s: unable to resolve credential cache: %s" msgstr "%s: impossibile risolvere la cache delle credenziali: %s" -#: plugins/sudoers/auth/kerb5.c:214 +#: plugins/sudoers/auth/kerb5.c:217 #, c-format msgid "%s: unable to allocate options: %s" msgstr "%s: impossibile allocare le opzioni: %s" -#: plugins/sudoers/auth/kerb5.c:229 +#: plugins/sudoers/auth/kerb5.c:232 #, c-format msgid "%s: unable to get credentials: %s" msgstr "%s: impossibile ottenere le credenziali: %s" -#: plugins/sudoers/auth/kerb5.c:242 +#: plugins/sudoers/auth/kerb5.c:245 #, c-format msgid "%s: unable to initialize credential cache: %s" msgstr "%s: impossibile inizializzare la cache delle credenziali: %s" -#: plugins/sudoers/auth/kerb5.c:245 +#: plugins/sudoers/auth/kerb5.c:248 #, c-format msgid "%s: unable to store credential in cache: %s" msgstr "%s: impossibile memorizzare le credenziali nella cache: %s" -#: plugins/sudoers/auth/kerb5.c:309 +#: plugins/sudoers/auth/kerb5.c:312 #, c-format msgid "%s: unable to get host principal: %s" msgstr "%s: impossibile ottenere il principal dell'host: %s" -#: plugins/sudoers/auth/kerb5.c:323 +#: plugins/sudoers/auth/kerb5.c:326 #, c-format msgid "%s: Cannot verify TGT! Possible attack!: %s" msgstr "%s: impossibile verificare TGT. Possibile attacco in corso: %s" -#: plugins/sudoers/auth/pam.c:98 +#: plugins/sudoers/auth/pam.c:92 msgid "unable to initialize PAM" msgstr "impossibile inizializzare PAM" -#: plugins/sudoers/auth/pam.c:149 +#: plugins/sudoers/auth/pam.c:164 msgid "account validation failure, is your account locked?" msgstr "validazione dell'account non riuscita: forse è bloccato?" -#: plugins/sudoers/auth/pam.c:153 +#: plugins/sudoers/auth/pam.c:168 msgid "Account or password is expired, reset your password and try again" msgstr "Account o password scaduto: reimpostare la password e provare nuovamente" -#: plugins/sudoers/auth/pam.c:161 +#: plugins/sudoers/auth/pam.c:176 #, c-format msgid "unable to change expired password: %s" msgstr "impossibile modificare la password scaduta: %s" -#: plugins/sudoers/auth/pam.c:166 +#: plugins/sudoers/auth/pam.c:181 msgid "Password expired, contact your system administrator" msgstr "Password scaduta, contattare l'amministratore di sistema" -#: plugins/sudoers/auth/pam.c:170 +#: plugins/sudoers/auth/pam.c:185 msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator" msgstr "Account scaduto o alla configurazione PAM manca una sezione \"account\" per sudo: contattare l'amministratore di sistema" -#: plugins/sudoers/auth/pam.c:187 +#: plugins/sudoers/auth/pam.c:199 #, c-format msgid "PAM authentication error: %s" msgstr "errore autenticazione PAM: %s" -#: plugins/sudoers/auth/rfc1938.c:103 plugins/sudoers/visudo.c:228 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:218 #, c-format msgid "you do not exist in the %s database" msgstr "l'utente attuale non esiste nel database %s" -#: plugins/sudoers/auth/securid5.c:80 +#: plugins/sudoers/auth/securid5.c:73 msgid "failed to initialise the ACE API library" msgstr "inizializzazione della libreria API ACE non riuscita" -#: plugins/sudoers/auth/securid5.c:106 +#: plugins/sudoers/auth/securid5.c:99 msgid "unable to contact the SecurID server" msgstr "impossibile contattare il server SecurID" -#: plugins/sudoers/auth/securid5.c:115 +#: plugins/sudoers/auth/securid5.c:108 msgid "User ID locked for SecurID Authentication" msgstr "ID utente bloccato per l'autenticazione SecurID" -#: plugins/sudoers/auth/securid5.c:119 plugins/sudoers/auth/securid5.c:170 +#: plugins/sudoers/auth/securid5.c:112 plugins/sudoers/auth/securid5.c:163 msgid "invalid username length for SecurID" msgstr "lunghezza del nome utente per SecurID non valida" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:175 +#: plugins/sudoers/auth/securid5.c:116 plugins/sudoers/auth/securid5.c:168 msgid "invalid Authentication Handle for SecurID" msgstr "gestore di autenticazione per SecurID non valido" -#: plugins/sudoers/auth/securid5.c:127 +#: plugins/sudoers/auth/securid5.c:120 msgid "SecurID communication failed" msgstr "Comunicazione SecurID non riuscita" -#: plugins/sudoers/auth/securid5.c:131 plugins/sudoers/auth/securid5.c:214 +#: plugins/sudoers/auth/securid5.c:124 plugins/sudoers/auth/securid5.c:211 msgid "unknown SecurID error" msgstr "errore sconosciuto di SecurID" -#: plugins/sudoers/auth/securid5.c:165 +#: plugins/sudoers/auth/securid5.c:158 msgid "invalid passcode length for SecurID" msgstr "lunghezza del passcode per SecurID errata" -#: plugins/sudoers/auth/sia.c:123 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:125 msgid "unable to initialize SIA session" msgstr "impossibile inizializzare la sessione SIA" -#: plugins/sudoers/auth/sudo_auth.c:115 +#: plugins/sudoers/auth/sudo_auth.c:126 msgid "invalid authentication methods" msgstr "metodi di autenticazione non validi" -#: plugins/sudoers/auth/sudo_auth.c:117 +#: plugins/sudoers/auth/sudo_auth.c:128 msgid "Invalid authentication methods compiled into sudo! You may not mix standalone and non-standalone authentication." msgstr "Metodi di autenticazione non validi compilati all'interno di sudo. Non è possibile usare assieme autenticazione standalone e non-standalone." -#: plugins/sudoers/auth/sudo_auth.c:203 plugins/sudoers/auth/sudo_auth.c:252 +#: plugins/sudoers/auth/sudo_auth.c:224 plugins/sudoers/auth/sudo_auth.c:274 msgid "no authentication methods" msgstr "nessun metodo di autenticazione" -#: plugins/sudoers/auth/sudo_auth.c:205 +#: plugins/sudoers/auth/sudo_auth.c:226 msgid "There are no authentication methods compiled into sudo! If you want to turn off authentication, use the --disable-authentication configure option." msgstr "Non ci sono metodi di autenticazione compilati all'interno di sudo. Per disabilitare l'autenticazione, usare l'opzione di configurazione --disable-authentication." -#: plugins/sudoers/auth/sudo_auth.c:254 +#: plugins/sudoers/auth/sudo_auth.c:276 msgid "Unable to initialize authentication methods." msgstr "impossibile inizializzare i metodi di autenticazione" -#: plugins/sudoers/auth/sudo_auth.c:412 +#: plugins/sudoers/auth/sudo_auth.c:442 msgid "Authentication methods:" msgstr "Metodi di autenticazione:" -#: plugins/sudoers/bsm_audit.c:95 plugins/sudoers/bsm_audit.c:184 +#: plugins/sudoers/bsm_audit.c:111 plugins/sudoers/bsm_audit.c:200 msgid "Could not determine audit condition" msgstr "Impossibile determinare la condizione di audit" -#: plugins/sudoers/bsm_audit.c:156 plugins/sudoers/bsm_audit.c:244 +#: plugins/sudoers/bsm_audit.c:172 plugins/sudoers/bsm_audit.c:260 msgid "unable to commit audit record" msgstr "impossibile inviare il record di audit" -#: plugins/sudoers/check.c:197 +#: plugins/sudoers/check.c:252 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -258,15 +384,15 @@ " #3) Da grandi poteri derivano grandi responsabilità\n" "\n" -#: plugins/sudoers/check.c:240 plugins/sudoers/check.c:250 -#: plugins/sudoers/sudoers.c:599 plugins/sudoers/sudoers.c:628 +#: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 +#: plugins/sudoers/sudoers.c:699 plugins/sudoers/sudoers.c:728 #, c-format msgid "unknown uid: %u" msgstr "uid sconosciuto: %u" -#: plugins/sudoers/check.c:245 plugins/sudoers/policy.c:683 -#: plugins/sudoers/sudoers.c:955 plugins/sudoers/testsudoers.c:212 -#: plugins/sudoers/testsudoers.c:364 +#: plugins/sudoers/check.c:300 plugins/sudoers/policy.c:774 +#: plugins/sudoers/sudoers.c:1095 plugins/sudoers/testsudoers.c:206 +#: plugins/sudoers/testsudoers.c:361 #, c-format msgid "unknown user: %s" msgstr "utente sconosciuto: %s" @@ -315,535 +441,550 @@ msgstr "Invia una email se l'utente non è abilitato a eseguire un comando" #: plugins/sudoers/def_data.c:67 +msgid "Send mail if the user tries to run a command" +msgstr "Invia una email se l'utente tenta di eseguire un comando" + +#: plugins/sudoers/def_data.c:71 msgid "Use a separate timestamp for each user/tty combo" msgstr "Usa una marcatura temporale diversa per ogni combinazione utente/tty" -#: plugins/sudoers/def_data.c:71 +#: plugins/sudoers/def_data.c:75 msgid "Lecture user the first time they run sudo" msgstr "Aiuta gli utenti alla prima esecuzione di sudo" -#: plugins/sudoers/def_data.c:75 +#: plugins/sudoers/def_data.c:79 #, c-format msgid "File containing the sudo lecture: %s" msgstr "File contenente la lezione su sudo: %s" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:83 msgid "Require users to authenticate by default" msgstr "Richiede in modo predefinito l'autenticazione degli utenti" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:87 msgid "Root may run sudo" msgstr "Root può eseguire sudo" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:91 msgid "Log the hostname in the (non-syslog) log file" msgstr "Registra il nome host nel file di registro (non-syslog)" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:95 msgid "Log the year in the (non-syslog) log file" msgstr "Registra l'anno nel file di registro (non-syslog)" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:99 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Se sudo viene lanciato senza alcun argomento, avvia una shell" -#: plugins/sudoers/def_data.c:99 +#: plugins/sudoers/def_data.c:103 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Imposta $HOME all'utente definito quando viene avviata una shell con -s" -#: plugins/sudoers/def_data.c:103 +#: plugins/sudoers/def_data.c:107 msgid "Always set $HOME to the target user's home directory" msgstr "Imposta sempre $HOME alla directory home dell'utente definito" -#: plugins/sudoers/def_data.c:107 +#: plugins/sudoers/def_data.c:111 msgid "Allow some information gathering to give useful error messages" msgstr "Consente la raccolta di alcune informazioni per dare messaggi di errore utili" -#: plugins/sudoers/def_data.c:111 +#: plugins/sudoers/def_data.c:115 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Richiede nomi host completi nel file sudoers" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:119 msgid "Insult the user when they enter an incorrect password" msgstr "Apostrofa l'utente quando inserisce una password errata" -#: plugins/sudoers/def_data.c:119 +#: plugins/sudoers/def_data.c:123 msgid "Only allow the user to run sudo if they have a tty" msgstr "Consente all'utente di seguire sudo solo se dispone di un tty" -#: plugins/sudoers/def_data.c:123 +#: plugins/sudoers/def_data.c:127 msgid "Visudo will honor the EDITOR environment variable" msgstr "visudo utilizzerà il valore definito nella variabile EDITOR" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:131 msgid "Prompt for root's password, not the users's" msgstr "Chiede la password di root, non quella dell'utente" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:135 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Chiede la password dell'utente runas_default, non quella dell'utente" -#: plugins/sudoers/def_data.c:135 +#: plugins/sudoers/def_data.c:139 msgid "Prompt for the target user's password, not the users's" msgstr "Chiede la password dell'utente definito, non quella dell'invocante" -#: plugins/sudoers/def_data.c:139 +#: plugins/sudoers/def_data.c:143 msgid "Apply defaults in the target user's login class if there is one" msgstr "Applica i Defaults nella classe di login dell'utente definito, se presente" -#: plugins/sudoers/def_data.c:143 +#: plugins/sudoers/def_data.c:147 msgid "Set the LOGNAME and USER environment variables" msgstr "Imposta le variabili d'ambiente LOGNAME e USER" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:151 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Imposta lo uid effettivo all'utente definito, non lo uid reale" -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:155 msgid "Don't initialize the group vector to that of the target user" msgstr "Non inizializza il vettore di gruppo con quello dell'utente definito" -#: plugins/sudoers/def_data.c:155 +#: plugins/sudoers/def_data.c:159 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Lunghezza a cui andare a capo nei file di registro (0 per non andare a capo): %u" -#: plugins/sudoers/def_data.c:159 +#: plugins/sudoers/def_data.c:163 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Timeout marcatura temporale di autenticazione: %.1f minuti" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:167 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Timeout per inserimento password: %.1f minuti" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:171 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Numero di tentativi per l'inserimento della password: %u" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:175 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "umask da utilizzare o 0777 per utilizzare quella dell'utente: 0%o" -#: plugins/sudoers/def_data.c:175 +#: plugins/sudoers/def_data.c:179 #, c-format msgid "Path to log file: %s" msgstr "Percorso al file di registro: %s" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:183 #, c-format msgid "Path to mail program: %s" msgstr "Percorso al programma email: %s" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:187 #, c-format msgid "Flags for mail program: %s" msgstr "Flag per il programma email: %s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:191 #, c-format msgid "Address to send mail to: %s" msgstr "Indirizzo a cui mandare l'email: %s" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:195 #, c-format msgid "Address to send mail from: %s" msgstr "Indirizzo da cui mandare l'email: %s" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:199 #, c-format msgid "Subject line for mail messages: %s" msgstr "Oggetto dell'email: %s" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:203 #, c-format msgid "Incorrect password message: %s" msgstr "Messaggio password errata: %s" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:207 #, c-format msgid "Path to lecture status dir: %s" msgstr "Percorso directory di stato della lezione: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:211 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Percorso directory con la marcatura temporale di autenticazione: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:215 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Proprietario directory con la marcatura temporale di autenticazione: %s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:219 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Agli utenti di questo gruppo non sono richiesti password e PATH: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:223 #, c-format msgid "Default password prompt: %s" msgstr "Prompt predefinito per la password: %s" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:227 msgid "If set, passprompt will override system prompt in all cases." msgstr "Se impostato, passprompt scavalcherà sempre il prompt di sistema." -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:231 #, c-format msgid "Default user to run commands as: %s" msgstr "Utente predefinito con cui eseguire i comandi: %s" -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:235 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Valore con cui sovrascrivere la variabile $PATH dell'utente: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:239 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Percorso all'editor per visudo: %s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:243 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Quando richiedere una password per il pseudo-comando \"list\": %s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:247 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Quando richiedere una password per il pseudo-comando \"verify\": %s" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:251 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Pre-carica le funzioni exec dummy contenute nella libreria sudo_noexec" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:255 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Se LDAP è funzionante, viene ignorato il file sudoers locale" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:259 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "I descrittori di file >= %d verranno chiusi prima dell'esecuzione di un comando" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:263 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:263 +#: plugins/sudoers/def_data.c:267 msgid "Allow users to set arbitrary environment variables" msgstr "Consente agli utenti di impostare variabili d'ambiente" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:271 msgid "Reset the environment to a default set of variables" msgstr "Reimposta l'ambiente con le variabili predefinite" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to check for sanity:" msgstr "Variabile d'ambienti da validare:" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to remove:" msgstr "Variabili d'ambiente da rimuovere:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:283 msgid "Environment variables to preserve:" msgstr "Variabili d'ambiente da preservare:" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:287 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "Ruolo SELinux da usare nel nuovo contesto di sicurezza: %s" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:291 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "Tipologia di SELinux da usare nel nuovo contesto di sicurezza: %s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:295 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Percorso al file d'ambiente specifico di sudo: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:299 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Localizzazione da usare durante l'analisi del file sudoers: %s" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:303 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Abilita sudo a chiedere una password anche se sarebbe visibile" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:307 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Fornisce riscontro visibile al prompt della password nel caso di input utente" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:311 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Usa glob più veloce e meno preciso, ma non accede al file system" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:315 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "La umask definita in sudoers scavalca quella dell'utente, anche se è più permissiva" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:319 msgid "Log user's input for the command being run" msgstr "Registra l'input dell'utente per il comando in esecuzione" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:323 msgid "Log the output of the command being run" msgstr "Registra l'output del comando in esecuzione" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:327 msgid "Compress I/O logs using zlib" msgstr "Comprime i registri utilizzando zlib" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:331 msgid "Always run commands in a pseudo-tty" msgstr "Esegue sempre i comandi in uno pseudo-tty" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:335 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Plugin per supporto ai gruppi non-Unix: %s" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:339 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Directory in cui salvare i registri di I/O: %s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:343 #, c-format msgid "File in which to store the input/output log: %s" msgstr "File in cui salvare il registro I/O: %s" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:347 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Aggiunge una voce al file utmp/utmpx quando viene allocato un pty" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:351 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Imposta l'utente in utmp all'utente runas, non l'utente invocante" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:355 msgid "Set of permitted privileges" msgstr "Privilegi concessi" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:359 msgid "Set of limit privileges" msgstr "Privilegi non concessi" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:363 msgid "Run commands on a pty in the background" msgstr "Esegue i comandi in un pty in background" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:367 msgid "PAM service name to use" msgstr "Nome del servizio PAM da usare" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:371 msgid "PAM service name to use for login shells" msgstr "Nome del servizio PAM da usare per le shell di login" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:375 msgid "Attempt to establish PAM credentials for the target user" msgstr "Tentativo di stabilire le credenziali PAM per l'utente finale" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:379 msgid "Create a new PAM session for the command to run in" msgstr "Crea una nuova sessione PAM in cui eseguire il comando" -#: plugins/sudoers/def_data.c:379 +#: plugins/sudoers/def_data.c:383 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Numero massimo di sequenze I/O di registro: %u" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:387 msgid "Enable sudoers netgroup support" msgstr "Abilita support netgroup in sudoers" -#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:601 -#: plugins/sudoers/visudo_json.c:642 plugins/sudoers/visudo_json.c:677 +#: plugins/sudoers/def_data.c:391 +msgid "Check parent directories for writability when editing files with sudoedit" +msgstr "Controlla le directory superiori per accesso in scrittura durante le modifiche con sudoedit" + +#: plugins/sudoers/def_data.c:395 +msgid "Follow symbolic links when editing files with sudoedit" +msgstr "Segue i collegamenti simbolici durante le modifiche con sudoedit" + +#: plugins/sudoers/def_data.c:399 +msgid "Query the group plugin for unknown system groups" +msgstr "Interroga il plugin dei gruppi per gruppi di sistema sconosciuti" + +#: plugins/sudoers/def_data.c:403 +msgid "Match netgroups based on the entire tuple: user, host and domain" +msgstr "Corrispondenza gruppi di rete con tutti i valori: utente, host e dominio" + +#: plugins/sudoers/defaults.c:199 plugins/sudoers/defaults.c:610 +#: plugins/sudoers/visudo_json.c:633 plugins/sudoers/visudo_json.c:668 #, c-format msgid "unknown defaults entry `%s'" msgstr "voce Defaults \"%s\" sconosciuta" -#: plugins/sudoers/defaults.c:218 plugins/sudoers/defaults.c:228 -#: plugins/sudoers/defaults.c:248 plugins/sudoers/defaults.c:261 -#: plugins/sudoers/defaults.c:274 plugins/sudoers/defaults.c:287 -#: plugins/sudoers/defaults.c:300 plugins/sudoers/defaults.c:320 -#: plugins/sudoers/defaults.c:330 +#: plugins/sudoers/defaults.c:207 plugins/sudoers/defaults.c:217 +#: plugins/sudoers/defaults.c:241 plugins/sudoers/defaults.c:256 +#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 +#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 +#: plugins/sudoers/defaults.c:325 #, c-format msgid "value `%s' is invalid for option `%s'" msgstr "il valore \"%s\" non è valido per l'opzione \"%s\"" -#: plugins/sudoers/defaults.c:221 plugins/sudoers/defaults.c:231 -#: plugins/sudoers/defaults.c:239 plugins/sudoers/defaults.c:256 -#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 -#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 -#: plugins/sudoers/defaults.c:326 +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:220 +#: plugins/sudoers/defaults.c:228 plugins/sudoers/defaults.c:251 +#: plugins/sudoers/defaults.c:264 plugins/sudoers/defaults.c:277 +#: plugins/sudoers/defaults.c:290 plugins/sudoers/defaults.c:310 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "no value specified for `%s'" msgstr "nessun valore specificato per \"%s\"" -#: plugins/sudoers/defaults.c:244 +#: plugins/sudoers/defaults.c:233 #, c-format msgid "values for `%s' must start with a '/'" msgstr "i valori per \"%s\" devono iniziare con un carattere \"/\"" -#: plugins/sudoers/defaults.c:306 +#: plugins/sudoers/defaults.c:301 #, c-format msgid "option `%s' does not take a value" msgstr "l'opzione \"%s\" non accetta un valore" -#: plugins/sudoers/env.c:276 plugins/sudoers/env.c:283 -#: plugins/sudoers/env.c:386 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:918 plugins/sudoers/policy.c:461 -#: plugins/sudoers/policy.c:470 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:708 plugins/sudoers/testsudoers.c:242 -#: plugins/sudoers/toke_util.c:174 +#: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 +#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:450 +#: plugins/sudoers/ldap.c:540 plugins/sudoers/ldap.c:1166 +#: plugins/sudoers/ldap.c:1388 plugins/sudoers/ldap.c:1704 +#: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:929 +#: plugins/sudoers/policy.c:511 plugins/sudoers/policy.c:520 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:815 +#: plugins/sudoers/testsudoers.c:236 plugins/sudoers/toke_util.c:162 #, c-format msgid "internal error, %s overflow" msgstr "errore interno, overflow di %s" -#: plugins/sudoers/env.c:359 +#: plugins/sudoers/env.c:377 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: envp danneggiato, discordanza nella lunghezza" -#: plugins/sudoers/env.c:1054 +#: plugins/sudoers/env.c:1083 +msgid "unable to rebuild the environment" +msgstr "impossibile ricostruire l’ambiente" + +#: plugins/sudoers/env.c:1157 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "permessi non sufficienti per impostare le seguenti variabili d'ambiente: %s" -#: plugins/sudoers/group_plugin.c:94 +#: plugins/sudoers/group_plugin.c:86 #, c-format msgid "%s must be owned by uid %d" msgstr "%s deve essere di proprietà dello uid %d" -#: plugins/sudoers/group_plugin.c:98 +#: plugins/sudoers/group_plugin.c:90 #, c-format msgid "%s must only be writable by owner" msgstr "%s deve essere scrivibile solo dal proprietario" -#: plugins/sudoers/group_plugin.c:105 plugins/sudoers/sssd.c:251 +#: plugins/sudoers/group_plugin.c:98 plugins/sudoers/sssd.c:331 #, c-format msgid "unable to load %s: %s" msgstr "impossibile caricare %s: %s" -#: plugins/sudoers/group_plugin.c:110 +#: plugins/sudoers/group_plugin.c:104 #, c-format msgid "unable to find symbol \"group_plugin\" in %s" msgstr "impossibile trovare il simbolo \"group_plugin\" in %s" -#: plugins/sudoers/group_plugin.c:115 +#: plugins/sudoers/group_plugin.c:109 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" -msgstr "%s: major version %d del plugin per il gruppo non compatibile, atteso %d" +msgstr "%s: version major %d del plugin per il gruppo non compatibile, atteso %d" -#: plugins/sudoers/interfaces.c:116 +#: plugins/sudoers/interfaces.c:117 msgid "Local IP address and netmask pairs:\n" msgstr "Coppia indirizzo IP locale e maschera di rete:\n" -#: plugins/sudoers/iolog.c:101 plugins/sudoers/iolog.c:119 -#: plugins/sudoers/timestamp.c:233 +#: plugins/sudoers/iolog.c:92 plugins/sudoers/iolog.c:110 +#: plugins/sudoers/timestamp.c:169 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s esiste, ma non è una directory (0%o)" -#: plugins/sudoers/iolog.c:112 plugins/sudoers/iolog.c:133 -#: plugins/sudoers/iolog.c:140 plugins/sudoers/timestamp.c:227 -#: plugins/sudoers/timestamp.c:248 +#: plugins/sudoers/iolog.c:103 plugins/sudoers/iolog.c:124 +#: plugins/sudoers/iolog.c:131 plugins/sudoers/timestamp.c:163 +#: plugins/sudoers/timestamp.c:184 #, c-format msgid "unable to mkdir %s" msgstr "impossibile creare la directory %s" -#: plugins/sudoers/iolog.c:209 plugins/sudoers/sudoers.c:764 -#: plugins/sudoers/sudoreplay.c:348 plugins/sudoers/sudoreplay.c:819 -#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/timestamp.c:357 -#: plugins/sudoers/visudo.c:832 plugins/sudoers/visudo_json.c:1025 -#: plugins/sudoers/visudo_json.c:1038 +#: plugins/sudoers/iolog.c:200 plugins/sudoers/sudoers.c:871 +#: plugins/sudoers/sudoreplay.c:300 plugins/sudoers/sudoreplay.c:769 +#: plugins/sudoers/sudoreplay.c:973 plugins/sudoers/timestamp.c:399 +#: plugins/sudoers/visudo.c:904 plugins/sudoers/visudo_json.c:1012 +#: plugins/sudoers/visudo_json.c:1025 #, c-format msgid "unable to open %s" msgstr "impossibile aprire %s" -#: plugins/sudoers/iolog.c:250 plugins/sudoers/sudoers.c:768 -#: plugins/sudoers/sudoreplay.c:1123 +#: plugins/sudoers/iolog.c:241 plugins/sudoers/sudoers.c:875 +#: plugins/sudoers/sudoreplay.c:1084 #, c-format msgid "unable to read %s" msgstr "impossibile leggere %s" -#: plugins/sudoers/iolog.c:282 plugins/sudoers/sudoreplay.c:588 -#: plugins/sudoers/timestamp.c:186 plugins/sudoers/timestamp.c:189 +#: plugins/sudoers/iolog.c:277 plugins/sudoers/sudoreplay.c:550 +#: plugins/sudoers/timestamp.c:298 plugins/sudoers/timestamp.c:301 #, c-format msgid "unable to write to %s" msgstr "impossibile scrivere su %s" -#: plugins/sudoers/iolog.c:347 plugins/sudoers/iolog.c:545 +#: plugins/sudoers/iolog.c:342 plugins/sudoers/iolog.c:540 #, c-format msgid "unable to create %s" msgstr "impossibile creare %s" -#: plugins/sudoers/ldap.c:406 +#: plugins/sudoers/iolog.c:723 +#, c-format +msgid "%s: internal error, file index %d not open" +msgstr "%s: errore interno, file indice %d non aperto" + +#: plugins/sudoers/ldap.c:428 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: porta troppo grande" -#: plugins/sudoers/ldap.c:431 -msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" -msgstr "sudo_ldap_conf_add_ports: spazio esaurito nell'espansione di hostbuf" - -#: plugins/sudoers/ldap.c:464 +#: plugins/sudoers/ldap.c:488 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "tipologia di uri LDAP non supportata: %s" -#: plugins/sudoers/ldap.c:495 +#: plugins/sudoers/ldap.c:515 msgid "unable to mix ldap and ldaps URIs" msgstr "impossibile utilizzare URI ldap e ldaps assieme" -#: plugins/sudoers/ldap.c:499 plugins/sudoers/ldap.c:532 +#: plugins/sudoers/ldap.c:519 plugins/sudoers/ldap.c:555 msgid "starttls not supported when using ldaps" msgstr "starttls non supportato quando viene utilizzato ldaps" -#: plugins/sudoers/ldap.c:517 -msgid "sudo_ldap_parse_uri: out of space building hostbuf" -msgstr "sudo_ldap_parse_uri: spazio esaurito nella generazione di hostbuf" - -#: plugins/sudoers/ldap.c:599 +#: plugins/sudoers/ldap.c:626 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "impossibile inizializzare il certificato SSL e il database delle chiavi: %s" -#: plugins/sudoers/ldap.c:602 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "è necessario impostare TLS_CERT in %s per usare SSL" -#: plugins/sudoers/ldap.c:1093 +#: plugins/sudoers/ldap.c:1152 msgid "unable to get GMT time" msgstr "impossibile ottenere l'ora GMT" -#: plugins/sudoers/ldap.c:1099 +#: plugins/sudoers/ldap.c:1158 msgid "unable to format timestamp" msgstr "impossibile formattare la marcatura temporale" -#: plugins/sudoers/ldap.c:1107 -msgid "unable to build time filter" -msgstr "impossibile creare il filtro temporale" - -#: plugins/sudoers/ldap.c:1326 -msgid "sudo_ldap_build_pass1 allocation mismatch" -msgstr "discordanza nell'allocazione sudo_ldap_build_pass1" - -#: plugins/sudoers/ldap.c:1469 +#: plugins/sudoers/ldap.c:1853 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:1963 +#: plugins/sudoers/ldap.c:2394 #, c-format msgid "" "\n" @@ -852,7 +993,7 @@ "\n" "Ruolo LDAP: %s\n" -#: plugins/sudoers/ldap.c:1965 +#: plugins/sudoers/ldap.c:2396 #, c-format msgid "" "\n" @@ -861,108 +1002,108 @@ "\n" "Ruolo LDAP: sconosciuto\n" -#: plugins/sudoers/ldap.c:2012 +#: plugins/sudoers/ldap.c:2443 #, c-format msgid " Order: %s\n" msgstr " Ordine: %s\n" -#: plugins/sudoers/ldap.c:2020 plugins/sudoers/parse.c:512 -#: plugins/sudoers/sssd.c:1297 +#: plugins/sudoers/ldap.c:2451 plugins/sudoers/parse.c:555 +#: plugins/sudoers/sssd.c:1429 #, c-format msgid " Commands:\n" msgstr " Comandi:\n" -#: plugins/sudoers/ldap.c:2570 +#: plugins/sudoers/ldap.c:3015 #, c-format msgid "unable to initialize LDAP: %s" msgstr "impossibile inizializzare LDAP: %s" -#: plugins/sudoers/ldap.c:2612 +#: plugins/sudoers/ldap.c:3051 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "specificato start_tls ma le librerie LDAP non supportano ldap_start_tls_s() o ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:2845 +#: plugins/sudoers/ldap.c:3305 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "attributo sudoOrder non valido: %s" -#: plugins/sudoers/linux_audit.c:57 +#: plugins/sudoers/linux_audit.c:52 msgid "unable to open audit system" msgstr "impossibile aprire il sistema di audit" -#: plugins/sudoers/linux_audit.c:94 +#: plugins/sudoers/linux_audit.c:93 msgid "unable to send audit message" msgstr "impossibile inviare il messaggio di audit" -#: plugins/sudoers/logging.c:134 +#: plugins/sudoers/logging.c:106 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: plugins/sudoers/logging.c:162 +#: plugins/sudoers/logging.c:134 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s : (comando continuato) %s" -#: plugins/sudoers/logging.c:187 +#: plugins/sudoers/logging.c:159 #, c-format msgid "unable to open log file: %s: %s" msgstr "impossibile aprire il file di registro: %s: %s" -#: plugins/sudoers/logging.c:190 +#: plugins/sudoers/logging.c:162 #, c-format msgid "unable to lock log file: %s: %s" msgstr "impossibile impostare il blocco sul file di registro: %s: %s" -#: plugins/sudoers/logging.c:242 +#: plugins/sudoers/logging.c:211 msgid "No user or host" msgstr "Nessun utente o host" -#: plugins/sudoers/logging.c:244 +#: plugins/sudoers/logging.c:213 msgid "validation failure" msgstr "validazione non riuscita" -#: plugins/sudoers/logging.c:251 +#: plugins/sudoers/logging.c:220 msgid "user NOT in sudoers" msgstr "utente non tra i sudoers" -#: plugins/sudoers/logging.c:253 +#: plugins/sudoers/logging.c:222 msgid "user NOT authorized on host" msgstr "utente non autorizzato sull'host" -#: plugins/sudoers/logging.c:255 +#: plugins/sudoers/logging.c:224 msgid "command not allowed" msgstr "comando non consentito" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:259 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "%s non è nel file sudoers. Questo evento verrà segnalato.\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:262 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "A %s non è consentito eseguire sudo su %s. Questo evento verrà segnalato.\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:266 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "L'utente %s non può eseguire sudo su %s.\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:269 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "All'utente %s non è consentito eseguire \"%s%s%s\" come %s%s%s su %s.\n" -#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:407 -#: plugins/sudoers/sudoers.c:409 plugins/sudoers/sudoers.c:411 -#: plugins/sudoers/sudoers.c:413 plugins/sudoers/sudoers.c:1128 -#: plugins/sudoers/sudoers.c:1129 +#: plugins/sudoers/logging.c:306 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1222 +#: plugins/sudoers/sudoers.c:1224 #, c-format msgid "%s: command not found" msgstr "%s: comando non trovato" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:403 +#: plugins/sudoers/logging.c:308 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring `%s' found in '.'\n" @@ -971,71 +1112,71 @@ "viene ignorato \"%s\" trovato in \".\"\n" "Usare \"sudo ./%s\" se si voleva eseguire \"%s\"." -#: plugins/sudoers/logging.c:353 +#: plugins/sudoers/logging.c:325 msgid "authentication failure" msgstr "autenticazione non riuscita" -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:351 msgid "a password is required" msgstr "è necessaria una password" -#: plugins/sudoers/logging.c:446 plugins/sudoers/logging.c:501 +#: plugins/sudoers/logging.c:422 plugins/sudoers/logging.c:484 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "%u tentativo di immissione password non corretto" msgstr[1] "%u tentativi di immissione password non corretti" -#: plugins/sudoers/logging.c:584 +#: plugins/sudoers/logging.c:572 msgid "unable to fork" msgstr "impossibile eseguire fork" -#: plugins/sudoers/logging.c:592 plugins/sudoers/logging.c:648 +#: plugins/sudoers/logging.c:580 plugins/sudoers/logging.c:640 #, c-format msgid "unable to fork: %m" msgstr "impossibile eseguire fork: %m" -#: plugins/sudoers/logging.c:638 +#: plugins/sudoers/logging.c:630 #, c-format msgid "unable to open pipe: %m" msgstr "impossibile aprire una pipe: %m" -#: plugins/sudoers/logging.c:663 +#: plugins/sudoers/logging.c:655 #, c-format msgid "unable to dup stdin: %m" msgstr "impossibile eseguire dup sullo stdin: %m" -#: plugins/sudoers/logging.c:698 +#: plugins/sudoers/logging.c:693 #, c-format msgid "unable to execute %s: %m" msgstr "impossibile eseguire %s: %m" -#: plugins/sudoers/match.c:627 +#: plugins/sudoers/match.c:616 #, c-format msgid "unsupported digest type %d for %s" msgstr "tipo di digest %d non supportato per %s" -#: plugins/sudoers/match.c:656 +#: plugins/sudoers/match.c:657 #, c-format msgid "%s: read error" msgstr "%s: errore di lettura" -#: plugins/sudoers/match.c:670 +#: plugins/sudoers/match.c:692 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "il digest per %s (%s) non è nella forma %s" -#: plugins/sudoers/parse.c:123 +#: plugins/sudoers/parse.c:114 #, c-format msgid "parse error in %s near line %d" msgstr "errore di analisi in %s vicino alla riga %d" -#: plugins/sudoers/parse.c:126 +#: plugins/sudoers/parse.c:117 #, c-format msgid "parse error in %s" msgstr "errore di analisi in %s" -#: plugins/sudoers/parse.c:459 +#: plugins/sudoers/parse.c:502 #, c-format msgid "" "\n" @@ -1044,49 +1185,41 @@ "\n" "Voce sudoers:\n" -#: plugins/sudoers/parse.c:460 +#: plugins/sudoers/parse.c:503 #, c-format msgid " RunAsUsers: " msgstr " RunAsUsers: " -#: plugins/sudoers/parse.c:474 +#: plugins/sudoers/parse.c:517 #, c-format msgid " RunAsGroups: " msgstr " RunAsGroups: " -#: plugins/sudoers/parse.c:483 +#: plugins/sudoers/parse.c:526 #, c-format msgid " Options: " msgstr " Opzioni: " -#: plugins/sudoers/policy.c:109 plugins/sudoers/policy.c:118 -#: plugins/sudoers/policy.c:127 plugins/sudoers/policy.c:151 -#: plugins/sudoers/policy.c:263 plugins/sudoers/policy.c:283 -#: plugins/sudoers/policy.c:292 plugins/sudoers/policy.c:322 -#: plugins/sudoers/policy.c:332 plugins/sudoers/policy.c:341 -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" +#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:253 +msgid "unable to parse network address list" +msgstr "impossibile analizzare l'elenco degli indirizzi di rete" -#: plugins/sudoers/policy.c:569 plugins/sudoers/visudo.c:773 +#: plugins/sudoers/policy.c:659 plugins/sudoers/visudo.c:841 #, c-format msgid "unable to execute %s" msgstr "impossibile eseguire %s" -#: plugins/sudoers/policy.c:701 +#: plugins/sudoers/policy.c:792 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Versione %s del plugin della politica sudoers\n" -#: plugins/sudoers/policy.c:703 +#: plugins/sudoers/policy.c:794 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Versione %d della grammatica del file sudoers\n" -#: plugins/sudoers/policy.c:707 +#: plugins/sudoers/policy.c:798 #, c-format msgid "" "\n" @@ -1095,374 +1228,411 @@ "\n" "Percorso sudoers: %s\n" -#: plugins/sudoers/policy.c:710 +#: plugins/sudoers/policy.c:801 #, c-format msgid "nsswitch path: %s\n" msgstr "percorso nsswitch: %s\n" -#: plugins/sudoers/policy.c:712 +#: plugins/sudoers/policy.c:803 #, c-format msgid "ldap.conf path: %s\n" msgstr "percorso ldap.conf: %s\n" -#: plugins/sudoers/policy.c:713 +#: plugins/sudoers/policy.c:804 #, c-format msgid "ldap.secret path: %s\n" msgstr "percorso ldap.secret: %s\n" -#: plugins/sudoers/pwutil.c:149 +#: plugins/sudoers/policy.c:837 +#, c-format +msgid "unable to register hook of type %d (version %d.%d)" +msgstr "impossibile registrare un hook di tipo %d (versione %d.%d)" + +#: plugins/sudoers/pwutil.c:158 plugins/sudoers/pwutil.c:176 +#, c-format +msgid "unable to cache uid %u, out of memory" +msgstr "impossibile memorizzare in cache lo uid %u, memoria esaurita" + +#: plugins/sudoers/pwutil.c:170 #, c-format msgid "unable to cache uid %u, already exists" msgstr "impossibile memorizzare in cache lo uid %u, esiste già" -#: plugins/sudoers/pwutil.c:194 +#: plugins/sudoers/pwutil.c:222 plugins/sudoers/pwutil.c:239 +#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:334 +#, c-format +msgid "unable to cache user %s, out of memory" +msgstr "impossibile memorizzare in cache l'utente %s, memoria esaurita" + +#: plugins/sudoers/pwutil.c:234 #, c-format msgid "unable to cache user %s, already exists" msgstr "impossibile memorizzare in cache l'utente %s, esiste già" -#: plugins/sudoers/pwutil.c:400 +#: plugins/sudoers/pwutil.c:474 plugins/sudoers/pwutil.c:492 +#, c-format +msgid "unable to cache gid %u, out of memory" +msgstr "impossibile memorizzare in cache il gid %u, memoria esaurita" + +#: plugins/sudoers/pwutil.c:486 #, c-format msgid "unable to cache gid %u, already exists" msgstr "impossibile memorizzare in cache il gid %u, esiste già" -#: plugins/sudoers/pwutil.c:439 +#: plugins/sudoers/pwutil.c:532 plugins/sudoers/pwutil.c:549 +#: plugins/sudoers/pwutil.c:584 plugins/sudoers/pwutil.c:626 +#, c-format +msgid "unable to cache group %s, out of memory" +msgstr "impossibile memorizzare in cache il gruppo %s, memoria esaurita" + +#: plugins/sudoers/pwutil.c:544 #, c-format msgid "unable to cache group %s, already exists" msgstr "impossibile memorizzare in cache il gruppo %s, esiste già" -#: plugins/sudoers/pwutil.c:605 plugins/sudoers/pwutil.c:631 +#: plugins/sudoers/pwutil.c:739 plugins/sudoers/pwutil.c:783 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "impossibile memorizzare in cache l'elenco di gruppo %s, esiste già" -#: plugins/sudoers/pwutil.c:627 +#: plugins/sudoers/pwutil.c:745 plugins/sudoers/pwutil.c:788 +#, c-format +msgid "unable to cache group list for %s, out of memory" +msgstr "impossibile memorizzare in cache l'elenco di gruppo %s, memoria esaurita" + +#: plugins/sudoers/pwutil.c:777 #, c-format msgid "unable to parse groups for %s" msgstr "impossibile analizzare i gruppi per %s" -#: plugins/sudoers/set_perms.c:122 plugins/sudoers/set_perms.c:447 -#: plugins/sudoers/set_perms.c:850 plugins/sudoers/set_perms.c:1147 -#: plugins/sudoers/set_perms.c:1439 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 +#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 +#: plugins/sudoers/set_perms.c:1430 msgid "perm stack overflow" msgstr "overflow dello stack perm" -#: plugins/sudoers/set_perms.c:130 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:1076 -#: plugins/sudoers/set_perms.c:1155 plugins/sudoers/set_perms.c:1372 -#: plugins/sudoers/set_perms.c:1447 plugins/sudoers/set_perms.c:1536 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 +#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 +#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 +#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 +#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 msgid "perm stack underflow" msgstr "underflow dello stack perm" -#: plugins/sudoers/set_perms.c:189 plugins/sudoers/set_perms.c:502 -#: plugins/sudoers/set_perms.c:1206 plugins/sudoers/set_perms.c:1479 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:493 +#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 msgid "unable to change to root gid" msgstr "impossibile passare al gid root" -#: plugins/sudoers/set_perms.c:278 plugins/sudoers/set_perms.c:599 -#: plugins/sudoers/set_perms.c:987 plugins/sudoers/set_perms.c:1283 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:590 +#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 msgid "unable to change to runas gid" msgstr "impossibile passare al gid runas" -#: plugins/sudoers/set_perms.c:283 plugins/sudoers/set_perms.c:604 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:595 +#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 msgid "unable to set runas group vector" msgstr "impossibile impostare il vettore di gruppo per runas" -#: plugins/sudoers/set_perms.c:294 plugins/sudoers/set_perms.c:615 -#: plugins/sudoers/set_perms.c:1001 plugins/sudoers/set_perms.c:1297 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:606 +#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 msgid "unable to change to runas uid" msgstr "impossibile passare allo uid runas" -#: plugins/sudoers/set_perms.c:312 plugins/sudoers/set_perms.c:633 -#: plugins/sudoers/set_perms.c:1017 plugins/sudoers/set_perms.c:1313 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:624 +#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 msgid "unable to change to sudoers gid" msgstr "impossibile passare al gid sudoers" -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 msgid "too many processes" msgstr "troppi processi" -#: plugins/sudoers/solaris_audit.c:47 +#: plugins/sudoers/solaris_audit.c:51 msgid "unable to get current working directory" msgstr "impossibile ottenere la directory di lavoro corrente" -#: plugins/sudoers/solaris_audit.c:55 +#: plugins/sudoers/solaris_audit.c:59 #, c-format msgid "truncated audit path user_cmnd: %s" msgstr "percorso audit user_cmnd troncato: %s" -#: plugins/sudoers/solaris_audit.c:62 +#: plugins/sudoers/solaris_audit.c:66 #, c-format msgid "truncated audit path argv[0]: %s" msgstr "percorso audit argv[0] troncato: %s" -#: plugins/sudoers/solaris_audit.c:111 +#: plugins/sudoers/solaris_audit.c:115 msgid "audit_failure message too long" msgstr "messaggio audit_failure troppo lungo" -#: plugins/sudoers/sssd.c:252 +#: plugins/sudoers/sssd.c:333 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "impossibile inizializzare la sorgente SSS. È stato installato SSSD?" -#: plugins/sudoers/sssd.c:259 plugins/sudoers/sssd.c:267 -#: plugins/sudoers/sssd.c:275 plugins/sudoers/sssd.c:283 -#: plugins/sudoers/sssd.c:291 +#: plugins/sudoers/sssd.c:341 plugins/sudoers/sssd.c:350 +#: plugins/sudoers/sssd.c:359 plugins/sudoers/sssd.c:368 +#: plugins/sudoers/sssd.c:377 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "impossibile trovare il simbolo \"%s\" in \"%s\"" -#: plugins/sudoers/sudo_nss.c:296 +#: plugins/sudoers/sudo_nss.c:290 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Corrispondenza voci Defaults per %s su %s:\n" -#: plugins/sudoers/sudo_nss.c:309 +#: plugins/sudoers/sudo_nss.c:308 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Valori predefiniti per Runas e Command per %s:\n" -#: plugins/sudoers/sudo_nss.c:322 +#: plugins/sudoers/sudo_nss.c:326 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "L'utente %s può eseguire i seguenti comandi su %s:\n" -#: plugins/sudoers/sudo_nss.c:331 +#: plugins/sudoers/sudo_nss.c:339 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "L'utente %s non è abilitato all'esecuzione di sudo su %s.\n" -#: plugins/sudoers/sudoers.c:160 plugins/sudoers/sudoers.c:201 -#: plugins/sudoers/sudoers.c:726 +#: plugins/sudoers/sudoers.c:172 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/visudo.c:223 plugins/sudoers/visudo.c:567 +msgid "unable to initialize sudoers default values" +msgstr "impossibile inizializzare i valori predefiniti di sudoers" + +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:239 +#: plugins/sudoers/sudoers.c:833 msgid "problem with defaults entries" msgstr "problema con le voci Defaults" -#: plugins/sudoers/sudoers.c:167 +#: plugins/sudoers/sudoers.c:205 msgid "no valid sudoers sources found, quitting" msgstr "nessuna sorgente valida di sudoers trovata, uscita" -#: plugins/sudoers/sudoers.c:233 +#: plugins/sudoers/sudoers.c:275 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers indica che a root non è consentito usare sudo" -#: plugins/sudoers/sudoers.c:278 +#: plugins/sudoers/sudoers.c:332 msgid "you are not permitted to use the -C option" msgstr "utente non abilitato all'uso dell'opzione -C" -#: plugins/sudoers/sudoers.c:336 +#: plugins/sudoers/sudoers.c:396 #, c-format msgid "timestamp owner (%s): No such user" msgstr "proprietario marcatura temporale (%s): utente inesistente" -#: plugins/sudoers/sudoers.c:350 +#: plugins/sudoers/sudoers.c:410 msgid "no tty" msgstr "nessun tty" -#: plugins/sudoers/sudoers.c:351 +#: plugins/sudoers/sudoers.c:411 msgid "sorry, you must have a tty to run sudo" msgstr "è necessario disporre di un tty per eseguire sudo" -#: plugins/sudoers/sudoers.c:402 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "comando nella directory corrente" -#: plugins/sudoers/sudoers.c:422 +#: plugins/sudoers/sudoers.c:486 msgid "sorry, you are not allowed to preserve the environment" msgstr "non è consentito preservare l'ambiente" -#: plugins/sudoers/sudoers.c:674 +#: plugins/sudoers/sudoers.c:778 msgid "command too long" msgstr "comando troppo lungo" -#: plugins/sudoers/sudoers.c:779 plugins/sudoers/visudo.c:333 -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/sudoers.c:886 plugins/sudoers/visudo.c:427 +#: plugins/sudoers/visudo.c:667 #, c-format msgid "unable to stat %s" msgstr "impossibile eseguire stat su %s" -#: plugins/sudoers/sudoers.c:783 +#: plugins/sudoers/sudoers.c:890 #, c-format msgid "%s is not a regular file" msgstr "%s non è un file regolare" -#: plugins/sudoers/sudoers.c:787 plugins/sudoers/timestamp.c:289 toke.l:945 +#: plugins/sudoers/sudoers.c:894 plugins/sudoers/timestamp.c:225 toke.l:947 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s è di proprietà dello uid %u, dovrebbe essere %u" -#: plugins/sudoers/sudoers.c:791 toke.l:952 +#: plugins/sudoers/sudoers.c:898 toke.l:954 #, c-format msgid "%s is world writable" msgstr "%s è scrivibile da tutti" -#: plugins/sudoers/sudoers.c:795 toke.l:957 +#: plugins/sudoers/sudoers.c:902 toke.l:959 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s è di proprietà del gid %u, dovrebbe essere %u" -#: plugins/sudoers/sudoers.c:826 +#: plugins/sudoers/sudoers.c:933 #, c-format msgid "only root can use `-c %s'" msgstr "solo root può usare \"-c %s\"" -#: plugins/sudoers/sudoers.c:845 +#: plugins/sudoers/sudoers.c:952 #, c-format msgid "unknown login class: %s" msgstr "classe di login sconosciuta: %s" -#: plugins/sudoers/sudoers.c:889 plugins/sudoers/sudoers.c:904 +#: plugins/sudoers/sudoers.c:1031 plugins/sudoers/sudoers.c:1059 #, c-format msgid "unable to resolve host %s" msgstr "impossibile risolvere l'host %s" -#: plugins/sudoers/sudoers.c:986 plugins/sudoers/testsudoers.c:388 +#: plugins/sudoers/sudoers.c:1126 plugins/sudoers/testsudoers.c:385 #, c-format msgid "unknown group: %s" msgstr "gruppo sconosciuto: %s" -#: plugins/sudoers/sudoreplay.c:280 +#: plugins/sudoers/sudoreplay.c:232 #, c-format msgid "invalid filter option: %s" msgstr "opzione di filtro non valida: %s" -#: plugins/sudoers/sudoreplay.c:293 +#: plugins/sudoers/sudoreplay.c:245 #, c-format msgid "invalid max wait: %s" msgstr "attesa massima non valida: %s" -#: plugins/sudoers/sudoreplay.c:299 +#: plugins/sudoers/sudoreplay.c:251 #, c-format msgid "invalid speed factor: %s" msgstr "fattore di velocità non valido: %s" -#: plugins/sudoers/sudoreplay.c:302 plugins/sudoers/visudo.c:190 +#: plugins/sudoers/sudoreplay.c:254 plugins/sudoers/visudo.c:180 #, c-format msgid "%s version %s\n" msgstr "%s versione %s\n" -#: plugins/sudoers/sudoreplay.c:334 +#: plugins/sudoers/sudoreplay.c:286 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/timing: %s" -#: plugins/sudoers/sudoreplay.c:340 +#: plugins/sudoers/sudoreplay.c:292 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/timing: %s" -#: plugins/sudoers/sudoreplay.c:356 +#: plugins/sudoers/sudoreplay.c:308 #, c-format msgid "Replaying sudo session: %s\n" msgstr "Riproduzione della sessione sudo: %s\n" -#: plugins/sudoers/sudoreplay.c:362 +#: plugins/sudoers/sudoreplay.c:314 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Attenzione: il terminale è troppo piccolo per riprodurre correttamente il registro.\n" -#: plugins/sudoers/sudoreplay.c:363 +#: plugins/sudoers/sudoreplay.c:315 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "La geometria del registro è %dx%d, quella del terminale è %dx%d." -#: plugins/sudoers/sudoreplay.c:418 +#: plugins/sudoers/sudoreplay.c:368 msgid "unable to set tty to raw mode" msgstr "impossibile impostare il terminale in modalità raw" -#: plugins/sudoers/sudoreplay.c:449 +#: plugins/sudoers/sudoreplay.c:401 #, c-format msgid "invalid timing file line: %s" msgstr "riga di timing del file non valida: %s" -#: plugins/sudoers/sudoreplay.c:655 plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:611 plugins/sudoers/sudoreplay.c:636 #, c-format msgid "ambiguous expression \"%s\"" msgstr "espressione \"%s\" ambigua" -#: plugins/sudoers/sudoreplay.c:702 +#: plugins/sudoers/sudoreplay.c:658 msgid "unmatched ')' in expression" msgstr "carattere \")\" nell'espressione non corrisposto" -#: plugins/sudoers/sudoreplay.c:706 +#: plugins/sudoers/sudoreplay.c:662 #, c-format msgid "unknown search term \"%s\"" msgstr "termine di ricerca \"%s\" sconosciuto" -#: plugins/sudoers/sudoreplay.c:720 +#: plugins/sudoers/sudoreplay.c:677 #, c-format msgid "%s requires an argument" msgstr "%s richiede un argomento" -#: plugins/sudoers/sudoreplay.c:724 plugins/sudoers/sudoreplay.c:1096 +#: plugins/sudoers/sudoreplay.c:680 plugins/sudoers/sudoreplay.c:1060 #, c-format msgid "invalid regular expression: %s" msgstr "espressione regolare non valida: %s" -#: plugins/sudoers/sudoreplay.c:730 +#: plugins/sudoers/sudoreplay.c:684 #, c-format msgid "could not parse date \"%s\"" msgstr "impossibile analizzare la data \"%s\"" -#: plugins/sudoers/sudoreplay.c:739 +#: plugins/sudoers/sudoreplay.c:693 msgid "unmatched '(' in expression" msgstr "carattere \"(\" nell'espressione non corrisposto" -#: plugins/sudoers/sudoreplay.c:741 +#: plugins/sudoers/sudoreplay.c:695 msgid "illegal trailing \"or\"" msgstr "\"or\" finale non consentito" -#: plugins/sudoers/sudoreplay.c:743 +#: plugins/sudoers/sudoreplay.c:697 msgid "illegal trailing \"!\"" msgstr "carattere \"!\" finale non consentito" -#: plugins/sudoers/sudoreplay.c:796 +#: plugins/sudoers/sudoreplay.c:746 #, c-format msgid "unknown search type %d" msgstr "tipo di ricerca %d sconosciuto" -#: plugins/sudoers/sudoreplay.c:833 +#: plugins/sudoers/sudoreplay.c:784 #, c-format msgid "%s: invalid log file" msgstr "%s: file di registro non valido" -#: plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:802 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: manca il campo della marcatura temporale" -#: plugins/sudoers/sudoreplay.c:858 +#: plugins/sudoers/sudoreplay.c:809 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: marcatura temporale %s: %s" -#: plugins/sudoers/sudoreplay.c:865 +#: plugins/sudoers/sudoreplay.c:816 #, c-format msgid "%s: user field is missing" msgstr "%s: manca il campo utente" -#: plugins/sudoers/sudoreplay.c:873 +#: plugins/sudoers/sudoreplay.c:825 #, c-format msgid "%s: runas user field is missing" msgstr "%s: manca il campo utente di runas" -#: plugins/sudoers/sudoreplay.c:881 +#: plugins/sudoers/sudoreplay.c:834 #, c-format msgid "%s: runas group field is missing" msgstr "%s: manca il campo gruppo di runas" -#: plugins/sudoers/sudoreplay.c:1236 +#: plugins/sudoers/sudoreplay.c:1197 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "uso: %s [-h] [-d DIR] [-m NUM] [-s NUM] ID\n" -#: plugins/sudoers/sudoreplay.c:1239 +#: plugins/sudoers/sudoreplay.c:1200 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "uso: %s [-h] [-d DIR] -l [ESPRESSIONE DI RICERCA]\n" -#: plugins/sudoers/sudoreplay.c:1248 +#: plugins/sudoers/sudoreplay.c:1209 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1471,7 +1641,7 @@ "%s - Riproduce i registri di sessione di sudo\n" "\n" -#: plugins/sudoers/sudoreplay.c:1250 +#: plugins/sudoers/sudoreplay.c:1211 msgid "" "\n" "Options:\n" @@ -1493,11 +1663,11 @@ " -s, --speed=NUME Velocizza o rallenta l'output\n" " -V, --version Visualizza la versione ed esce" -#: plugins/sudoers/testsudoers.c:327 +#: plugins/sudoers/testsudoers.c:324 msgid "\thost unmatched" msgstr "\thost non corrispondente" -#: plugins/sudoers/testsudoers.c:330 +#: plugins/sudoers/testsudoers.c:327 msgid "" "\n" "Command allowed" @@ -1505,7 +1675,7 @@ "\n" "Comando consentito" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command denied" @@ -1513,7 +1683,7 @@ "\n" "Comando negato" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command unmatched" @@ -1521,114 +1691,129 @@ "\n" "Comando non corrispondente" -#: plugins/sudoers/timestamp.c:197 -#, c-format -msgid "unable to truncate time stamp file to %lld bytes" -msgstr "impossibile troncare il file della marcatura temporale a %lld byte" - -#: plugins/sudoers/timestamp.c:297 +#: plugins/sudoers/timestamp.c:233 #, c-format msgid "%s is group writable" msgstr "%s è scrivibile da tutti" -#: plugins/sudoers/timestamp.c:318 +#: plugins/sudoers/timestamp.c:309 #, c-format -msgid "timestamp path too long: %s/%s" -msgstr "percorso marcatura temporale troppo lungo: %s %s" +msgid "unable to truncate time stamp file to %lld bytes" +msgstr "impossibile troncare il file della marcatura temporale a %lld byte" -#: plugins/sudoers/timestamp.c:498 +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:488 plugins/sudoers/visudo.c:494 +msgid "unable to read the clock" +msgstr "impossibile leggere l'orologio" + +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "marcatura temporale dal futuro ignorata" -#: plugins/sudoers/timestamp.c:510 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "marcatura temporale troppo avanti nel tempo: %20.20s" -#: plugins/sudoers/timestamp.c:613 plugins/sudoers/timestamp.c:634 +#: plugins/sudoers/timestamp.c:863 +#, c-format +msgid "unable to lock time stamp file %s" +msgstr "impossibile bloccare il file della marcatura temporale %s" + +#: plugins/sudoers/timestamp.c:906 plugins/sudoers/timestamp.c:926 #, c-format msgid "lecture status path too long: %s/%s" msgstr "percorso marcatura temporale troppo lungo: %s %s" -#: plugins/sudoers/visudo.c:192 +#: plugins/sudoers/visudo.c:182 #, c-format msgid "%s grammar version %d\n" msgstr "%s versione grammaticale %d\n" -#: plugins/sudoers/visudo.c:263 plugins/sudoers/visudo.c:552 +#: plugins/sudoers/visudo.c:254 plugins/sudoers/visudo.c:619 #, c-format msgid "press return to edit %s: " msgstr "premere Invio per modificare %s:" -#: plugins/sudoers/visudo.c:349 plugins/sudoers/visudo.c:355 +#: plugins/sudoers/visudo.c:320 +#, c-format +msgid "specified editor (%s) doesn't exist" +msgstr "l'editor specificato (%s) non esiste" + +#: plugins/sudoers/visudo.c:338 +#, c-format +msgid "no editor found (editor path = %s)" +msgstr "nessun editor trovato (percorso dell'editor = %s)" + +#: plugins/sudoers/visudo.c:447 plugins/sudoers/visudo.c:455 msgid "write error" msgstr "errore di scrittura" -#: plugins/sudoers/visudo.c:439 +#: plugins/sudoers/visudo.c:501 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "impossibile eseguire stat sul file temporaneo (%s), %s non modificato" -#: plugins/sudoers/visudo.c:444 +#: plugins/sudoers/visudo.c:508 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "file temporaneo di lunghezza pari a zero (%s), %s non modificato" -#: plugins/sudoers/visudo.c:450 +#: plugins/sudoers/visudo.c:514 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "editor (%s) non riuscito, %s non modificato" -#: plugins/sudoers/visudo.c:472 +#: plugins/sudoers/visudo.c:536 #, c-format msgid "%s unchanged" msgstr "%s non modificato" -#: plugins/sudoers/visudo.c:497 +#: plugins/sudoers/visudo.c:562 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "impossibile riaprire il file temporaneo (%s), %s non modificato" -#: plugins/sudoers/visudo.c:507 +#: plugins/sudoers/visudo.c:573 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "impossibile analizzare il file temporaneo (%s), errore sconosciuto" -#: plugins/sudoers/visudo.c:543 +#: plugins/sudoers/visudo.c:610 #, c-format msgid "internal error, unable to find %s in list!" msgstr "errore interno, impossibile trovare %s nell'elenco." -#: plugins/sudoers/visudo.c:601 plugins/sudoers/visudo.c:610 +#: plugins/sudoers/visudo.c:669 plugins/sudoers/visudo.c:678 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "impossibile impostare (uid, gid) di %s a (%u, %u)" -#: plugins/sudoers/visudo.c:605 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:673 plugins/sudoers/visudo.c:683 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "impossibile modificare la modalità di %s a 0%o" -#: plugins/sudoers/visudo.c:632 +#: plugins/sudoers/visudo.c:700 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s e %s non sono sullo stesso file system, viene usato \"mv\" per rinominare" -#: plugins/sudoers/visudo.c:646 +#: plugins/sudoers/visudo.c:714 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "comando non riuscito: \"%s %s %s\", %s non modificato" -#: plugins/sudoers/visudo.c:656 +#: plugins/sudoers/visudo.c:724 #, c-format msgid "error renaming %s, %s unchanged" msgstr "errore nel rinominare %s, %s non è stato modificato" -#: plugins/sudoers/visudo.c:718 +#: plugins/sudoers/visudo.c:786 msgid "What now? " msgstr "Che fare ora?" -#: plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:800 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1640,94 +1825,79 @@ " (x) Esce senza salvare le modifiche al file sudoers\n" " (Q) Esce e salva le modifiche al file sudoers (pericoloso)\n" -#: plugins/sudoers/visudo.c:780 +#: plugins/sudoers/visudo.c:848 #, c-format msgid "unable to run %s" msgstr "impossibile avviare %s" -#: plugins/sudoers/visudo.c:806 +#: plugins/sudoers/visudo.c:878 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: proprietario errato (uid, gid), dovrebbe essere (%u, %u)\n" -#: plugins/sudoers/visudo.c:813 +#: plugins/sudoers/visudo.c:885 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: permessi errati, dovrebbe avere modalità 0%o\n" -#: plugins/sudoers/visudo.c:838 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:910 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "failed to parse %s file, unknown error" msgstr "analisi del file %s non riuscita, errore sconosciuto" -#: plugins/sudoers/visudo.c:854 plugins/sudoers/visudo_json.c:1054 +#: plugins/sudoers/visudo.c:926 plugins/sudoers/visudo_json.c:1041 #, c-format msgid "parse error in %s near line %d\n" msgstr "errore di analisi in %s vicino alla riga %d\n" -#: plugins/sudoers/visudo.c:857 plugins/sudoers/visudo_json.c:1057 +#: plugins/sudoers/visudo.c:929 plugins/sudoers/visudo_json.c:1044 #, c-format msgid "parse error in %s\n" msgstr "errore di analisi in %s\n" -#: plugins/sudoers/visudo.c:865 plugins/sudoers/visudo.c:872 +#: plugins/sudoers/visudo.c:937 plugins/sudoers/visudo.c:944 #, c-format msgid "%s: parsed OK\n" msgstr "%s: analisi effettuata correttamente\n" -#: plugins/sudoers/visudo.c:918 +#: plugins/sudoers/visudo.c:991 #, c-format msgid "%s busy, try again later" msgstr "%s occupato, riprovare" -#: plugins/sudoers/visudo.c:962 -#, c-format -msgid "specified editor (%s) doesn't exist" -msgstr "l'editor specificato (%s) non esiste" - -#: plugins/sudoers/visudo.c:985 -#, c-format -msgid "unable to stat editor (%s)" -msgstr "impossibile eseguire stat sull'editor (%s)" - -#: plugins/sudoers/visudo.c:1033 -#, c-format -msgid "no editor found (editor path = %s)" -msgstr "nessun editor trovato (percorso dell'editor = %s)" - -#: plugins/sudoers/visudo.c:1136 +#: plugins/sudoers/visudo.c:1087 #, c-format msgid "Error: cycle in %s `%s'" msgstr "Errore: ciclo in %s \"%s\"" -#: plugins/sudoers/visudo.c:1137 +#: plugins/sudoers/visudo.c:1088 #, c-format msgid "Warning: cycle in %s `%s'" msgstr "Attenzione: ciclo in %s \"%s\"" -#: plugins/sudoers/visudo.c:1141 +#: plugins/sudoers/visudo.c:1092 #, c-format msgid "Error: %s `%s' referenced but not defined" msgstr "Errore: riferimento a \"%2$s\" %1$s, ma non definito" -#: plugins/sudoers/visudo.c:1142 +#: plugins/sudoers/visudo.c:1093 #, c-format msgid "Warning: %s `%s' referenced but not defined" msgstr "Attenzione: riferimento a \"%2$s\" %1$s, ma non definito" -#: plugins/sudoers/visudo.c:1281 +#: plugins/sudoers/visudo.c:1236 #, c-format msgid "Warning: unused %s `%s'" msgstr "Attenzione: inutilizzato %s \"%s\"" -#: plugins/sudoers/visudo.c:1394 +#: plugins/sudoers/visudo.c:1349 #, c-format msgid "" "%s - safely edit the sudoers file\n" "\n" msgstr "%s - Modifica in sicurezza il file sudoers\n" -#: plugins/sudoers/visudo.c:1396 +#: plugins/sudoers/visudo.c:1351 msgid "" "\n" "Options:\n" @@ -1749,11 +1919,11 @@ " -V, --version Visualizza la versione ed esce\n" " -x, --export=FILE Esporta il file sudoers in formato JSON su FILE" -#: plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo_json.c:1018 #, c-format msgid "%s: input and output files must be different" msgstr "%s: i file di input e output devono essere diversi" -#: toke.l:915 +#: toke.l:918 msgid "too many levels of includes" msgstr "troppi livelli di inclusioni" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/plugins/sudoers/po/ja.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/plugins/sudoers/po/ja.mo differ diff -Nru sudo-1.8.12/plugins/sudoers/po/ja.po sudo-1.8.16/plugins/sudoers/po/ja.po --- sudo-1.8.12/plugins/sudoers/po/ja.po 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/po/ja.po 2016-03-17 16:13:10.000000000 +0000 @@ -1,13 +1,13 @@ # Japanese messages for sudoers # This file is put in the public domain. # Yasuaki Taniguchi , 2011. -# Takeshi Hamasaki , 2012. +# Takeshi Hamasaki , 2012, 2015, 2016. msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.6b4\n" -"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2012-08-10 13:08-0400\n" -"PO-Revision-Date: 2012-08-18 19:27+0900\n" +"Project-Id-Version: sudoers 1.8.16b1\n" +"Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" +"POT-Creation-Date: 2016-02-19 15:48-0700\n" +"PO-Revision-Date: 2016-03-03 19:39+0900\n" "Last-Translator: Takeshi Hamasaki \n" "Language-Team: Japanese \n" "Language: ja\n" @@ -15,52 +15,200 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Poedit-Basepath: /factory/ja-po/sudoers/sudo-1.8.5rc3\n" +"X-Poedit-Basepath: sudo-1.8.16b1\n" +"X-Generator: Poedit 1.8.7\n" +"X-Poedit-SearchPath-0: .\n" + +#: confstr.sh:1 +msgid "syntax error" +msgstr "構文エラー" + +#: confstr.sh:2 +msgid "%p's password: " +msgstr "%p のパスワード:" + +#: confstr.sh:3 +msgid "[sudo] password for %p: " +msgstr "[sudo] %p のパスワード:" -#: gram.y:112 +#: confstr.sh:4 +msgid "Password: " +msgstr "パスワード: " + +#: confstr.sh:5 +msgid "*** SECURITY information for %h ***" +msgstr "*** %h のセキュリティ情報 ***" + +#: confstr.sh:6 +msgid "Sorry, try again." +msgstr "残念、また試してください。" + +#: gram.y:183 gram.y:201 gram.y:207 gram.y:213 gram.y:219 gram.y:225 +#: gram.y:241 gram.y:248 gram.y:255 gram.y:262 gram.y:269 gram.y:285 +#: gram.y:308 gram.y:315 gram.y:322 gram.y:329 gram.y:336 gram.y:391 +#: gram.y:399 gram.y:409 gram.y:439 gram.y:446 gram.y:453 gram.y:460 +#: gram.y:572 gram.y:579 gram.y:588 gram.y:597 gram.y:614 gram.y:670 +#: gram.y:677 gram.y:684 gram.y:692 gram.y:784 gram.y:791 gram.y:798 +#: gram.y:805 gram.y:812 gram.y:838 gram.y:845 gram.y:852 gram.y:1136 +#: gram.y:1143 plugins/sudoers/alias.c:123 plugins/sudoers/alias.c:136 +#: plugins/sudoers/auth/bsdauth.c:141 plugins/sudoers/auth/kerb5.c:119 +#: plugins/sudoers/auth/kerb5.c:145 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/auth/sia.c:59 +#: plugins/sudoers/defaults.c:518 plugins/sudoers/defaults.c:722 +#: plugins/sudoers/defaults.c:882 plugins/sudoers/editor.c:64 +#: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:92 +#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/iolog.c:586 +#: plugins/sudoers/iolog.c:618 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:446 plugins/sudoers/ldap.c:477 +#: plugins/sudoers/ldap.c:529 plugins/sudoers/ldap.c:562 +#: plugins/sudoers/ldap.c:917 plugins/sudoers/ldap.c:1064 +#: plugins/sudoers/ldap.c:1384 plugins/sudoers/ldap.c:1542 +#: plugins/sudoers/ldap.c:1620 plugins/sudoers/ldap.c:1756 +#: plugins/sudoers/ldap.c:1780 plugins/sudoers/ldap.c:1810 +#: plugins/sudoers/ldap.c:1863 plugins/sudoers/ldap.c:1878 +#: plugins/sudoers/ldap.c:1974 plugins/sudoers/ldap.c:2007 +#: plugins/sudoers/ldap.c:2160 plugins/sudoers/ldap.c:2257 +#: plugins/sudoers/ldap.c:3063 plugins/sudoers/ldap.c:3096 +#: plugins/sudoers/ldap.c:3407 plugins/sudoers/ldap.c:3435 +#: plugins/sudoers/ldap.c:3451 plugins/sudoers/ldap.c:3540 +#: plugins/sudoers/ldap.c:3556 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:666 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:508 +#: plugins/sudoers/match.c:544 plugins/sudoers/match.c:742 +#: plugins/sudoers/match.c:799 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:393 +#: plugins/sudoers/policy.c:602 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/sssd.c:160 plugins/sudoers/sssd.c:192 +#: plugins/sudoers/sssd.c:235 plugins/sudoers/sssd.c:242 +#: plugins/sudoers/sssd.c:278 plugins/sudoers/sssd.c:323 +#: plugins/sudoers/sssd.c:920 plugins/sudoers/sssd.c:1053 +#: plugins/sudoers/sudoers.c:159 plugins/sudoers/sudoers.c:294 +#: plugins/sudoers/sudoers.c:304 plugins/sudoers/sudoers.c:312 +#: plugins/sudoers/sudoers.c:365 plugins/sudoers/sudoers.c:663 +#: plugins/sudoers/sudoers.c:749 plugins/sudoers/sudoers.c:793 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:472 +#: plugins/sudoers/sudoreplay.c:668 plugins/sudoers/sudoreplay.c:780 +#: plugins/sudoers/sudoreplay.c:820 plugins/sudoers/sudoreplay.c:829 +#: plugins/sudoers/sudoreplay.c:839 plugins/sudoers/sudoreplay.c:847 +#: plugins/sudoers/sudoreplay.c:851 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1011 plugins/sudoers/testsudoers.c:130 +#: plugins/sudoers/testsudoers.c:188 plugins/sudoers/testsudoers.c:215 +#: plugins/sudoers/testsudoers.c:232 plugins/sudoers/timestamp.c:390 +#: plugins/sudoers/timestamp.c:426 plugins/sudoers/timestamp.c:838 +#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 +#: plugins/sudoers/toke_util.c:147 plugins/sudoers/visudo.c:152 +#: plugins/sudoers/visudo.c:213 plugins/sudoers/visudo.c:298 +#: plugins/sudoers/visudo.c:304 plugins/sudoers/visudo.c:434 +#: plugins/sudoers/visudo.c:980 plugins/sudoers/visudo.c:1024 +#: plugins/sudoers/visudo.c:1120 toke.l:785 toke.l:806 toke.l:816 toke.l:924 +#: toke.l:1082 +msgid "unable to allocate memory" +msgstr "メモリ割り当てを行えませんでした" + +#: gram.y:471 +msgid "a digest requires a path name" +msgstr "認証方式にはパスが必要です" + +#: gram.y:1136 gram.y:1143 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/defaults.c:518 +#: plugins/sudoers/defaults.c:722 plugins/sudoers/defaults.c:882 +#: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 +#: plugins/sudoers/editor.c:92 plugins/sudoers/env.c:234 +#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 +#: plugins/sudoers/iolog.c:586 plugins/sudoers/iolog.c:618 +#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:446 +#: plugins/sudoers/ldap.c:477 plugins/sudoers/ldap.c:529 +#: plugins/sudoers/ldap.c:562 plugins/sudoers/ldap.c:917 +#: plugins/sudoers/ldap.c:1064 plugins/sudoers/ldap.c:1384 +#: plugins/sudoers/ldap.c:1542 plugins/sudoers/ldap.c:1620 +#: plugins/sudoers/ldap.c:1756 plugins/sudoers/ldap.c:1780 +#: plugins/sudoers/ldap.c:1810 plugins/sudoers/ldap.c:1863 +#: plugins/sudoers/ldap.c:1878 plugins/sudoers/ldap.c:1974 +#: plugins/sudoers/ldap.c:2007 plugins/sudoers/ldap.c:2160 +#: plugins/sudoers/ldap.c:2257 plugins/sudoers/ldap.c:3063 +#: plugins/sudoers/ldap.c:3096 plugins/sudoers/ldap.c:3407 +#: plugins/sudoers/ldap.c:3434 plugins/sudoers/ldap.c:3450 +#: plugins/sudoers/ldap.c:3540 plugins/sudoers/ldap.c:3556 +#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:508 +#: plugins/sudoers/match.c:544 plugins/sudoers/match.c:742 +#: plugins/sudoers/match.c:799 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:97 +#: plugins/sudoers/policy.c:106 plugins/sudoers/policy.c:115 +#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:250 +#: plugins/sudoers/policy.c:277 plugins/sudoers/policy.c:286 +#: plugins/sudoers/policy.c:325 plugins/sudoers/policy.c:335 +#: plugins/sudoers/policy.c:344 plugins/sudoers/policy.c:393 +#: plugins/sudoers/policy.c:602 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:160 +#: plugins/sudoers/sssd.c:192 plugins/sudoers/sssd.c:235 +#: plugins/sudoers/sssd.c:242 plugins/sudoers/sssd.c:278 +#: plugins/sudoers/sssd.c:323 plugins/sudoers/sssd.c:920 +#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sudoers.c:159 +#: plugins/sudoers/sudoers.c:294 plugins/sudoers/sudoers.c:304 +#: plugins/sudoers/sudoers.c:312 plugins/sudoers/sudoers.c:365 +#: plugins/sudoers/sudoers.c:663 plugins/sudoers/sudoers.c:749 +#: plugins/sudoers/sudoers.c:793 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sudoreplay.c:472 plugins/sudoers/sudoreplay.c:668 +#: plugins/sudoers/sudoreplay.c:780 plugins/sudoers/sudoreplay.c:820 +#: plugins/sudoers/sudoreplay.c:829 plugins/sudoers/sudoreplay.c:839 +#: plugins/sudoers/sudoreplay.c:847 plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:1007 plugins/sudoers/sudoreplay.c:1011 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:188 +#: plugins/sudoers/testsudoers.c:215 plugins/sudoers/testsudoers.c:232 +#: plugins/sudoers/timestamp.c:390 plugins/sudoers/timestamp.c:426 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:147 +#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:213 +#: plugins/sudoers/visudo.c:298 plugins/sudoers/visudo.c:304 +#: plugins/sudoers/visudo.c:434 plugins/sudoers/visudo.c:980 +#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1120 toke.l:785 +#: toke.l:806 toke.l:816 toke.l:924 toke.l:1082 #, c-format -msgid ">>> %s: %s near line %d <<<" -msgstr ">>> %s: %s (%d行付近) <<<" +msgid "%s: %s" +msgstr "%s: %s" -#: plugins/sudoers/alias.c:125 +#: plugins/sudoers/alias.c:132 #, c-format msgid "Alias `%s' already defined" msgstr "別名 `%s' はすでに定義されています" -#: plugins/sudoers/auth/bsdauth.c:78 +#: plugins/sudoers/auth/bsdauth.c:68 #, c-format msgid "unable to get login class for user %s" msgstr "ユーザー%s のログインクラスを得ることができません" -#: plugins/sudoers/auth/bsdauth.c:84 +#: plugins/sudoers/auth/bsdauth.c:73 msgid "unable to begin bsd authentication" msgstr "BSD 認証を開始できません" -#: plugins/sudoers/auth/bsdauth.c:92 +#: plugins/sudoers/auth/bsdauth.c:81 msgid "invalid authentication type" msgstr "無効な認証タイプです" -#: plugins/sudoers/auth/bsdauth.c:101 -msgid "unable to setup authentication" -msgstr "認証をセットアップできません" +#: plugins/sudoers/auth/bsdauth.c:90 +msgid "unable to initialize BSD authentication" +msgstr "BSD 認証を開始できません" -#: plugins/sudoers/auth/fwtk.c:60 -#, c-format +#: plugins/sudoers/auth/fwtk.c:52 msgid "unable to read fwtk config" msgstr "fwtk 設定を読み込めません" -#: plugins/sudoers/auth/fwtk.c:65 -#, c-format +#: plugins/sudoers/auth/fwtk.c:57 msgid "unable to connect to authentication server" msgstr "認証サーバーに接続できません" -#: plugins/sudoers/auth/fwtk.c:71 plugins/sudoers/auth/fwtk.c:95 -#: plugins/sudoers/auth/fwtk.c:128 -#, c-format +#: plugins/sudoers/auth/fwtk.c:63 plugins/sudoers/auth/fwtk.c:87 +#: plugins/sudoers/auth/fwtk.c:121 msgid "lost connection to authentication server" msgstr "認証サーバーへの接続が失われました" -#: plugins/sudoers/auth/fwtk.c:75 +#: plugins/sudoers/auth/fwtk.c:67 #, c-format msgid "" "authentication server error:\n" @@ -69,294 +217,183 @@ "認証サーバーエラーです:\n" "%s" -#: plugins/sudoers/auth/kerb5.c:117 +#: plugins/sudoers/auth/kerb5.c:111 #, c-format -msgid "%s: unable to unparse princ ('%s'): %s" -msgstr "%s: princ ('%s') を符号化できません: %s" +msgid "%s: unable to convert principal to string ('%s'): %s" +msgstr "%s: プリンシパルを文字列('%s')に変換できません: %s" -#: plugins/sudoers/auth/kerb5.c:160 +#: plugins/sudoers/auth/kerb5.c:161 #, c-format msgid "%s: unable to parse '%s': %s" msgstr "%s: '%s' を構文解析できません: %s" #: plugins/sudoers/auth/kerb5.c:170 #, c-format -msgid "%s: unable to resolve ccache: %s" -msgstr "%s: 資格情報キャッシュ (ccache) を解決できません: %s" +msgid "%s: unable to resolve credential cache: %s" +msgstr "%s: 資格情報キャッシュ を解決できません: %s" -#: plugins/sudoers/auth/kerb5.c:218 +#: plugins/sudoers/auth/kerb5.c:217 #, c-format msgid "%s: unable to allocate options: %s" msgstr "%s: オプションを設定できません: %s" -#: plugins/sudoers/auth/kerb5.c:234 +#: plugins/sudoers/auth/kerb5.c:232 #, c-format msgid "%s: unable to get credentials: %s" msgstr "%s: 資格情報を取得できません: %s" -#: plugins/sudoers/auth/kerb5.c:247 +#: plugins/sudoers/auth/kerb5.c:245 #, c-format -msgid "%s: unable to initialize ccache: %s" -msgstr "%s: 資格情報キャッシュ (ccache) を初期化できません: %s" +msgid "%s: unable to initialize credential cache: %s" +msgstr "%s: 資格情報キャッシュ を初期化できません: %s" -#: plugins/sudoers/auth/kerb5.c:251 +#: plugins/sudoers/auth/kerb5.c:248 #, c-format -msgid "%s: unable to store cred in ccache: %s" -msgstr "%s: 資格情報を資格情報キャッシュ (ccache) 内に保存できません: %s" +msgid "%s: unable to store credential in cache: %s" +msgstr "%s: 資格情報をキャッシュできません: %s" -#: plugins/sudoers/auth/kerb5.c:316 +#: plugins/sudoers/auth/kerb5.c:312 #, c-format msgid "%s: unable to get host principal: %s" msgstr "%s: ホストプリンシパルを取得できません: %s" -#: plugins/sudoers/auth/kerb5.c:331 +#: plugins/sudoers/auth/kerb5.c:326 #, c-format msgid "%s: Cannot verify TGT! Possible attack!: %s" msgstr "%s: TGT を検証できません! おそらく攻撃です!: %s" -#: plugins/sudoers/auth/pam.c:100 +#: plugins/sudoers/auth/pam.c:92 msgid "unable to initialize PAM" msgstr "PAM を初期化できません" -#: plugins/sudoers/auth/pam.c:144 +#: plugins/sudoers/auth/pam.c:164 msgid "account validation failure, is your account locked?" msgstr "アカウントの有効性検証に失敗しました。あなたのアカウントはロックされていませんか?" -#: plugins/sudoers/auth/pam.c:148 +#: plugins/sudoers/auth/pam.c:168 msgid "Account or password is expired, reset your password and try again" msgstr "アカウントまたはパスワードが期限切れです。パスワードをリセットして再試行してください" -#: plugins/sudoers/auth/pam.c:155 +#: plugins/sudoers/auth/pam.c:176 #, c-format -msgid "pam_chauthtok: %s" -msgstr "pam_chauthtok: %s" +msgid "unable to change expired password: %s" +msgstr "期限の切れたパスワードを変更できません: %s" -#: plugins/sudoers/auth/pam.c:159 +#: plugins/sudoers/auth/pam.c:181 msgid "Password expired, contact your system administrator" msgstr "パスワードが期限切れです。システム管理者に連絡してください" -#: plugins/sudoers/auth/pam.c:163 +#: plugins/sudoers/auth/pam.c:185 msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator" msgstr "アカウントの期限切れ、または sudo 用の PAM 設定に \"account\" セクションがありません。システム管理者に連絡してください" -#: plugins/sudoers/auth/pam.c:180 +#: plugins/sudoers/auth/pam.c:199 #, c-format -msgid "pam_authenticate: %s" -msgstr "pam_authenticate: %s" - -#: plugins/sudoers/auth/pam.c:332 -msgid "Password: " -msgstr "パスワード: " - -#: plugins/sudoers/auth/pam.c:333 -msgid "Password:" -msgstr "パスワード:" +msgid "PAM authentication error: %s" +msgstr "PAM 認証エラーです: %s" -#: plugins/sudoers/auth/rfc1938.c:104 plugins/sudoers/visudo.c:220 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:218 #, c-format msgid "you do not exist in the %s database" msgstr "あなたは %s データベース内に存在しません" -#: plugins/sudoers/auth/securid5.c:81 -#, c-format +#: plugins/sudoers/auth/securid5.c:73 msgid "failed to initialise the ACE API library" msgstr "ACE API ライブラリの初期化に失敗しました" -#: plugins/sudoers/auth/securid5.c:107 -#, c-format +#: plugins/sudoers/auth/securid5.c:99 msgid "unable to contact the SecurID server" msgstr "SecurID サーバーに接続できません" -#: plugins/sudoers/auth/securid5.c:116 -#, c-format +#: plugins/sudoers/auth/securid5.c:108 msgid "User ID locked for SecurID Authentication" msgstr "SecurID 認証のユーザーIDがロックされています" -#: plugins/sudoers/auth/securid5.c:120 plugins/sudoers/auth/securid5.c:171 -#, c-format +#: plugins/sudoers/auth/securid5.c:112 plugins/sudoers/auth/securid5.c:163 msgid "invalid username length for SecurID" msgstr "SecurID 用のユーザー名の長さが無効です" -#: plugins/sudoers/auth/securid5.c:124 plugins/sudoers/auth/securid5.c:176 -#, c-format +#: plugins/sudoers/auth/securid5.c:116 plugins/sudoers/auth/securid5.c:168 msgid "invalid Authentication Handle for SecurID" msgstr "SecurID 用の認証ハンドルが無効です" -#: plugins/sudoers/auth/securid5.c:128 -#, c-format +#: plugins/sudoers/auth/securid5.c:120 msgid "SecurID communication failed" msgstr "SecurID 通信に失敗しました" -#: plugins/sudoers/auth/securid5.c:132 plugins/sudoers/auth/securid5.c:215 -#, c-format +#: plugins/sudoers/auth/securid5.c:124 plugins/sudoers/auth/securid5.c:211 msgid "unknown SecurID error" msgstr "不明な SecurID エラーです" -#: plugins/sudoers/auth/securid5.c:166 -#, c-format +#: plugins/sudoers/auth/securid5.c:158 msgid "invalid passcode length for SecurID" msgstr "SecurID 用のパスコード長が無効です" -#: plugins/sudoers/auth/sia.c:109 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:125 msgid "unable to initialize SIA session" msgstr "SIA セッションを初期化できません" -#: plugins/sudoers/auth/sudo_auth.c:121 -msgid "Invalid authentication methods compiled into sudo! You may mix standalone and non-standalone authentication." -msgstr "無効な認証方法が sudo のコンパイル時に組み込まれています! スタンドアローンと非スタンドアローン認証を組み合わせているようです。" +#: plugins/sudoers/auth/sudo_auth.c:126 +msgid "invalid authentication methods" +msgstr "無効な認証方法" + +#: plugins/sudoers/auth/sudo_auth.c:128 +msgid "Invalid authentication methods compiled into sudo! You may not mix standalone and non-standalone authentication." +msgstr "無効な認証方法が sudo のコンパイル時に組み込まれています! スタンドアローンと非スタンドアローン認証を混在させてはいけません。" + +#: plugins/sudoers/auth/sudo_auth.c:224 plugins/sudoers/auth/sudo_auth.c:274 +msgid "no authentication methods" +msgstr "認証方法がありません" -#: plugins/sudoers/auth/sudo_auth.c:206 +#: plugins/sudoers/auth/sudo_auth.c:226 msgid "There are no authentication methods compiled into sudo! If you want to turn off authentication, use the --disable-authentication configure option." msgstr "認証方法が sudo のコンパイル時に組み込まれていません! 認証を無効にする場合には、configure オプションで --disable-authentication を指定してください。" -#: plugins/sudoers/auth/sudo_auth.c:374 +#: plugins/sudoers/auth/sudo_auth.c:276 +msgid "Unable to initialize authentication methods." +msgstr "認証方法を初期化できません。" + +#: plugins/sudoers/auth/sudo_auth.c:442 msgid "Authentication methods:" msgstr "認証方法:" -#: plugins/sudoers/bsm_audit.c:60 plugins/sudoers/bsm_audit.c:63 -#: plugins/sudoers/bsm_audit.c:112 plugins/sudoers/bsm_audit.c:116 -#: plugins/sudoers/bsm_audit.c:168 plugins/sudoers/bsm_audit.c:172 -#, c-format -msgid "getaudit: failed" -msgstr "getaudit: 失敗しました" - -#: plugins/sudoers/bsm_audit.c:90 plugins/sudoers/bsm_audit.c:153 -#, c-format +#: plugins/sudoers/bsm_audit.c:111 plugins/sudoers/bsm_audit.c:200 msgid "Could not determine audit condition" msgstr "監査条件を決定できませんでした" -#: plugins/sudoers/bsm_audit.c:101 -#, c-format -msgid "getauid failed" -msgstr "getauid に失敗しました" - -#: plugins/sudoers/bsm_audit.c:103 plugins/sudoers/bsm_audit.c:162 -#, c-format -msgid "au_open: failed" -msgstr "au_open: 失敗しました" - -#: plugins/sudoers/bsm_audit.c:118 plugins/sudoers/bsm_audit.c:174 -#, c-format -msgid "au_to_subject: failed" -msgstr "au_to_subject: 失敗しました" - -#: plugins/sudoers/bsm_audit.c:122 plugins/sudoers/bsm_audit.c:178 -#, c-format -msgid "au_to_exec_args: failed" -msgstr "au_to_exec_args: 失敗しました" - -#: plugins/sudoers/bsm_audit.c:126 plugins/sudoers/bsm_audit.c:187 -#, c-format -msgid "au_to_return32: failed" -msgstr "au_to_return32: 失敗しました" - -#: plugins/sudoers/bsm_audit.c:129 plugins/sudoers/bsm_audit.c:190 -#, c-format +#: plugins/sudoers/bsm_audit.c:172 plugins/sudoers/bsm_audit.c:260 msgid "unable to commit audit record" msgstr "監査レコードをコミットできません" -#: plugins/sudoers/bsm_audit.c:160 -#, c-format -msgid "getauid: failed" -msgstr "getauid: 失敗しました" - -#: plugins/sudoers/bsm_audit.c:183 -#, c-format -msgid "au_to_text: failed" -msgstr "au_to_text: 失敗しました" - -#: plugins/sudoers/check.c:252 plugins/sudoers/iolog.c:172 -#: plugins/sudoers/sudoers.c:988 plugins/sudoers/sudoreplay.c:355 -#: plugins/sudoers/sudoreplay.c:817 plugins/sudoers/sudoreplay.c:974 -#: plugins/sudoers/visudo.c:818 -#, c-format -msgid "unable to open %s" -msgstr "%s を開けません" - -#: plugins/sudoers/check.c:256 plugins/sudoers/iolog.c:229 -#, c-format -msgid "unable to write to %s" -msgstr "%s へ書き込むことができません" - -#: plugins/sudoers/check.c:264 plugins/sudoers/check.c:512 -#: plugins/sudoers/check.c:562 plugins/sudoers/iolog.c:123 -#: plugins/sudoers/iolog.c:156 -#, c-format -msgid "unable to mkdir %s" -msgstr "ディレクトリ %s を作成できません" - -#: plugins/sudoers/check.c:399 plugins/sudoers/env.c:289 -#: plugins/sudoers/env.c:294 plugins/sudoers/env.c:395 -#: plugins/sudoers/env.c:447 plugins/sudoers/linux_audit.c:82 -#: plugins/sudoers/sudoers.c:670 plugins/sudoers/sudoers.c:677 -#: plugins/sudoers/sudoers.c:936 plugins/sudoers/testsudoers.c:253 -#, c-format -msgid "internal error, %s overflow" -msgstr "内部エラー、%s がオーバーフローしました" - -#: plugins/sudoers/check.c:460 -#, c-format -msgid "timestamp path too long: %s" -msgstr "タイムスタンプ用パスが長すぎます: %s" - -#: plugins/sudoers/check.c:491 plugins/sudoers/check.c:535 -#: plugins/sudoers/iolog.c:158 -#, c-format -msgid "%s exists but is not a directory (0%o)" -msgstr "%s が存在しますがディレクトリではありません (0%o)" - -#: plugins/sudoers/check.c:494 plugins/sudoers/check.c:538 -#: plugins/sudoers/check.c:583 -#, c-format -msgid "%s owned by uid %u, should be uid %u" -msgstr "%s はユーザーID (uid) %u によって所有されています。これはユーザーID %u であるべきです" - -#: plugins/sudoers/check.c:499 plugins/sudoers/check.c:543 -#, c-format -msgid "%s writable by non-owner (0%o), should be mode 0700" -msgstr "%s は所有者以外でも書き込み可能 (0%o) です。アクセス権限のモードは 0700 であるべきです" - -#: plugins/sudoers/check.c:507 plugins/sudoers/check.c:551 -#: plugins/sudoers/check.c:619 plugins/sudoers/sudoers.c:1003 -#: plugins/sudoers/visudo.c:319 plugins/sudoers/visudo.c:584 -#, c-format -msgid "unable to stat %s" -msgstr "%s の状態取得 (stat) ができません" - -#: plugins/sudoers/check.c:577 -#, c-format -msgid "%s exists but is not a regular file (0%o)" -msgstr "%s が存在しますが通常ファイル (0%o) ではありません" - -#: plugins/sudoers/check.c:589 -#, c-format -msgid "%s writable by non-owner (0%o), should be mode 0600" -msgstr "%s は所有者以外でも書き込み可能 (0%o) です。アクセス権限のモードは 0600 であるべきです" - -#: plugins/sudoers/check.c:643 -#, c-format -msgid "timestamp too far in the future: %20.20s" -msgstr "タイムスタンプが遠すぎる将来になっています: %20.20s" - -#: plugins/sudoers/check.c:690 -#, c-format -msgid "unable to remove %s (%s), will reset to the epoch" -msgstr "%s (%s) を削除できません。エポックにリセットします" - -#: plugins/sudoers/check.c:698 -#, c-format -msgid "unable to reset %s to the epoch" -msgstr "%s をエポックにリセットできません" +#: plugins/sudoers/check.c:252 +msgid "" +"\n" +"We trust you have received the usual lecture from the local System\n" +"Administrator. It usually boils down to these three things:\n" +"\n" +" #1) Respect the privacy of others.\n" +" #2) Think before you type.\n" +" #3) With great power comes great responsibility.\n" +"\n" +msgstr "" +"\n" +"あなたはシステム管理者から通常の講習を受けたはずです。\n" +"これは通常、以下の3点に要約されます:\n" +"\n" +" #1) 他人のプライバシーを尊重すること。\n" +" #2) タイプする前に考えること。\n" +" #3) 大いなる力には大いなる責任が伴うこと。\n" +"\n" -#: plugins/sudoers/check.c:758 plugins/sudoers/check.c:764 -#: plugins/sudoers/sudoers.c:851 plugins/sudoers/sudoers.c:855 +#: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 +#: plugins/sudoers/sudoers.c:699 plugins/sudoers/sudoers.c:728 #, c-format msgid "unknown uid: %u" msgstr "不明なユーザーID (uid) です: %u" -#: plugins/sudoers/check.c:761 plugins/sudoers/sudoers.c:792 -#: plugins/sudoers/sudoers.c:1120 plugins/sudoers/testsudoers.c:225 -#: plugins/sudoers/testsudoers.c:369 +#: plugins/sudoers/check.c:300 plugins/sudoers/policy.c:774 +#: plugins/sudoers/sudoers.c:1095 plugins/sudoers/testsudoers.c:206 +#: plugins/sudoers/testsudoers.c:361 #, c-format msgid "unknown user: %s" msgstr "不明なユーザーです: %s" @@ -405,505 +442,551 @@ msgstr "ユーザーが許可されていないコマンドを実行しようとした場合にメールを送信します" #: plugins/sudoers/def_data.c:67 +msgid "Send mail if the user tries to run a command" +msgstr "ユーザーがマンドを実行しようとした場合にメールを送信します" + +#: plugins/sudoers/def_data.c:71 msgid "Use a separate timestamp for each user/tty combo" msgstr "ユーザー/tty の組み合わせごとに分離したタイムスタンプを使用します" -#: plugins/sudoers/def_data.c:71 +#: plugins/sudoers/def_data.c:75 msgid "Lecture user the first time they run sudo" msgstr "ユーザーが最初に sudo を実行した時に講義を行う" -#: plugins/sudoers/def_data.c:75 +#: plugins/sudoers/def_data.c:79 #, c-format msgid "File containing the sudo lecture: %s" msgstr "sudo の講義が含まれているファイル: %s" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:83 msgid "Require users to authenticate by default" msgstr "デフォルトでユーザーが認証されていることを必要とします" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:87 msgid "Root may run sudo" msgstr "root が sudo を実行するかもしれません" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:91 msgid "Log the hostname in the (non-syslog) log file" msgstr " ログファイル (syslog 以外) に記録する時にホスト名を含めます" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:95 msgid "Log the year in the (non-syslog) log file" msgstr "ログファイル (syslog 以外) に記録する時に年情報を含めます" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:99 msgid "If sudo is invoked with no arguments, start a shell" msgstr "sudo を引数無しで起動した場合、シェルを開始します" -#: plugins/sudoers/def_data.c:99 +#: plugins/sudoers/def_data.c:103 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "シェルを -s で開始した時に $HOME を変更後のユーザーのホームディレクトリに設定します" -#: plugins/sudoers/def_data.c:103 +#: plugins/sudoers/def_data.c:107 msgid "Always set $HOME to the target user's home directory" msgstr "$HOME を常に変更後のユーザーのホームディレクトリに設定します" -#: plugins/sudoers/def_data.c:107 +#: plugins/sudoers/def_data.c:111 msgid "Allow some information gathering to give useful error messages" msgstr "役に立つエラーメッセージを表示するためにいくつかの情報を収集することを許可します" -#: plugins/sudoers/def_data.c:111 +#: plugins/sudoers/def_data.c:115 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "sudoers ファイルに完全修飾ホスト名 (FQDN) を要求します" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:119 msgid "Insult the user when they enter an incorrect password" msgstr "間違ったパスワードを入力した時にユーザーを侮辱します" -#: plugins/sudoers/def_data.c:119 +#: plugins/sudoers/def_data.c:123 msgid "Only allow the user to run sudo if they have a tty" msgstr "tty がある場合のみ sudo の実行を許可します" -#: plugins/sudoers/def_data.c:123 +#: plugins/sudoers/def_data.c:127 msgid "Visudo will honor the EDITOR environment variable" msgstr "visudo が EDITOR 環境変数を尊重して使用します" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:131 msgid "Prompt for root's password, not the users's" msgstr "ユーザーのパスワードではなく、root のパスワードの入力を要求します" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:135 msgid "Prompt for the runas_default user's password, not the users's" msgstr "ユーザーのパスワードではなく、 runas_default ユーザーのパスワードの入力を要求します" -#: plugins/sudoers/def_data.c:135 +#: plugins/sudoers/def_data.c:139 msgid "Prompt for the target user's password, not the users's" msgstr "現在のユーザーのパスワードではなく、変更先ユーザーのパスワードの入力を要求します" -#: plugins/sudoers/def_data.c:139 +#: plugins/sudoers/def_data.c:143 msgid "Apply defaults in the target user's login class if there is one" msgstr "変更先ユーザーのログインクラスのデフォルトが存在する場合は、デフォルトを適用します" -#: plugins/sudoers/def_data.c:143 +#: plugins/sudoers/def_data.c:147 msgid "Set the LOGNAME and USER environment variables" msgstr "LOGNAME および USER 環境変数を設定します" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:151 msgid "Only set the effective uid to the target user, not the real uid" msgstr "実効ユーザーIDのみ変更先ユーザーの UID に設定し、実ユーザーIDは変更しない" -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:155 msgid "Don't initialize the group vector to that of the target user" msgstr "グループベクトルを変更先ユーザーの値で初期化しない" -#: plugins/sudoers/def_data.c:155 +#: plugins/sudoers/def_data.c:159 #, c-format -msgid "Length at which to wrap log file lines (0 for no wrap): %d" -msgstr "ログファイルの改行する長さ (0 の場合は改行しない): %d" +msgid "Length at which to wrap log file lines (0 for no wrap): %u" +msgstr "ログファイルの行頭から改行までの長さ (0 の場合は改行しない): %u" -#: plugins/sudoers/def_data.c:159 +#: plugins/sudoers/def_data.c:163 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "認証タイムスタンプのタイムアウト値: %.1f 分" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:167 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "パスワード入力要求のタイムアウト値: %.1f 分" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:171 #, c-format -msgid "Number of tries to enter a password: %d" -msgstr "パスワード入力の試行回数: %d" +msgid "Number of tries to enter a password: %u" +msgstr "パスワード入力の試行回数: %u" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:175 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "使用する umask 値 (0777 の場合はユーザーの設定値を使用します): 0%o" -#: plugins/sudoers/def_data.c:175 +#: plugins/sudoers/def_data.c:179 #, c-format msgid "Path to log file: %s" msgstr "ログファイルのパス: %s" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:183 #, c-format msgid "Path to mail program: %s" msgstr "メールプログラムのパス: %s" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:187 #, c-format msgid "Flags for mail program: %s" msgstr "メールプログラムの引数フラグ: %s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:191 #, c-format msgid "Address to send mail to: %s" msgstr "メールの送信先アドレス: %s" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:195 #, c-format msgid "Address to send mail from: %s" msgstr "メールの送信元アドレス: %s" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:199 #, c-format msgid "Subject line for mail messages: %s" msgstr "メールの件名 (Subject) 行: %s" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:203 #, c-format msgid "Incorrect password message: %s" msgstr "パスワードを間違った時のメッセージ: %s" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:207 +#, c-format +msgid "Path to lecture status dir: %s" +msgstr "受講状況ディレクトリのパス: %s" + +#: plugins/sudoers/def_data.c:211 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "認証タイムスタンプディレクトリのパス: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:215 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "認証タイムスタンプディレクトリの所有者: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:219 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "パスワード入力と PATH の要求が免除されるグループに属するユーザー: %s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:223 #, c-format msgid "Default password prompt: %s" msgstr "パスワード入力要求時に表示される文字列: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:227 msgid "If set, passprompt will override system prompt in all cases." msgstr "設定した場合、すべての場合において passprompt がシステムの入力要求表示を上書きします" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:231 #, c-format msgid "Default user to run commands as: %s" msgstr "コマンドを実行するデフォルトの変更先ユーザー: %s" -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:235 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "ユーザーの $PATH を上書きする時の値: %s" -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:239 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "visudo で使用されるエディターのパス: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:243 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "'list' 疑似コマンド使用するためにパスワードを要求される時: %s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:247 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "'verify' 疑似コマンドを使用するためにパスワードを要求される時: %s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:251 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "sudo_noexec ライブラリに含まれるダミーの exec 関数群を事前ロードします" # do はたぶん強調の do -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:255 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "LDAP ディレクトリが実行中の場合、ローカルの sudoers ファイルを無視します" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:259 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "%d 以上の値をもつファイル記述子をコマンド実行前に閉じます" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:263 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "設定した場合、ユーザーが `closefrom' の値を -C オプションで上書きするかもしれません" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:267 msgid "Allow users to set arbitrary environment variables" msgstr "ユーザーが任意の環境変数を設定することを許可します" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:271 msgid "Reset the environment to a default set of variables" msgstr "環境変数の集合をデフォルトに設定します" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to check for sanity:" msgstr "正当性の確認を行う環境変数:" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to remove:" msgstr "削除する環境変数:" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:283 msgid "Environment variables to preserve:" msgstr "保護する環境変数:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:287 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "新しいセキュリティコンテキスト内で使用する SELinux の役割: %s" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:291 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "新しいセキュリティコンテキスト内で使用する SELinux のタイプ: %s" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:295 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "sudo 固有の環境ファイルのパス: %s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:299 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "sudoers を構文解析する時に使用するロケール: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:303 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "パスワードが表示されてしまう状態であっても sudo がパスワード入力を要求することを許可します" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:307 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "パスワード入力要求でユーザーの入力があった時に、視覚的なフィードバックを提供します" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:311 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "ファイルシステムにアクセスしないがより正確では無い、素早い一致確認処理を行います" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:315 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:311 +#: plugins/sudoers/def_data.c:319 msgid "Log user's input for the command being run" msgstr "コマンドを実行した時のユーザー入力をログに記録します" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:323 msgid "Log the output of the command being run" msgstr "コマンドを実行した時の出力をログに記録します" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:327 msgid "Compress I/O logs using zlib" msgstr "I/O ログを zlib を使用して圧縮します" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:331 msgid "Always run commands in a pseudo-tty" msgstr "常に疑似 tty 内でコマンドを実行します" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:335 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "UNIX 以外のグループをサポートするためのプラグインです:%s" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:339 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "入出力 (I/O) ログを保存するディレクトリです:%s" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:343 #, c-format msgid "File in which to store the input/output log: %s" msgstr "入出力 (I/O) ログを保存するファイルです:%s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:347 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "pty を割り当てた時に utmp/utmpx ファイルに記録を加えます" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:351 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "utmp に記録するユーザーを、実行したユーザーではなく、変更後のユーザーにします" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:355 msgid "Set of permitted privileges" msgstr "許容される権限の集合" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:359 msgid "Set of limit privileges" msgstr "制限される権限の集合" -#: plugins/sudoers/defaults.c:208 +#: plugins/sudoers/def_data.c:363 +msgid "Run commands on a pty in the background" +msgstr "コマンドを pty でバックグラウンドで実行する" + +#: plugins/sudoers/def_data.c:367 +msgid "PAM service name to use" +msgstr "利用する PAM サービス名" + +#: plugins/sudoers/def_data.c:371 +msgid "PAM service name to use for login shells" +msgstr "ログインシェルで利用する PAM サービス名" + +#: plugins/sudoers/def_data.c:375 +msgid "Attempt to establish PAM credentials for the target user" +msgstr "ターゲットユーザーの PAM 資格情報による認証を試みる" + +#: plugins/sudoers/def_data.c:379 +msgid "Create a new PAM session for the command to run in" +msgstr "実行するコマンドのために新しい PAM セッションを生成する" + +#: plugins/sudoers/def_data.c:383 +#, c-format +msgid "Maximum I/O log sequence number: %u" +msgstr "I/O ログシーケンス番号の最大値: %u" + +#: plugins/sudoers/def_data.c:387 +msgid "Enable sudoers netgroup support" +msgstr "sudoers のネットグループサポートを有効にする" + +#: plugins/sudoers/def_data.c:391 +msgid "Check parent directories for writability when editing files with sudoedit" +msgstr "ファイルを sudoedit で編集するときに親ディレクトリが書き込み可能か確かめる" + +#: plugins/sudoers/def_data.c:395 +msgid "Follow symbolic links when editing files with sudoedit" +msgstr "ファイルを sudoedit で編集するときにシンボリックリンクを追う" + +#: plugins/sudoers/def_data.c:399 +msgid "Query the group plugin for unknown system groups" +msgstr "不明なシステムグループについて、グループプラグインに問い合わせる" + +#: plugins/sudoers/def_data.c:403 +msgid "Match netgroups based on the entire tuple: user, host and domain" +msgstr "ネットグループについて、すべてのタプル(ユーザー、ホスト、ドメイン)を基に判定する" + +#: plugins/sudoers/defaults.c:199 plugins/sudoers/defaults.c:610 +#: plugins/sudoers/visudo_json.c:633 plugins/sudoers/visudo_json.c:668 #, c-format msgid "unknown defaults entry `%s'" msgstr "不明なデフォルト項目 `%s' です" -#: plugins/sudoers/defaults.c:216 plugins/sudoers/defaults.c:226 -#: plugins/sudoers/defaults.c:246 plugins/sudoers/defaults.c:259 -#: plugins/sudoers/defaults.c:272 plugins/sudoers/defaults.c:285 -#: plugins/sudoers/defaults.c:298 plugins/sudoers/defaults.c:318 -#: plugins/sudoers/defaults.c:328 +#: plugins/sudoers/defaults.c:207 plugins/sudoers/defaults.c:217 +#: plugins/sudoers/defaults.c:241 plugins/sudoers/defaults.c:256 +#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 +#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 +#: plugins/sudoers/defaults.c:325 #, c-format msgid "value `%s' is invalid for option `%s'" msgstr "オプション `%2$s' の値 `%1$s' は無効です" -#: plugins/sudoers/defaults.c:219 plugins/sudoers/defaults.c:229 -#: plugins/sudoers/defaults.c:237 plugins/sudoers/defaults.c:254 -#: plugins/sudoers/defaults.c:267 plugins/sudoers/defaults.c:280 -#: plugins/sudoers/defaults.c:293 plugins/sudoers/defaults.c:313 -#: plugins/sudoers/defaults.c:324 +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:220 +#: plugins/sudoers/defaults.c:228 plugins/sudoers/defaults.c:251 +#: plugins/sudoers/defaults.c:264 plugins/sudoers/defaults.c:277 +#: plugins/sudoers/defaults.c:290 plugins/sudoers/defaults.c:310 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "no value specified for `%s'" msgstr "`%s' に値が指定されていません" -#: plugins/sudoers/defaults.c:242 +#: plugins/sudoers/defaults.c:233 #, c-format msgid "values for `%s' must start with a '/'" msgstr "`%s' の値は '/' で開始しなければいけません" -#: plugins/sudoers/defaults.c:304 +#: plugins/sudoers/defaults.c:301 #, c-format msgid "option `%s' does not take a value" msgstr "オプション `%s' は値をとりません" -#: plugins/sudoers/env.c:367 +#: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 +#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:450 +#: plugins/sudoers/ldap.c:540 plugins/sudoers/ldap.c:1166 +#: plugins/sudoers/ldap.c:1388 plugins/sudoers/ldap.c:1704 +#: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:929 +#: plugins/sudoers/policy.c:511 plugins/sudoers/policy.c:520 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:815 +#: plugins/sudoers/testsudoers.c:236 plugins/sudoers/toke_util.c:162 #, c-format +msgid "internal error, %s overflow" +msgstr "内部エラー、%s がオーバーフローしました" + +#: plugins/sudoers/env.c:377 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: envp が破損しています。長さが合いません" -#: plugins/sudoers/env.c:369 plugins/sudoers/env.c:448 -#: plugins/sudoers/toke_util.c:113 plugins/sudoers/toke_util.c:167 -#: plugins/sudoers/toke_util.c:207 toke.l:697 toke.l:827 toke.l:887 toke.l:983 -#, c-format -msgid "unable to allocate memory" -msgstr "メモリ割り当てを行えませんでした" +#: plugins/sudoers/env.c:1083 +msgid "unable to rebuild the environment" +msgstr "環境を再構築できません" -#: plugins/sudoers/env.c:992 +#: plugins/sudoers/env.c:1157 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "すみませんが、あなたは次の環境変数を設定することを許可されていません: %s" -#: plugins/sudoers/find_path.c:69 plugins/sudoers/find_path.c:108 -#: plugins/sudoers/find_path.c:123 plugins/sudoers/iolog.c:125 -#: plugins/sudoers/sudoers.c:945 toke.l:693 toke.l:883 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" - -#: plugins/sudoers/group_plugin.c:91 -#, c-format -msgid "%s%s: %s" -msgstr "%s%s: %s" - -#: plugins/sudoers/group_plugin.c:103 +#: plugins/sudoers/group_plugin.c:86 #, c-format msgid "%s must be owned by uid %d" msgstr "%s の所有者は uid %d でなければいけません" -#: plugins/sudoers/group_plugin.c:107 +#: plugins/sudoers/group_plugin.c:90 #, c-format msgid "%s must only be writable by owner" msgstr "%s は所有者のみ書き込み可能でなければいけません" -#: plugins/sudoers/group_plugin.c:114 +#: plugins/sudoers/group_plugin.c:98 plugins/sudoers/sssd.c:331 #, c-format -msgid "unable to dlopen %s: %s" -msgstr "dlopen %s を行うことができません: %s" +msgid "unable to load %s: %s" +msgstr "%s をロードできません: %su" -#: plugins/sudoers/group_plugin.c:119 +#: plugins/sudoers/group_plugin.c:104 #, c-format msgid "unable to find symbol \"group_plugin\" in %s" msgstr "%s 内にシンボル \"group_plugin\" がありません" -#: plugins/sudoers/group_plugin.c:124 +#: plugins/sudoers/group_plugin.c:109 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: 互換性のないグループプラグインメジャーバージョン %d です。予期されるのは %d です" -#: plugins/sudoers/interfaces.c:112 +#: plugins/sudoers/interfaces.c:117 msgid "Local IP address and netmask pairs:\n" msgstr "ローカル IP アドレスとネットマスクの組:\n" -#: plugins/sudoers/iolog.c:205 plugins/sudoers/sudoers.c:991 +#: plugins/sudoers/iolog.c:92 plugins/sudoers/iolog.c:110 +#: plugins/sudoers/timestamp.c:169 +#, c-format +msgid "%s exists but is not a directory (0%o)" +msgstr "%s が存在しますがディレクトリではありません (0%o)" + +#: plugins/sudoers/iolog.c:103 plugins/sudoers/iolog.c:124 +#: plugins/sudoers/iolog.c:131 plugins/sudoers/timestamp.c:163 +#: plugins/sudoers/timestamp.c:184 +#, c-format +msgid "unable to mkdir %s" +msgstr "ディレクトリ %s を作成できません" + +#: plugins/sudoers/iolog.c:200 plugins/sudoers/sudoers.c:871 +#: plugins/sudoers/sudoreplay.c:300 plugins/sudoers/sudoreplay.c:769 +#: plugins/sudoers/sudoreplay.c:973 plugins/sudoers/timestamp.c:399 +#: plugins/sudoers/visudo.c:904 plugins/sudoers/visudo_json.c:1012 +#: plugins/sudoers/visudo_json.c:1025 +#, c-format +msgid "unable to open %s" +msgstr "%s を開けません" + +#: plugins/sudoers/iolog.c:241 plugins/sudoers/sudoers.c:875 +#: plugins/sudoers/sudoreplay.c:1084 #, c-format msgid "unable to read %s" msgstr "%s を読み込めません" -#: plugins/sudoers/iolog.c:208 +#: plugins/sudoers/iolog.c:277 plugins/sudoers/sudoreplay.c:550 +#: plugins/sudoers/timestamp.c:298 plugins/sudoers/timestamp.c:301 #, c-format -msgid "invalid sequence number %s" -msgstr "無効な順序番号です: %s" +msgid "unable to write to %s" +msgstr "%s へ書き込むことができません" -#: plugins/sudoers/iolog.c:258 plugins/sudoers/iolog.c:261 -#: plugins/sudoers/iolog.c:526 plugins/sudoers/iolog.c:531 -#: plugins/sudoers/iolog.c:537 plugins/sudoers/iolog.c:545 -#: plugins/sudoers/iolog.c:553 plugins/sudoers/iolog.c:561 -#: plugins/sudoers/iolog.c:569 +#: plugins/sudoers/iolog.c:342 plugins/sudoers/iolog.c:540 #, c-format msgid "unable to create %s" msgstr "%s を作成できません" -#: plugins/sudoers/iolog_path.c:263 plugins/sudoers/sudoers.c:382 +#: plugins/sudoers/iolog.c:723 #, c-format -msgid "unable to set locale to \"%s\", using \"C\"" -msgstr "ロケールを \"%s\" に設定できません。 \"C\" を使用します" +msgid "%s: internal error, file index %d not open" +msgstr "%s: 内部エラー、インデックス %d のファイルを開くことができません" -#: plugins/sudoers/ldap.c:387 -#, c-format +#: plugins/sudoers/ldap.c:428 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: ポートが大きすぎます" -#: plugins/sudoers/ldap.c:410 -#, c-format -msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" -msgstr "sudo_ldap_conf_add_ports: hostbuf を拡張中にメモリ空間が不足しました" - -#: plugins/sudoers/ldap.c:440 +#: plugins/sudoers/ldap.c:488 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "サポートされてない LDAP URI タイプです: %s" -#: plugins/sudoers/ldap.c:469 -#, c-format -msgid "invalid uri: %s" -msgstr "無効な URI です: %s" - -#: plugins/sudoers/ldap.c:475 -#, c-format +#: plugins/sudoers/ldap.c:515 msgid "unable to mix ldap and ldaps URIs" msgstr "ldap と ldaps の URI を混ぜて使用できません" -#: plugins/sudoers/ldap.c:479 -#, c-format -msgid "unable to mix ldaps and starttls" -msgstr "ldaps と starttls を混ぜて使用できません" - -#: plugins/sudoers/ldap.c:498 -#, c-format -msgid "sudo_ldap_parse_uri: out of space building hostbuf" -msgstr "sudo_ldap_parse_uri: hostbuf を構築中にメモリ空間が不足しました" +#: plugins/sudoers/ldap.c:519 plugins/sudoers/ldap.c:555 +msgid "starttls not supported when using ldaps" +msgstr "starttls は ldaps を使用時にはサポートされていません" -#: plugins/sudoers/ldap.c:572 +#: plugins/sudoers/ldap.c:626 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "SSL 証明書と鍵データベースを初期化できません: %s" -#: plugins/sudoers/ldap.c:575 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "SSL を使用するためには %s の中の TLS_CERT を設定する必要があります" -#: plugins/sudoers/ldap.c:992 -#, c-format +#: plugins/sudoers/ldap.c:1152 msgid "unable to get GMT time" msgstr "GMT 時刻を取得できません" -#: plugins/sudoers/ldap.c:998 -#, c-format +#: plugins/sudoers/ldap.c:1158 msgid "unable to format timestamp" msgstr "タイムスタンプを書式整形できません" -#: plugins/sudoers/ldap.c:1006 -#, c-format -msgid "unable to build time filter" -msgstr "時刻フィルターを構築できません" - -#: plugins/sudoers/ldap.c:1225 +#: plugins/sudoers/ldap.c:1853 #, c-format -msgid "sudo_ldap_build_pass1 allocation mismatch" -msgstr "sudo_ldap_build_pass1 配置が一致しません" +msgid "%s: %s: %s: %s" +msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:1761 +#: plugins/sudoers/ldap.c:2394 #, c-format msgid "" "\n" @@ -912,7 +995,7 @@ "\n" "LDAP 役割: %s\n" -#: plugins/sudoers/ldap.c:1763 +#: plugins/sudoers/ldap.c:2396 #, c-format msgid "" "\n" @@ -921,99 +1004,108 @@ "\n" "LDAP 役割: 不明\n" -#: plugins/sudoers/ldap.c:1810 +#: plugins/sudoers/ldap.c:2443 #, c-format msgid " Order: %s\n" msgstr " Order: %s\n" -#: plugins/sudoers/ldap.c:1818 plugins/sudoers/sssd.c:1168 +#: plugins/sudoers/ldap.c:2451 plugins/sudoers/parse.c:555 +#: plugins/sudoers/sssd.c:1429 #, c-format msgid " Commands:\n" msgstr " コマンド:\n" -#: plugins/sudoers/ldap.c:2240 +#: plugins/sudoers/ldap.c:3015 #, c-format msgid "unable to initialize LDAP: %s" msgstr "LDAP を初期化できません: %s" -#: plugins/sudoers/ldap.c:2274 -#, c-format +#: plugins/sudoers/ldap.c:3051 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:2510 +#: plugins/sudoers/ldap.c:3305 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "無効な sudoOrder 属性です: %s" -#: plugins/sudoers/linux_audit.c:57 -#, c-format +#: plugins/sudoers/linux_audit.c:52 msgid "unable to open audit system" msgstr "監査システムを開くことができません" #: plugins/sudoers/linux_audit.c:93 -#, c-format msgid "unable to send audit message" msgstr "監査メッセージを送ることができません" -#: plugins/sudoers/logging.c:202 +#: plugins/sudoers/logging.c:106 +#, c-format +msgid "%8s : %s" +msgstr "%8s : %s" + +#: plugins/sudoers/logging.c:134 +#, c-format +msgid "%8s : (command continued) %s" +msgstr "%8s : (コマンド継続中) %s" + +#: plugins/sudoers/logging.c:159 #, c-format msgid "unable to open log file: %s: %s" msgstr "ログファイルを開けません: %s: %s" -#: plugins/sudoers/logging.c:205 +#: plugins/sudoers/logging.c:162 #, c-format msgid "unable to lock log file: %s: %s" msgstr "ログファイルをロックできません: %s: %s" -#: plugins/sudoers/logging.c:260 +#: plugins/sudoers/logging.c:211 +msgid "No user or host" +msgstr "ユーザーまたはホストがありません" + +#: plugins/sudoers/logging.c:213 +msgid "validation failure" +msgstr "検証に失敗しました" + +#: plugins/sudoers/logging.c:220 msgid "user NOT in sudoers" msgstr "ユーザーが sudoers 内にありません" -#: plugins/sudoers/logging.c:262 +#: plugins/sudoers/logging.c:222 msgid "user NOT authorized on host" msgstr "ホスト上でユーザーが認証されていません" -#: plugins/sudoers/logging.c:264 +#: plugins/sudoers/logging.c:224 msgid "command not allowed" msgstr "コマンドが許可されていません" -#: plugins/sudoers/logging.c:274 +#: plugins/sudoers/logging.c:259 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "%s は sudoers ファイル内にありません。この事象は記録・報告されます。\n" -#: plugins/sudoers/logging.c:277 +#: plugins/sudoers/logging.c:262 #, 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:281 +#: plugins/sudoers/logging.c:266 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "ユーザー %s は %s 上で sudo を実行できません。すみません。\n" -#: plugins/sudoers/logging.c:284 +#: plugins/sudoers/logging.c:269 #, 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:317 -msgid "No user or host" -msgstr "ユーザーまたはホストがありません" - -#: plugins/sudoers/logging.c:319 -msgid "validation failure" -msgstr "検証に失敗しました" - -#: plugins/sudoers/logging.c:336 plugins/sudoers/sudoers.c:502 -#: plugins/sudoers/sudoers.c:503 plugins/sudoers/sudoers.c:1539 -#: plugins/sudoers/sudoers.c:1540 +#: plugins/sudoers/logging.c:306 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1222 +#: plugins/sudoers/sudoers.c:1224 #, c-format msgid "%s: command not found" msgstr "%s: コマンドが見つかりません" -#: plugins/sudoers/logging.c:338 plugins/sudoers/sudoers.c:499 +#: plugins/sudoers/logging.c:308 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring `%s' found in '.'\n" @@ -1022,61 +1114,70 @@ "'.' 内で見つかった `%1$s' を無視します\n" "この `%3$s' を実行したい場合は `sudo ./%2$s' を使用してください。" -#: plugins/sudoers/logging.c:352 +#: plugins/sudoers/logging.c:325 msgid "authentication failure" msgstr "認証失敗" -#: plugins/sudoers/logging.c:376 -#, c-format -msgid "%d incorrect password attempt" -msgid_plural "%d incorrect password attempts" -msgstr[0] "%d 回パスワード試行を間違えました" - -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:351 msgid "a password is required" msgstr "パスワードが必要です" -#: plugins/sudoers/logging.c:530 +#: plugins/sudoers/logging.c:422 plugins/sudoers/logging.c:484 #, c-format +msgid "%u incorrect password attempt" +msgid_plural "%u incorrect password attempts" +msgstr[0] "%u 回パスワード試行を間違えました" + +#: plugins/sudoers/logging.c:572 msgid "unable to fork" msgstr "fork できません" -#: plugins/sudoers/logging.c:537 plugins/sudoers/logging.c:599 +#: plugins/sudoers/logging.c:580 plugins/sudoers/logging.c:640 #, c-format msgid "unable to fork: %m" msgstr "fork できません: %m" -#: plugins/sudoers/logging.c:589 +#: plugins/sudoers/logging.c:630 #, c-format msgid "unable to open pipe: %m" msgstr "パイプを開けません: %m" -#: plugins/sudoers/logging.c:614 +#: plugins/sudoers/logging.c:655 #, c-format msgid "unable to dup stdin: %m" msgstr "標準入力を複製できません: %m" -#: plugins/sudoers/logging.c:650 +#: plugins/sudoers/logging.c:693 #, c-format msgid "unable to execute %s: %m" msgstr "%s を実行できません: %m" -#: plugins/sudoers/logging.c:865 +#: plugins/sudoers/match.c:616 +#, c-format +msgid "unsupported digest type %d for %s" +msgstr "サポートされてない 認証方式 %d です: %s" + +#: plugins/sudoers/match.c:657 +#, c-format +msgid "%s: read error" +msgstr "%s: 読み込みエラー" + +#: plugins/sudoers/match.c:692 #, c-format -msgid "internal error: insufficient space for log line" -msgstr "内部エラー: ログの行に十分な空間がありません" +msgid "digest for %s (%s) is not in %s form" +msgstr "%s (%s) の認証方式は %s 形式ではありません" -#: plugins/sudoers/parse.c:123 +#: plugins/sudoers/parse.c:114 #, c-format msgid "parse error in %s near line %d" msgstr "%s 内 %d 行付近で構文解析エラーが発生しました" -#: plugins/sudoers/parse.c:126 +#: plugins/sudoers/parse.c:117 #, c-format msgid "parse error in %s" msgstr "%s 内で構文解析エラーが発生しました" -#: plugins/sudoers/parse.c:414 +#: plugins/sudoers/parse.c:502 #, c-format msgid "" "\n" @@ -1085,386 +1186,454 @@ "\n" "sudoers 項目:\n" -#: plugins/sudoers/parse.c:416 +#: plugins/sudoers/parse.c:503 #, c-format msgid " RunAsUsers: " msgstr " RunAsUsers: " -#: plugins/sudoers/parse.c:431 +#: plugins/sudoers/parse.c:517 #, c-format msgid " RunAsGroups: " msgstr " RunAsGroups: " -#: plugins/sudoers/parse.c:440 +#: plugins/sudoers/parse.c:526 +#, c-format +msgid " Options: " +msgstr " オプション: " + +#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:253 +msgid "unable to parse network address list" +msgstr "ネットワークのアドレスリストを解析できません" + +#: plugins/sudoers/policy.c:659 plugins/sudoers/visudo.c:841 +#, c-format +msgid "unable to execute %s" +msgstr "%s を実行できません" + +#: plugins/sudoers/policy.c:792 +#, c-format +msgid "Sudoers policy plugin version %s\n" +msgstr "sudoers ポリシープラグイン バージョン %s\n" + +#: plugins/sudoers/policy.c:794 +#, c-format +msgid "Sudoers file grammar version %d\n" +msgstr "sudoers ファイル文法バージョン %d\n" + +#: plugins/sudoers/policy.c:798 #, c-format msgid "" -" Commands:\n" -"\t" +"\n" +"Sudoers path: %s\n" msgstr "" -" コマンド:\n" -"\t" +"\n" +"sudoers のパス: %s\n" -#: plugins/sudoers/plugin_error.c:100 plugins/sudoers/plugin_error.c:105 -msgid ": " -msgstr ": " +#: plugins/sudoers/policy.c:801 +#, c-format +msgid "nsswitch path: %s\n" +msgstr "nsswitch のパス: %s\n" + +#: plugins/sudoers/policy.c:803 +#, c-format +msgid "ldap.conf path: %s\n" +msgstr "ldap.conf のパス: %s\n" + +#: plugins/sudoers/policy.c:804 +#, c-format +msgid "ldap.secret path: %s\n" +msgstr "ldap.secret のパス: %s\n" + +#: plugins/sudoers/policy.c:837 +#, c-format +msgid "unable to register hook of type %d (version %d.%d)" +msgstr "タイプ %d のフックを登録できません (バージョン %d.%d)" -#: plugins/sudoers/pwutil.c:278 +#: plugins/sudoers/pwutil.c:158 plugins/sudoers/pwutil.c:176 #, c-format -msgid "unable to cache uid %u (%s), already exists" -msgstr "ユーザーID %u (%s) をキャッシュできません。すでに存在します" +msgid "unable to cache uid %u, out of memory" +msgstr "ユーザーID %u をキャッシュできません。メモリ不足です。" -#: plugins/sudoers/pwutil.c:286 +#: plugins/sudoers/pwutil.c:170 #, c-format msgid "unable to cache uid %u, already exists" msgstr "ユーザーID %u をキャッシュできません。すでに存在します" -#: plugins/sudoers/pwutil.c:322 plugins/sudoers/pwutil.c:331 +#: plugins/sudoers/pwutil.c:222 plugins/sudoers/pwutil.c:239 +#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:334 +#, c-format +msgid "unable to cache user %s, out of memory" +msgstr "ユーザー %s をキャッシュできません。メモリ不足です。" + +#: plugins/sudoers/pwutil.c:234 #, c-format msgid "unable to cache user %s, already exists" msgstr "ユーザー %s をキャッシュできません。すでに存在します" -#: plugins/sudoers/pwutil.c:668 +#: plugins/sudoers/pwutil.c:474 plugins/sudoers/pwutil.c:492 #, c-format -msgid "unable to cache gid %u (%s), already exists" -msgstr "グループID %u (%s) をキャッシュできません。すでに存在します" +msgid "unable to cache gid %u, out of memory" +msgstr "グループID %u をキャッシュできません。メモリ不足です。" -#: plugins/sudoers/pwutil.c:676 +#: plugins/sudoers/pwutil.c:486 #, c-format msgid "unable to cache gid %u, already exists" msgstr "グループID %u をキャッシュできません。すでに存在します" -#: plugins/sudoers/pwutil.c:706 plugins/sudoers/pwutil.c:715 +#: plugins/sudoers/pwutil.c:532 plugins/sudoers/pwutil.c:549 +#: plugins/sudoers/pwutil.c:584 plugins/sudoers/pwutil.c:626 +#, c-format +msgid "unable to cache group %s, out of memory" +msgstr "グループ %s をキャッシュできません。メモリ不足です。" + +#: plugins/sudoers/pwutil.c:544 #, c-format msgid "unable to cache group %s, already exists" msgstr "グループ %s をキャッシュできません。すでに存在します" -#: plugins/sudoers/set_perms.c:122 plugins/sudoers/set_perms.c:436 -#: plugins/sudoers/set_perms.c:828 plugins/sudoers/set_perms.c:1114 -#: plugins/sudoers/set_perms.c:1396 +#: plugins/sudoers/pwutil.c:739 plugins/sudoers/pwutil.c:783 +#, c-format +msgid "unable to cache group list for %s, already exists" +msgstr "グループリスト %s をキャッシュできません。すでに存在します" + +#: plugins/sudoers/pwutil.c:745 plugins/sudoers/pwutil.c:788 +#, c-format +msgid "unable to cache group list for %s, out of memory" +msgstr "グループリスト %s をキャッシュできません。メモリ不足です。" + +#: plugins/sudoers/pwutil.c:777 +#, c-format +msgid "unable to parse groups for %s" +msgstr "%s のグループを解析できません" + +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 +#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 +#: plugins/sudoers/set_perms.c:1430 msgid "perm stack overflow" msgstr "perm スタックがオーバーフローしました" -#: plugins/sudoers/set_perms.c:130 plugins/sudoers/set_perms.c:444 -#: plugins/sudoers/set_perms.c:836 plugins/sudoers/set_perms.c:1122 -#: plugins/sudoers/set_perms.c:1404 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 +#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 +#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 +#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 +#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 msgid "perm stack underflow" msgstr "perm スタックがアンダーフローしました" -#: plugins/sudoers/set_perms.c:270 plugins/sudoers/set_perms.c:580 -#: plugins/sudoers/set_perms.c:957 plugins/sudoers/set_perms.c:1243 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:493 +#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 +msgid "unable to change to root gid" +msgstr "root のグループIDへ変更できません" + +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:590 +#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 msgid "unable to change to runas gid" msgstr "実行するためのグループIDに変更できません" -#: plugins/sudoers/set_perms.c:282 plugins/sudoers/set_perms.c:592 -#: plugins/sudoers/set_perms.c:967 plugins/sudoers/set_perms.c:1253 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:595 +#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 +msgid "unable to set runas group vector" +msgstr "グループベクトルを実行するためのものに変更できません" + +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:606 +#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 msgid "unable to change to runas uid" msgstr "実行するためのユーザーIDに変更できません" -#: plugins/sudoers/set_perms.c:300 plugins/sudoers/set_perms.c:610 -#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1269 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:624 +#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 msgid "unable to change to sudoers gid" msgstr "sudoers のグループIDへ変更できません" -#: plugins/sudoers/set_perms.c:353 plugins/sudoers/set_perms.c:681 -#: plugins/sudoers/set_perms.c:1029 plugins/sudoers/set_perms.c:1315 -#: plugins/sudoers/set_perms.c:1474 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 msgid "too many processes" msgstr "プロセスが多すぎます" -#: plugins/sudoers/set_perms.c:1542 -msgid "unable to set runas group vector" -msgstr "グループベクトルを実行するためのものに変更できません" +#: plugins/sudoers/solaris_audit.c:51 +msgid "unable to get current working directory" +msgstr "カレントディレクトリを取得できません" -#: plugins/sudoers/sssd.c:251 +#: plugins/sudoers/solaris_audit.c:59 #, c-format -msgid "Unable to dlopen %s: %s" -msgstr "dlopen %s を行うことができません: %s" +msgid "truncated audit path user_cmnd: %s" +msgstr "検証の対象とする長さを切り詰めました user_cmnd: %s" -#: plugins/sudoers/sssd.c:252 +#: plugins/sudoers/solaris_audit.c:66 #, c-format -msgid "Unable to initialize SSS source. Is SSSD installed on your machine?" +msgid "truncated audit path argv[0]: %s" +msgstr "検証の対象とする長さを切り詰めました argv[0]: %s" + +#: plugins/sudoers/solaris_audit.c:115 +msgid "audit_failure message too long" +msgstr "audit_failure のメッセージが長すぎます" + +#: plugins/sudoers/sssd.c:333 +msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "SSS のソースを初期化できません。SSSD はあなたのマシンにインストールされていますか?" -#: plugins/sudoers/sssd.c:258 plugins/sudoers/sssd.c:266 -#: plugins/sudoers/sssd.c:273 plugins/sudoers/sssd.c:280 -#: plugins/sudoers/sssd.c:287 +#: plugins/sudoers/sssd.c:341 plugins/sudoers/sssd.c:350 +#: plugins/sudoers/sssd.c:359 plugins/sudoers/sssd.c:368 +#: plugins/sudoers/sssd.c:377 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "シンボル \"%s\" が %s 内にありません" -#: plugins/sudoers/sudo_nss.c:267 +#: plugins/sudoers/sudo_nss.c:290 #, c-format -msgid "Matching Defaults entries for %s on this host:\n" -msgstr "このホスト上でユーザー %s に一致したデフォルト項目:\n" +msgid "Matching Defaults entries for %s on %s:\n" +msgstr "既定値のエントリと照合中 (ユーザー名 %s) (ホスト名 %s):\n" -#: plugins/sudoers/sudo_nss.c:280 +#: plugins/sudoers/sudo_nss.c:308 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "ユーザー %s 用の Runas およびコマンド特有のデフォルト:\n" -#: plugins/sudoers/sudo_nss.c:293 +#: plugins/sudoers/sudo_nss.c:326 #, c-format -msgid "User %s may run the following commands on this host:\n" -msgstr "ユーザー %s は次のコマンドをこのホスト上で実行できます:\n" +msgid "User %s may run the following commands on %s:\n" +msgstr "ユーザー %s は %s 上で コマンドを実行できます\n" -#: plugins/sudoers/sudo_nss.c:302 +#: plugins/sudoers/sudo_nss.c:339 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "ユーザー %s は %s 上で sudo を実行することを許可されていません。\n" -#: plugins/sudoers/sudoers.c:210 plugins/sudoers/sudoers.c:243 -#: plugins/sudoers/sudoers.c:953 +#: plugins/sudoers/sudoers.c:172 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/visudo.c:223 plugins/sudoers/visudo.c:567 +msgid "unable to initialize sudoers default values" +msgstr "sudoers のデフォルト値を初期化できません" + +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:239 +#: plugins/sudoers/sudoers.c:833 msgid "problem with defaults entries" msgstr "デフォルト項目で問題が発生しました" -#: plugins/sudoers/sudoers.c:216 -#, c-format +#: plugins/sudoers/sudoers.c:205 msgid "no valid sudoers sources found, quitting" msgstr "有効な sudoers のソースが見つかりません。終了します" -#: plugins/sudoers/sudoers.c:268 -#, c-format -msgid "unable to execute %s: %s" -msgstr "%s を実行できません: %s" - -#: plugins/sudoers/sudoers.c:335 -#, c-format +#: plugins/sudoers/sudoers.c:275 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers の指定により root が sudo を使用することは禁止されています" -#: plugins/sudoers/sudoers.c:342 -#, c-format +#: plugins/sudoers/sudoers.c:332 msgid "you are not permitted to use the -C option" msgstr "-C オプションを使用することは許可されていません" -#: plugins/sudoers/sudoers.c:431 +#: plugins/sudoers/sudoers.c:396 #, c-format msgid "timestamp owner (%s): No such user" msgstr "タイムスタンプの所有者 (%s): そのようなユーザーはありません" -#: plugins/sudoers/sudoers.c:447 +#: plugins/sudoers/sudoers.c:410 msgid "no tty" msgstr "tty がありません" -#: plugins/sudoers/sudoers.c:448 -#, c-format +#: plugins/sudoers/sudoers.c:411 msgid "sorry, you must have a tty to run sudo" msgstr "sudo を実行するには tty がなければいけません。すみません" -#: plugins/sudoers/sudoers.c:498 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "コマンドがカレントディレクトリにあります" -#: plugins/sudoers/sudoers.c:510 -#, c-format +#: plugins/sudoers/sudoers.c:486 msgid "sorry, you are not allowed to preserve the environment" msgstr "あなたは環境変数を保護することを許可されていません。すみません" -#: plugins/sudoers/sudoers.c:1006 +#: plugins/sudoers/sudoers.c:778 +msgid "command too long" +msgstr "コマンド名が長すぎます" + +#: plugins/sudoers/sudoers.c:886 plugins/sudoers/visudo.c:427 +#: plugins/sudoers/visudo.c:667 +#, c-format +msgid "unable to stat %s" +msgstr "%s の状態取得 (stat) ができません" + +#: plugins/sudoers/sudoers.c:890 #, c-format msgid "%s is not a regular file" msgstr "%s は通常ファイルではありません" -#: plugins/sudoers/sudoers.c:1009 toke.l:846 +#: plugins/sudoers/sudoers.c:894 plugins/sudoers/timestamp.c:225 toke.l:947 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s はユーザーID %u によって所有されています。これは %u であるべきです" -#: plugins/sudoers/sudoers.c:1013 toke.l:853 +#: plugins/sudoers/sudoers.c:898 toke.l:954 #, c-format msgid "%s is world writable" msgstr "%s は誰でも書き込み可能です" -#: plugins/sudoers/sudoers.c:1016 toke.l:858 +#: plugins/sudoers/sudoers.c:902 toke.l:959 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s のグループIDは %u になっています。これは %u であるべきです" -#: plugins/sudoers/sudoers.c:1043 +#: plugins/sudoers/sudoers.c:933 #, c-format msgid "only root can use `-c %s'" msgstr "root のみ `-c %s' を使用できます" -#: plugins/sudoers/sudoers.c:1060 plugins/sudoers/sudoers.c:1062 +#: plugins/sudoers/sudoers.c:952 #, c-format msgid "unknown login class: %s" msgstr "不明なログインクラスです: %s" -#: plugins/sudoers/sudoers.c:1089 +#: plugins/sudoers/sudoers.c:1031 plugins/sudoers/sudoers.c:1059 #, c-format msgid "unable to resolve host %s" msgstr "ホスト %s の名前解決ができません" -#: plugins/sudoers/sudoers.c:1141 plugins/sudoers/testsudoers.c:387 +#: plugins/sudoers/sudoers.c:1126 plugins/sudoers/testsudoers.c:385 #, c-format msgid "unknown group: %s" msgstr "不明なグループです: %s" -#: plugins/sudoers/sudoers.c:1190 -#, c-format -msgid "Sudoers policy plugin version %s\n" -msgstr "sudoers ポリシープラグイン バージョン %s\n" - -#: plugins/sudoers/sudoers.c:1192 -#, c-format -msgid "Sudoers file grammar version %d\n" -msgstr "sudoers ファイル文法バージョン %d\n" - -#: plugins/sudoers/sudoers.c:1196 -#, c-format -msgid "" -"\n" -"Sudoers path: %s\n" -msgstr "" -"\n" -"sudoers のパス: %s\n" - -#: plugins/sudoers/sudoers.c:1199 -#, c-format -msgid "nsswitch path: %s\n" -msgstr "nsswitch のパス: %s\n" - -#: plugins/sudoers/sudoers.c:1201 -#, c-format -msgid "ldap.conf path: %s\n" -msgstr "ldap.conf のパス: %s\n" - -#: plugins/sudoers/sudoers.c:1202 -#, c-format -msgid "ldap.secret path: %s\n" -msgstr "ldap.secret のパス: %s\n" - -#: plugins/sudoers/sudoreplay.c:293 +#: plugins/sudoers/sudoreplay.c:232 #, c-format msgid "invalid filter option: %s" msgstr "無効なフィルターオプションです: %s" -#: plugins/sudoers/sudoreplay.c:306 +#: plugins/sudoers/sudoreplay.c:245 #, c-format msgid "invalid max wait: %s" msgstr "無効な最大待機時間です: %s" -#: plugins/sudoers/sudoreplay.c:312 +#: plugins/sudoers/sudoreplay.c:251 #, c-format msgid "invalid speed factor: %s" msgstr "無効な speed_factor の値です: %s" -#: plugins/sudoers/sudoreplay.c:315 plugins/sudoers/visudo.c:187 +#: plugins/sudoers/sudoreplay.c:254 plugins/sudoers/visudo.c:180 #, c-format msgid "%s version %s\n" msgstr "%s バージョン %s\n" -#: plugins/sudoers/sudoreplay.c:340 +#: plugins/sudoers/sudoreplay.c:286 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/タイミング: %s" -#: plugins/sudoers/sudoreplay.c:346 +#: plugins/sudoers/sudoreplay.c:292 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/タイミング: %s" -#: plugins/sudoers/sudoreplay.c:364 +#: plugins/sudoers/sudoreplay.c:308 #, c-format msgid "Replaying sudo session: %s\n" msgstr "リプレイする sudo セッション: %s\n" -#: plugins/sudoers/sudoreplay.c:370 +#: plugins/sudoers/sudoreplay.c:314 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "警告: ログをきちんとリプレイするには端末が小さすぎます。\n" -#: plugins/sudoers/sudoreplay.c:371 +#: plugins/sudoers/sudoreplay.c:315 #, 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:401 -#, c-format +#: plugins/sudoers/sudoreplay.c:368 msgid "unable to set tty to raw mode" msgstr "tty を raw モードに設定できません" -#: plugins/sudoers/sudoreplay.c:418 +#: plugins/sudoers/sudoreplay.c:401 #, c-format msgid "invalid timing file line: %s" msgstr "無効なタイミングファイルの行です: %s" -#: plugins/sudoers/sudoreplay.c:501 -#, c-format -msgid "writing to standard output" -msgstr "標準出力に書き込んでいます" - -#: plugins/sudoers/sudoreplay.c:530 -#, c-format -msgid "nanosleep: tv_sec %ld, tv_nsec %ld" -msgstr "nanosleep: tv_sec %ld, tv_nsec %ld" - -#: plugins/sudoers/sudoreplay.c:643 plugins/sudoers/sudoreplay.c:668 +#: plugins/sudoers/sudoreplay.c:611 plugins/sudoers/sudoreplay.c:636 #, c-format msgid "ambiguous expression \"%s\"" msgstr "曖昧な式 \"%s です\"" -#: plugins/sudoers/sudoreplay.c:685 -#, c-format -msgid "too many parenthesized expressions, max %d" -msgstr "式内の小括弧のくくりが多すぎます。最大は %d です。" - -#: plugins/sudoers/sudoreplay.c:696 -#, c-format +#: plugins/sudoers/sudoreplay.c:658 msgid "unmatched ')' in expression" msgstr "式内で ')' が不一致です" -#: plugins/sudoers/sudoreplay.c:702 +#: plugins/sudoers/sudoreplay.c:662 #, c-format msgid "unknown search term \"%s\"" msgstr "不明な検索語 \"%s\" です" -#: plugins/sudoers/sudoreplay.c:716 +#: plugins/sudoers/sudoreplay.c:677 #, c-format msgid "%s requires an argument" msgstr "%s は引数が必要です" -#: plugins/sudoers/sudoreplay.c:720 +#: plugins/sudoers/sudoreplay.c:680 plugins/sudoers/sudoreplay.c:1060 #, c-format msgid "invalid regular expression: %s" msgstr "無効な正規表現です: %s" -#: plugins/sudoers/sudoreplay.c:726 +#: plugins/sudoers/sudoreplay.c:684 #, c-format msgid "could not parse date \"%s\"" msgstr "日付 \"%s\" を構文解析できませんでした" -#: plugins/sudoers/sudoreplay.c:739 -#, c-format +#: plugins/sudoers/sudoreplay.c:693 msgid "unmatched '(' in expression" msgstr "式内で '(' が不一致です" -#: plugins/sudoers/sudoreplay.c:741 -#, c-format +#: plugins/sudoers/sudoreplay.c:695 msgid "illegal trailing \"or\"" msgstr "末尾に \"or\" を配置できません" -#: plugins/sudoers/sudoreplay.c:743 -#, c-format +#: plugins/sudoers/sudoreplay.c:697 msgid "illegal trailing \"!\"" msgstr "末尾に \"!\" を配置できません" -#: plugins/sudoers/sudoreplay.c:1050 +#: plugins/sudoers/sudoreplay.c:746 #, c-format -msgid "invalid regex: %s" -msgstr "無効な正規表現です: %s" +msgid "unknown search type %d" +msgstr "未知の検索タイプ %d" + +#: plugins/sudoers/sudoreplay.c:784 +#, c-format +msgid "%s: invalid log file" +msgstr "%s: 無効なログファイルのパス" + +#: plugins/sudoers/sudoreplay.c:802 +#, c-format +msgid "%s: time stamp field is missing" +msgstr "%s: タイムスタンプのフィールドがありません" + +#: plugins/sudoers/sudoreplay.c:809 +#, c-format +msgid "%s: time stamp %s: %s" +msgstr "%s: タイムスタンプ %s: %s" + +#: plugins/sudoers/sudoreplay.c:816 +#, c-format +msgid "%s: user field is missing" +msgstr "%s: ユーザー名フィールドがありません" + +#: plugins/sudoers/sudoreplay.c:825 +#, c-format +msgid "%s: runas user field is missing" +msgstr "%s: runasユーザー名フィールドがありません" + +#: plugins/sudoers/sudoreplay.c:834 +#, c-format +msgid "%s: runas group field is missing" +msgstr "%s: runasグループ名フィールドがありません" -#: plugins/sudoers/sudoreplay.c:1174 +#: plugins/sudoers/sudoreplay.c:1197 #, c-format -msgid "usage: %s [-h] [-d directory] [-m max_wait] [-s speed_factor] ID\n" -msgstr "使用法: %s [-h] [-d directory] [-m max_wait] [-s speed_factor] ID\n" +msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" +msgstr "使用法: %s [-h] [-d dir] [-m num] [-s num] ID\n" -#: plugins/sudoers/sudoreplay.c:1177 +#: plugins/sudoers/sudoreplay.c:1200 #, c-format -msgid "usage: %s [-h] [-d directory] -l [search expression]\n" -msgstr "使用法: %s [-h] [-d directory] -l [search expression]\n" +msgid "usage: %s [-h] [-d dir] -l [search expression]\n" +msgstr "使用法: %s [-h] [-d dir] -l [search expression]\n" -#: plugins/sudoers/sudoreplay.c:1186 +#: plugins/sudoers/sudoreplay.c:1209 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1473,34 +1642,33 @@ "%s - sudo セッションログをリプレイします\n" "\n" -#: plugins/sudoers/sudoreplay.c:1188 +#: plugins/sudoers/sudoreplay.c:1211 msgid "" "\n" "Options:\n" -" -d directory specify directory for session logs\n" -" -f filter specify which I/O type to display\n" -" -h display help message and exit\n" -" -l [expression] list available session IDs that match expression\n" -" -m max_wait max number of seconds to wait between events\n" -" -s speed_factor speed up or slow down output\n" -" -V display version information and exit" +" -d, --directory=dir specify directory for session logs\n" +" -f, --filter=filter specify which I/O type(s) to display\n" +" -h, --help display help message and exit\n" +" -l, --list list available session IDs, with optional expression\n" +" -m, --max-wait=num max number of seconds to wait between events\n" +" -s, --speed=num speed up or slow down output\n" +" -V, --version display version information and exit" msgstr "" "\n" "オプション:\n" -" -d directory セッションログのディレクトリを指定する\n" -" -f filter 表示する I/O タイプを指定する\n" -" -h ヘルプメッセージを表示して終了する\n" -" -l [expression] expression に一致する使用可能なセッションID\n" -" を一覧表示する\n" -" -m max_wait イベント間の待ち時間の最大秒数を指定する\n" -" -s speed_factor 出力速度を速くする、または遅くする\n" -" -V バージョン情報を表示して終了する" +" -d, --directory=dir セッションログのディレクトリを指定する\n" +" -f, --filter=filter 表示する I/O タイプを指定する\n" +" -h, --help ヘルプメッセージを表示して終了する\n" +" -l, --list[=expr] 使用可能なセッションIDを一覧表示する\n" +" オプションで条件 expr を指定可能 -m, --max-wait=num イベント間の待ち時間の最大秒数を指定する\n" +" -s, --speed=num 出力速度を速くする、または遅くする\n" +" -V, --version バージョン情報を表示して終了する" -#: plugins/sudoers/testsudoers.c:338 +#: plugins/sudoers/testsudoers.c:324 msgid "\thost unmatched" msgstr "\tホストが一致しません" -#: plugins/sudoers/testsudoers.c:341 +#: plugins/sudoers/testsudoers.c:327 msgid "" "\n" "Command allowed" @@ -1508,7 +1676,7 @@ "\n" "コマンドが許可されました" -#: plugins/sudoers/testsudoers.c:342 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command denied" @@ -1516,7 +1684,7 @@ "\n" "コマンドが拒否されました" -#: plugins/sudoers/testsudoers.c:342 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command unmatched" @@ -1524,90 +1692,129 @@ "\n" "コマンドが一致しませんでした" -#: plugins/sudoers/toke_util.c:218 -msgid "fill_args: buffer overflow" -msgstr "fill_args: バッファオーバーフローが発生しました" +#: plugins/sudoers/timestamp.c:233 +#, c-format +msgid "%s is group writable" +msgstr "%s はグループのメンバーによる書き込みが可能です" + +#: plugins/sudoers/timestamp.c:309 +#, c-format +msgid "unable to truncate time stamp file to %lld bytes" +msgstr "タイムスタンプファイルを %lld バイトに切り詰めることができません" + +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:488 plugins/sudoers/visudo.c:494 +msgid "unable to read the clock" +msgstr "時刻を読み込むことができません" + +#: plugins/sudoers/timestamp.c:756 +msgid "ignoring time stamp from the future" +msgstr "未来の時刻のタイムスタンプを無視します" -#: plugins/sudoers/visudo.c:188 +#: plugins/sudoers/timestamp.c:768 +#, c-format +msgid "time stamp too far in the future: %20.20s" +msgstr "タイムスタンプが遠すぎる将来になっています: %20.20s" + +#: plugins/sudoers/timestamp.c:863 +#, c-format +msgid "unable to lock time stamp file %s" +msgstr "タイムスタンプファイル %s をロックすることができません" + +#: plugins/sudoers/timestamp.c:906 plugins/sudoers/timestamp.c:926 +#, c-format +msgid "lecture status path too long: %s/%s" +msgstr "受講状況格納パスが長すぎます: %s/%s" + +#: plugins/sudoers/visudo.c:182 #, c-format msgid "%s grammar version %d\n" msgstr "%s 文法バージョン %d\n" -#: plugins/sudoers/visudo.c:252 plugins/sudoers/visudo.c:541 +#: plugins/sudoers/visudo.c:254 plugins/sudoers/visudo.c:619 #, c-format msgid "press return to edit %s: " msgstr "%s を編集するためにリターンを押してください: " -#: plugins/sudoers/visudo.c:335 plugins/sudoers/visudo.c:341 +#: plugins/sudoers/visudo.c:320 #, c-format +msgid "specified editor (%s) doesn't exist" +msgstr "指定したエディター (%s) が存在しません" + +#: plugins/sudoers/visudo.c:338 +#, c-format +msgid "no editor found (editor path = %s)" +msgstr "エディターが見つかりません (エディターのパス = %s)" + +#: plugins/sudoers/visudo.c:447 plugins/sudoers/visudo.c:455 msgid "write error" msgstr "書き込みエラーです" -#: plugins/sudoers/visudo.c:423 +#: plugins/sudoers/visudo.c:501 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "一時ファイル (%s) の状態取得 (stat) ができません。%s は変更されません" -#: plugins/sudoers/visudo.c:428 +#: plugins/sudoers/visudo.c:508 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "一時ファイル (%s) の大きさが 0 です。%s は変更されません" -#: plugins/sudoers/visudo.c:434 +#: plugins/sudoers/visudo.c:514 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "エディター (%s) が異常終了しました。%s は変更されません" -#: plugins/sudoers/visudo.c:457 +#: plugins/sudoers/visudo.c:536 #, c-format msgid "%s unchanged" msgstr "%s は変更されません" -#: plugins/sudoers/visudo.c:486 +#: plugins/sudoers/visudo.c:562 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "一時ファイル (%s) を再度開くことができません。%s は変更されません。" -#: plugins/sudoers/visudo.c:496 +#: plugins/sudoers/visudo.c:573 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "一時ファイル (%s) の構文解析ができません。不明なエラーです" -#: plugins/sudoers/visudo.c:534 +#: plugins/sudoers/visudo.c:610 #, c-format msgid "internal error, unable to find %s in list!" msgstr "内部エラー、リスト内に %s が見つかりません!" -#: plugins/sudoers/visudo.c:586 plugins/sudoers/visudo.c:595 +#: plugins/sudoers/visudo.c:669 plugins/sudoers/visudo.c:678 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "%s の (ユーザーID, グループID) を (%u, %u) に設定できません" -#: plugins/sudoers/visudo.c:590 plugins/sudoers/visudo.c:600 +#: plugins/sudoers/visudo.c:673 plugins/sudoers/visudo.c:683 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "%s のアクセス権限のモードを 0%o に変更できません" -#: plugins/sudoers/visudo.c:617 +#: plugins/sudoers/visudo.c:700 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s と %s は同じファイルシステム上にありません。名前を変更するために mv を使用しています" -#: plugins/sudoers/visudo.c:631 +#: plugins/sudoers/visudo.c:714 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "コマンドの失敗です: '%s %s %s'。%s は変更されません" -#: plugins/sudoers/visudo.c:641 +#: plugins/sudoers/visudo.c:724 #, c-format msgid "error renaming %s, %s unchanged" msgstr "%s の名前変更に失敗しました。%s は変更されません" -#: plugins/sudoers/visudo.c:704 +#: plugins/sudoers/visudo.c:786 msgid "What now? " msgstr "次は何でしょうか? " -#: plugins/sudoers/visudo.c:718 +#: plugins/sudoers/visudo.c:800 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1619,92 +1826,72 @@ " x -- sudoers ファイルへの変更を保存せずに終了します\n" " Q -- sudoers ファイルへの変更を保存して終了します (*危険です!*)\n" -#: plugins/sudoers/visudo.c:759 -#, c-format -msgid "unable to execute %s" -msgstr "%s を実行できません" - -#: plugins/sudoers/visudo.c:766 +#: plugins/sudoers/visudo.c:848 #, c-format msgid "unable to run %s" msgstr "%s を実行できません" -#: plugins/sudoers/visudo.c:792 +#: plugins/sudoers/visudo.c:878 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: 所有権に誤りがあります。(ユーザーID, グループID) は (%u, %u) であるべきです\n" -#: plugins/sudoers/visudo.c:799 +#: plugins/sudoers/visudo.c:885 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: アクセス権限に誤りがあります。モードは 0%o であるべきです\n" -#: plugins/sudoers/visudo.c:824 +#: plugins/sudoers/visudo.c:910 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "failed to parse %s file, unknown error" msgstr "%s ファイルの構文解析に失敗しました。不明なエラーです" -#: plugins/sudoers/visudo.c:837 +#: plugins/sudoers/visudo.c:926 plugins/sudoers/visudo_json.c:1041 #, c-format msgid "parse error in %s near line %d\n" msgstr "%s 内 %d 行付近で構文解析エラーが発生しました\n" -#: plugins/sudoers/visudo.c:840 +#: plugins/sudoers/visudo.c:929 plugins/sudoers/visudo_json.c:1044 #, c-format msgid "parse error in %s\n" msgstr "%s 内で構文解析エラーが発生しました\n" -#: plugins/sudoers/visudo.c:847 plugins/sudoers/visudo.c:852 +#: plugins/sudoers/visudo.c:937 plugins/sudoers/visudo.c:944 #, c-format msgid "%s: parsed OK\n" msgstr "%s: 正しく構文解析されました\n" -#: plugins/sudoers/visudo.c:899 +#: plugins/sudoers/visudo.c:991 #, c-format msgid "%s busy, try again later" msgstr "%s がビジー状態です。後で再試行してください" -#: plugins/sudoers/visudo.c:943 -#, c-format -msgid "specified editor (%s) doesn't exist" -msgstr "指定したエディター (%s) が存在しません" - -#: plugins/sudoers/visudo.c:966 -#, c-format -msgid "unable to stat editor (%s)" -msgstr "エディター (%s) の状態取得 (stat) ができません" - -#: plugins/sudoers/visudo.c:1014 +#: plugins/sudoers/visudo.c:1087 #, c-format -msgid "no editor found (editor path = %s)" -msgstr "エディターが見つかりません (エディターのパス = %s)" - -#: plugins/sudoers/visudo.c:1108 -#, c-format -msgid "Error: cycle in %s_Alias `%s'" -msgstr "エラー: %s_Alias `%s' 内に循環があります" +msgid "Error: cycle in %s `%s'" +msgstr "エラー: 循環を発見 %s `%s'" -#: plugins/sudoers/visudo.c:1109 +#: plugins/sudoers/visudo.c:1088 #, c-format -msgid "Warning: cycle in %s_Alias `%s'" -msgstr "警告: %s_Alias `%s' 内に循環があります" +msgid "Warning: cycle in %s `%s'" +msgstr "警告: 循環を発見 %s `%s'" -#: plugins/sudoers/visudo.c:1112 +#: plugins/sudoers/visudo.c:1092 #, c-format -msgid "Error: %s_Alias `%s' referenced but not defined" -msgstr "エラー: %s_Alias `%s' は参照されていますが定義されていません" +msgid "Error: %s `%s' referenced but not defined" +msgstr "エラー: %s `%s' は参照されていますが定義されていません" -#: plugins/sudoers/visudo.c:1113 +#: plugins/sudoers/visudo.c:1093 #, c-format -msgid "Warning: %s_Alias `%s' referenced but not defined" -msgstr "警告: %s_Alias `%s' は参照されていますが定義されていません" +msgid "Warning: %s `%s' referenced but not defined" +msgstr "警告: %s `%s' は参照されていますが定義されていません" -#: plugins/sudoers/visudo.c:1248 +#: plugins/sudoers/visudo.c:1236 #, c-format -msgid "%s: unused %s_Alias %s" -msgstr "%s: %s_Alias %s は使用されていません" +msgid "Warning: unused %s `%s'" +msgstr "警告: 使われていません %s `%s'" -#: plugins/sudoers/visudo.c:1304 +#: plugins/sudoers/visudo.c:1349 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -1713,30 +1900,158 @@ "%s - sudoers ファイルを安全に編集する\n" "\n" -#: plugins/sudoers/visudo.c:1306 +#: plugins/sudoers/visudo.c:1351 msgid "" "\n" "Options:\n" -" -c check-only mode\n" -" -f sudoers specify sudoers file location\n" -" -h display help message and exit\n" -" -q less verbose (quiet) syntax error messages\n" -" -s strict syntax checking\n" -" -V display version information and exit" +" -c, --check check-only mode\n" +" -f, --file=sudoers specify sudoers file location\n" +" -h, --help display help message and exit\n" +" -q, --quiet less verbose (quiet) syntax error messages\n" +" -s, --strict strict syntax checking\n" +" -V, --version display version information and exit\n" +" -x, --export=output_file write sudoers in JSON format to output_file" msgstr "" "\n" "オプション:\n" -" -c 検査のみを行う\n" -" -f sudoers sudoers ファイルの位置を指定する\n" -" -h ヘルプメッセージを表示して終了する\n" -" -q 文法エラーメッセージをより少なく (静かに) する\n" -" -s 厳密な文法検査を行う\n" -" -V バージョン情報を表示して終了する" +" -c, --check 検査のみを行う\n" +" -f, --file=sudoers sudoers ファイルの位置を指定する\n" +" -h, --help ヘルプメッセージを表示して終了する\n" +" -q, --quiet 文法エラーメッセージをより少なく (静かに) する\n" +" -s, --strict 厳密な文法検査を行う\n" +" -V, --version バージョン情報を表示して終了する\n" +" -x, --export=output_file write sudoers in JSON format to output_file" -#: toke.l:820 +#: plugins/sudoers/visudo_json.c:1018 +#, c-format +msgid "%s: input and output files must be different" +msgstr "%s: 入力ファイルと出力ファイルは別である必要があります" + +#: toke.l:918 msgid "too many levels of includes" msgstr "インクルードの階層が大きすぎます" +#~ msgid "timestamp path too long: %s/%s" +#~ msgstr "タイムスタンプのパスが長過ぎます: %s/%s" + +#~ msgid "unable to stat editor (%s)" +#~ msgstr "エディター (%s) の状態取得 (stat) ができません" + +#~ msgid ">>> %s: %s near line %d <<<" +#~ msgstr ">>> %s: %s (%d行付近) <<<" + +#~ msgid "pam_chauthtok: %s" +#~ msgstr "pam_chauthtok: %s" + +#~ msgid "pam_authenticate: %s" +#~ msgstr "pam_authenticate: %s" + +#~ msgid "Password:" +#~ msgstr "パスワード:" + +#~ msgid "getaudit: failed" +#~ msgstr "getaudit: 失敗しました" + +#~ msgid "getauid failed" +#~ msgstr "getauid に失敗しました" + +#~ msgid "au_open: failed" +#~ msgstr "au_open: 失敗しました" + +#~ msgid "au_to_subject: failed" +#~ msgstr "au_to_subject: 失敗しました" + +#~ msgid "au_to_exec_args: failed" +#~ msgstr "au_to_exec_args: 失敗しました" + +#~ msgid "au_to_return32: failed" +#~ msgstr "au_to_return32: 失敗しました" + +#~ msgid "getauid: failed" +#~ msgstr "getauid: 失敗しました" + +#~ msgid "au_to_text: failed" +#~ msgstr "au_to_text: 失敗しました" + +#~ msgid "%s owned by uid %u, should be uid %u" +#~ msgstr "%s はユーザーID (uid) %u によって所有されています。これはユーザーID %u であるべきです" + +#~ msgid "%s writable by non-owner (0%o), should be mode 0700" +#~ msgstr "%s は所有者以外でも書き込み可能 (0%o) です。アクセス権限のモードは 0700 であるべきです" + +#~ msgid "%s exists but is not a regular file (0%o)" +#~ msgstr "%s が存在しますが通常ファイル (0%o) ではありません" + +#~ msgid "%s writable by non-owner (0%o), should be mode 0600" +#~ msgstr "%s は所有者以外でも書き込み可能 (0%o) です。アクセス権限のモードは 0600 であるべきです" + +#~ msgid "unable to remove %s (%s), will reset to the epoch" +#~ msgstr "%s (%s) を削除できません。エポックにリセットします" + +#~ msgid "unable to reset %s to the epoch" +#~ msgstr "%s をエポックにリセットできません" + +#~ msgid "unable to set locale to \"%s\", using \"C\"" +#~ msgstr "ロケールを \"%s\" に設定できません。 \"C\" を使用します" + +#~ msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" +#~ msgstr "sudo_ldap_conf_add_ports: hostbuf を拡張中にメモリ空間が不足しました" + +#~ msgid "invalid uri: %s" +#~ msgstr "無効な URI です: %s" + +#~ msgid "unable to mix ldaps and starttls" +#~ msgstr "ldaps と starttls を混ぜて使用できません" + +#~ msgid "sudo_ldap_parse_uri: out of space building hostbuf" +#~ msgstr "sudo_ldap_parse_uri: hostbuf を構築中にメモリ空間が不足しました" + +#~ msgid "sudo_ldap_build_pass1 allocation mismatch" +#~ msgstr "sudo_ldap_build_pass1 配置が一致しません" + +#~ msgid "internal error: insufficient space for log line" +#~ msgstr "内部エラー: ログの行に十分な空間がありません" + +#~ msgid "" +#~ " Commands:\n" +#~ "\t" +#~ msgstr "" +#~ " コマンド:\n" +#~ "\t" + +#~ msgid ": " +#~ msgstr ": " + +#~ msgid "unable to cache uid %u (%s), already exists" +#~ msgstr "ユーザーID %u (%s) をキャッシュできません。すでに存在します" + +#~ msgid "unable to cache gid %u (%s), already exists" +#~ msgstr "グループID %u (%s) をキャッシュできません。すでに存在します" + +#~ msgid "Unable to dlopen %s: %s" +#~ msgstr "dlopen %s を行うことができません: %s" + +#~ msgid "unable to execute %s: %s" +#~ msgstr "%s を実行できません: %s" + +#~ msgid "writing to standard output" +#~ msgstr "標準出力に書き込んでいます" + +#~ msgid "nanosleep: tv_sec %ld, tv_nsec %ld" +#~ msgstr "nanosleep: tv_sec %ld, tv_nsec %ld" + +#~ msgid "too many parenthesized expressions, max %d" +#~ msgstr "式内の小括弧のくくりが多すぎます。最大は %d です。" + +#~ msgid "invalid regex: %s" +#~ msgstr "無効な正規表現です: %s" + +#~ msgid "fill_args: buffer overflow" +#~ msgstr "fill_args: バッファオーバーフローが発生しました" + +#~ msgid "%s: unused %s_Alias %s" +#~ msgstr "%s: %s_Alias %s は使用されていません" + #~ msgid "internal error, expand_prompt() overflow" #~ msgstr "内部エラー、expand_prompt() がオーバーフローしました" @@ -1755,18 +2070,12 @@ #~ msgid "internal error, init_vars() overflow" #~ msgstr "内部エラー、init_vars() がオーバーフローしました" -#~ msgid "invalid log file %s" -#~ msgstr "ログファイル %s は無効です" - #~ msgid "fixed mode on %s" #~ msgstr "%s のアクセス権限のモードを修正しました" #~ msgid "set group on %s" #~ msgstr "%s のグループを設定しました" -#~ msgid "unable to set group on %s" -#~ msgstr "%s のグループを設定できません" - #~ msgid "unable to fix mode on %s" #~ msgstr "%s のアクセス権限のモードを修正できません" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/plugins/sudoers/po/nb.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/plugins/sudoers/po/nb.mo differ diff -Nru sudo-1.8.12/plugins/sudoers/po/nb.po sudo-1.8.16/plugins/sudoers/po/nb.po --- sudo-1.8.12/plugins/sudoers/po/nb.po 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/po/nb.po 2016-03-17 16:13:10.000000000 +0000 @@ -1,14 +1,15 @@ -# Portable object template file for the sudoers plugin -# This file is put in the public domain. -# Todd C. Miller , 2011-2013 -# Åka Sikrom , 2014 +# Norwegian bokmål translation of sudoers. +# This file is distributed under the same license as the sudo package. +# Copyright (C) 2014 Free Software Foundation, Inc. +# Todd C. Miller , 2011-2013. +# Åka Sikrom , 2014-2016. # msgid "" msgstr "" -"Project-Id-Version: sudoers-1.8.12b3\n" -"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-11-20 13:33-0700\n" -"PO-Revision-Date: 2014-11-22 18:28+0100\n" +"Project-Id-Version: sudoers-1.8.16b1\n" +"Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" +"POT-Creation-Date: 2016-02-19 15:48-0700\n" +"PO-Revision-Date: 2016-02-26 20:09+0100\n" "Last-Translator: Åka Sikrom \n" "Language-Team: Norwegian Bokmaal \n" "Language: Norwegian Bokmål\n" @@ -44,46 +45,172 @@ msgid "Sorry, try again." msgstr "Feil. Prøv igjen." -#: gram.y:379 +#: gram.y:183 gram.y:201 gram.y:207 gram.y:213 gram.y:219 gram.y:225 +#: gram.y:241 gram.y:248 gram.y:255 gram.y:262 gram.y:269 gram.y:285 +#: gram.y:308 gram.y:315 gram.y:322 gram.y:329 gram.y:336 gram.y:391 +#: gram.y:399 gram.y:409 gram.y:439 gram.y:446 gram.y:453 gram.y:460 +#: gram.y:572 gram.y:579 gram.y:588 gram.y:597 gram.y:614 gram.y:670 +#: gram.y:677 gram.y:684 gram.y:692 gram.y:784 gram.y:791 gram.y:798 +#: gram.y:805 gram.y:812 gram.y:838 gram.y:845 gram.y:852 gram.y:1136 +#: gram.y:1143 plugins/sudoers/alias.c:123 plugins/sudoers/alias.c:136 +#: plugins/sudoers/auth/bsdauth.c:141 plugins/sudoers/auth/kerb5.c:119 +#: plugins/sudoers/auth/kerb5.c:145 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/auth/sia.c:59 +#: plugins/sudoers/defaults.c:518 plugins/sudoers/defaults.c:722 +#: plugins/sudoers/defaults.c:882 plugins/sudoers/editor.c:64 +#: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:92 +#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/iolog.c:586 +#: plugins/sudoers/iolog.c:618 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:446 plugins/sudoers/ldap.c:477 +#: plugins/sudoers/ldap.c:529 plugins/sudoers/ldap.c:562 +#: plugins/sudoers/ldap.c:917 plugins/sudoers/ldap.c:1064 +#: plugins/sudoers/ldap.c:1384 plugins/sudoers/ldap.c:1542 +#: plugins/sudoers/ldap.c:1620 plugins/sudoers/ldap.c:1756 +#: plugins/sudoers/ldap.c:1780 plugins/sudoers/ldap.c:1810 +#: plugins/sudoers/ldap.c:1863 plugins/sudoers/ldap.c:1878 +#: plugins/sudoers/ldap.c:1974 plugins/sudoers/ldap.c:2007 +#: plugins/sudoers/ldap.c:2160 plugins/sudoers/ldap.c:2257 +#: plugins/sudoers/ldap.c:3063 plugins/sudoers/ldap.c:3096 +#: plugins/sudoers/ldap.c:3407 plugins/sudoers/ldap.c:3435 +#: plugins/sudoers/ldap.c:3451 plugins/sudoers/ldap.c:3540 +#: plugins/sudoers/ldap.c:3556 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:666 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:508 +#: plugins/sudoers/match.c:544 plugins/sudoers/match.c:742 +#: plugins/sudoers/match.c:799 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:393 +#: plugins/sudoers/policy.c:602 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/sssd.c:160 plugins/sudoers/sssd.c:192 +#: plugins/sudoers/sssd.c:235 plugins/sudoers/sssd.c:242 +#: plugins/sudoers/sssd.c:278 plugins/sudoers/sssd.c:323 +#: plugins/sudoers/sssd.c:920 plugins/sudoers/sssd.c:1053 +#: plugins/sudoers/sudoers.c:159 plugins/sudoers/sudoers.c:294 +#: plugins/sudoers/sudoers.c:304 plugins/sudoers/sudoers.c:312 +#: plugins/sudoers/sudoers.c:365 plugins/sudoers/sudoers.c:663 +#: plugins/sudoers/sudoers.c:749 plugins/sudoers/sudoers.c:793 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:472 +#: plugins/sudoers/sudoreplay.c:668 plugins/sudoers/sudoreplay.c:780 +#: plugins/sudoers/sudoreplay.c:820 plugins/sudoers/sudoreplay.c:829 +#: plugins/sudoers/sudoreplay.c:839 plugins/sudoers/sudoreplay.c:847 +#: plugins/sudoers/sudoreplay.c:851 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1011 plugins/sudoers/testsudoers.c:130 +#: plugins/sudoers/testsudoers.c:188 plugins/sudoers/testsudoers.c:215 +#: plugins/sudoers/testsudoers.c:232 plugins/sudoers/timestamp.c:390 +#: plugins/sudoers/timestamp.c:426 plugins/sudoers/timestamp.c:838 +#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 +#: plugins/sudoers/toke_util.c:147 plugins/sudoers/visudo.c:152 +#: plugins/sudoers/visudo.c:213 plugins/sudoers/visudo.c:298 +#: plugins/sudoers/visudo.c:304 plugins/sudoers/visudo.c:434 +#: plugins/sudoers/visudo.c:980 plugins/sudoers/visudo.c:1024 +#: plugins/sudoers/visudo.c:1120 toke.l:785 toke.l:806 toke.l:816 toke.l:924 +#: toke.l:1082 +msgid "unable to allocate memory" +msgstr "klarte ikke å tildele minne" + +#: gram.y:471 msgid "a digest requires a path name" msgstr "kontrollsummering krever at du velger et stinavn" -#: plugins/sudoers/alias.c:136 +#: gram.y:1136 gram.y:1143 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/defaults.c:518 +#: plugins/sudoers/defaults.c:722 plugins/sudoers/defaults.c:882 +#: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 +#: plugins/sudoers/editor.c:92 plugins/sudoers/env.c:234 +#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 +#: plugins/sudoers/iolog.c:586 plugins/sudoers/iolog.c:618 +#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:446 +#: plugins/sudoers/ldap.c:477 plugins/sudoers/ldap.c:529 +#: plugins/sudoers/ldap.c:562 plugins/sudoers/ldap.c:917 +#: plugins/sudoers/ldap.c:1064 plugins/sudoers/ldap.c:1384 +#: plugins/sudoers/ldap.c:1542 plugins/sudoers/ldap.c:1620 +#: plugins/sudoers/ldap.c:1756 plugins/sudoers/ldap.c:1780 +#: plugins/sudoers/ldap.c:1810 plugins/sudoers/ldap.c:1863 +#: plugins/sudoers/ldap.c:1878 plugins/sudoers/ldap.c:1974 +#: plugins/sudoers/ldap.c:2007 plugins/sudoers/ldap.c:2160 +#: plugins/sudoers/ldap.c:2257 plugins/sudoers/ldap.c:3063 +#: plugins/sudoers/ldap.c:3096 plugins/sudoers/ldap.c:3407 +#: plugins/sudoers/ldap.c:3434 plugins/sudoers/ldap.c:3450 +#: plugins/sudoers/ldap.c:3540 plugins/sudoers/ldap.c:3556 +#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:508 +#: plugins/sudoers/match.c:544 plugins/sudoers/match.c:742 +#: plugins/sudoers/match.c:799 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:97 +#: plugins/sudoers/policy.c:106 plugins/sudoers/policy.c:115 +#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:250 +#: plugins/sudoers/policy.c:277 plugins/sudoers/policy.c:286 +#: plugins/sudoers/policy.c:325 plugins/sudoers/policy.c:335 +#: plugins/sudoers/policy.c:344 plugins/sudoers/policy.c:393 +#: plugins/sudoers/policy.c:602 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:160 +#: plugins/sudoers/sssd.c:192 plugins/sudoers/sssd.c:235 +#: plugins/sudoers/sssd.c:242 plugins/sudoers/sssd.c:278 +#: plugins/sudoers/sssd.c:323 plugins/sudoers/sssd.c:920 +#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sudoers.c:159 +#: plugins/sudoers/sudoers.c:294 plugins/sudoers/sudoers.c:304 +#: plugins/sudoers/sudoers.c:312 plugins/sudoers/sudoers.c:365 +#: plugins/sudoers/sudoers.c:663 plugins/sudoers/sudoers.c:749 +#: plugins/sudoers/sudoers.c:793 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sudoreplay.c:472 plugins/sudoers/sudoreplay.c:668 +#: plugins/sudoers/sudoreplay.c:780 plugins/sudoers/sudoreplay.c:820 +#: plugins/sudoers/sudoreplay.c:829 plugins/sudoers/sudoreplay.c:839 +#: plugins/sudoers/sudoreplay.c:847 plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:1007 plugins/sudoers/sudoreplay.c:1011 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:188 +#: plugins/sudoers/testsudoers.c:215 plugins/sudoers/testsudoers.c:232 +#: plugins/sudoers/timestamp.c:390 plugins/sudoers/timestamp.c:426 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:147 +#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:213 +#: plugins/sudoers/visudo.c:298 plugins/sudoers/visudo.c:304 +#: plugins/sudoers/visudo.c:434 plugins/sudoers/visudo.c:980 +#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1120 toke.l:785 +#: toke.l:806 toke.l:816 toke.l:924 toke.l:1082 +#, c-format +msgid "%s: %s" +msgstr "%s: %s" + +#: plugins/sudoers/alias.c:132 #, c-format msgid "Alias `%s' already defined" -msgstr "Aliaset «%s» er allerede valgt" +msgstr "Alias «%s» er allerede definert" -#: plugins/sudoers/auth/bsdauth.c:75 +#: plugins/sudoers/auth/bsdauth.c:68 #, c-format msgid "unable to get login class for user %s" msgstr "klarte ikke å hente innloggingsklasse for brukeren %s" -#: plugins/sudoers/auth/bsdauth.c:80 +#: plugins/sudoers/auth/bsdauth.c:73 msgid "unable to begin bsd authentication" msgstr "klarte ikke å starte bsd-autentisering" -#: plugins/sudoers/auth/bsdauth.c:88 +#: plugins/sudoers/auth/bsdauth.c:81 msgid "invalid authentication type" msgstr "ugyldig autentiseringstype" -#: plugins/sudoers/auth/bsdauth.c:97 +#: plugins/sudoers/auth/bsdauth.c:90 msgid "unable to initialize BSD authentication" msgstr "klarte ikke å starte opp BSD-autentisering" -#: plugins/sudoers/auth/fwtk.c:59 +#: plugins/sudoers/auth/fwtk.c:52 msgid "unable to read fwtk config" msgstr "klarte ikke å lese fwtk-innstillinger" -#: plugins/sudoers/auth/fwtk.c:64 +#: plugins/sudoers/auth/fwtk.c:57 msgid "unable to connect to authentication server" msgstr "klarte ikke å koble til autentiseringstjeneren" -#: plugins/sudoers/auth/fwtk.c:70 plugins/sudoers/auth/fwtk.c:94 -#: plugins/sudoers/auth/fwtk.c:127 +#: plugins/sudoers/auth/fwtk.c:63 plugins/sudoers/auth/fwtk.c:87 +#: plugins/sudoers/auth/fwtk.c:121 msgid "lost connection to authentication server" msgstr "tilkoblingen til autentiseringstjeneren ble brutt" -#: plugins/sudoers/auth/fwtk.c:74 +#: plugins/sudoers/auth/fwtk.c:67 #, c-format msgid "" "authentication server error:\n" @@ -92,155 +219,155 @@ "det oppstod en feil med autentiseringstjeneren:\n" "%s" -#: plugins/sudoers/auth/kerb5.c:116 +#: plugins/sudoers/auth/kerb5.c:111 #, c-format msgid "%s: unable to convert principal to string ('%s'): %s" msgstr "%s: klarte ikke å konvertere fullmaktsgiver til streng («%s»). %s" -#: plugins/sudoers/auth/kerb5.c:158 +#: plugins/sudoers/auth/kerb5.c:161 #, c-format msgid "%s: unable to parse '%s': %s" msgstr "%s: klarte ikke å tolke «%s». %s" -#: plugins/sudoers/auth/kerb5.c:167 +#: plugins/sudoers/auth/kerb5.c:170 #, c-format msgid "%s: unable to resolve credential cache: %s" msgstr "%s: klarte ikke å slå opp i akkreditiv-hurtiglageret. %s" -#: plugins/sudoers/auth/kerb5.c:214 +#: plugins/sudoers/auth/kerb5.c:217 #, c-format msgid "%s: unable to allocate options: %s" msgstr "%s: klarte ikke å tildele innstillinger. %s" -#: plugins/sudoers/auth/kerb5.c:229 +#: plugins/sudoers/auth/kerb5.c:232 #, c-format msgid "%s: unable to get credentials: %s" msgstr "%s: klarte ikke å hente akkreditiver. %s" -#: plugins/sudoers/auth/kerb5.c:242 +#: plugins/sudoers/auth/kerb5.c:245 #, c-format msgid "%s: unable to initialize credential cache: %s" msgstr "%s: klarte ikke å starte opp akkreditiv-hurtiglageret. %s" -#: plugins/sudoers/auth/kerb5.c:245 +#: plugins/sudoers/auth/kerb5.c:248 #, c-format msgid "%s: unable to store credential in cache: %s" msgstr "%s: klarte ikke å lagre akkreditiv i hurtiglager. %s" -#: plugins/sudoers/auth/kerb5.c:309 +#: plugins/sudoers/auth/kerb5.c:312 #, c-format msgid "%s: unable to get host principal: %s" msgstr "%s: klarte ikke å hente vertens fullmaktsgiver. %s" -#: plugins/sudoers/auth/kerb5.c:323 +#: plugins/sudoers/auth/kerb5.c:326 #, c-format msgid "%s: Cannot verify TGT! Possible attack!: %s" msgstr "%s: Klarte ikke å bekrefte TGT! Dette kan være et tegn på at du er under angrep! %s" -#: plugins/sudoers/auth/pam.c:98 +#: plugins/sudoers/auth/pam.c:92 msgid "unable to initialize PAM" msgstr "klarte ikke å starte opp PAM" -#: plugins/sudoers/auth/pam.c:149 +#: plugins/sudoers/auth/pam.c:164 msgid "account validation failure, is your account locked?" msgstr "det oppstod en feil ved validering av brukerkonto. Er kontoen din sperret?" -#: plugins/sudoers/auth/pam.c:153 +#: plugins/sudoers/auth/pam.c:168 msgid "Account or password is expired, reset your password and try again" msgstr "Kontoen eller passordet er utgått. Tilbakestill passordet ditt og prøv igjen" -#: plugins/sudoers/auth/pam.c:161 +#: plugins/sudoers/auth/pam.c:176 #, c-format msgid "unable to change expired password: %s" msgstr "klarte ikke å endre et utgått passord. %s" -#: plugins/sudoers/auth/pam.c:166 +#: plugins/sudoers/auth/pam.c:181 msgid "Password expired, contact your system administrator" msgstr "Passordet er utgått. Kontakt systemadministratoren" -#: plugins/sudoers/auth/pam.c:170 +#: plugins/sudoers/auth/pam.c:185 msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator" msgstr "Kontoen er utgått, eller PAM-innstillingene mangler en «account»-del for sudo. Kontakt systemadministratoren" -#: plugins/sudoers/auth/pam.c:187 +#: plugins/sudoers/auth/pam.c:199 #, c-format msgid "PAM authentication error: %s" msgstr "Feil ved PAM-autentisering. %s" -#: plugins/sudoers/auth/rfc1938.c:103 plugins/sudoers/visudo.c:228 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:218 #, c-format msgid "you do not exist in the %s database" msgstr "du finnes ikke i %s-databasen" -#: plugins/sudoers/auth/securid5.c:80 +#: plugins/sudoers/auth/securid5.c:73 msgid "failed to initialise the ACE API library" msgstr "klarte ikke å starte opp ACE API-biblioteket" -#: plugins/sudoers/auth/securid5.c:106 +#: plugins/sudoers/auth/securid5.c:99 msgid "unable to contact the SecurID server" msgstr "klarte ikke å kontakte SecurID-tjeneren" -#: plugins/sudoers/auth/securid5.c:115 +#: plugins/sudoers/auth/securid5.c:108 msgid "User ID locked for SecurID Authentication" msgstr "Bruker-ID-en er sperret fra SecurID-autentisering" -#: plugins/sudoers/auth/securid5.c:119 plugins/sudoers/auth/securid5.c:170 +#: plugins/sudoers/auth/securid5.c:112 plugins/sudoers/auth/securid5.c:163 msgid "invalid username length for SecurID" msgstr "lengden på brukernavnet er ugyldig for SecurID" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:175 +#: plugins/sudoers/auth/securid5.c:116 plugins/sudoers/auth/securid5.c:168 msgid "invalid Authentication Handle for SecurID" msgstr "ugyldig autentiseringshåndtak for SecurID" -#: plugins/sudoers/auth/securid5.c:127 +#: plugins/sudoers/auth/securid5.c:120 msgid "SecurID communication failed" msgstr "Det oppstod en feil under kommunikasjon med SecurID" -#: plugins/sudoers/auth/securid5.c:131 plugins/sudoers/auth/securid5.c:214 +#: plugins/sudoers/auth/securid5.c:124 plugins/sudoers/auth/securid5.c:211 msgid "unknown SecurID error" msgstr "ukjent SecurID-feil" -#: plugins/sudoers/auth/securid5.c:165 +#: plugins/sudoers/auth/securid5.c:158 msgid "invalid passcode length for SecurID" msgstr "kodelengden er ugyldig for SecurID" -#: plugins/sudoers/auth/sia.c:123 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:125 msgid "unable to initialize SIA session" msgstr "kalrte ikke å starte opp SIA-økt" -#: plugins/sudoers/auth/sudo_auth.c:115 +#: plugins/sudoers/auth/sudo_auth.c:126 msgid "invalid authentication methods" msgstr "ugyldige autentiseringsmetoder" -#: plugins/sudoers/auth/sudo_auth.c:117 +#: plugins/sudoers/auth/sudo_auth.c:128 msgid "Invalid authentication methods compiled into sudo! You may not mix standalone and non-standalone authentication." msgstr "Din installasjon av sudo har ugyldige autentiseringsmetoder! Du kan ikke blande selvgående og tjeneravhengige autentiseringsmetoder." -#: plugins/sudoers/auth/sudo_auth.c:203 plugins/sudoers/auth/sudo_auth.c:252 +#: plugins/sudoers/auth/sudo_auth.c:224 plugins/sudoers/auth/sudo_auth.c:274 msgid "no authentication methods" msgstr "fant ingen autentiseringsmetoder" -#: plugins/sudoers/auth/sudo_auth.c:205 +#: plugins/sudoers/auth/sudo_auth.c:226 msgid "There are no authentication methods compiled into sudo! If you want to turn off authentication, use the --disable-authentication configure option." msgstr "Din installasjon av sudo har ingen autentiseringsmetoder tilgjengelig! Bruk valget «--disable-authentication» hvis du vil skru av autentisering." -#: plugins/sudoers/auth/sudo_auth.c:254 +#: plugins/sudoers/auth/sudo_auth.c:276 msgid "Unable to initialize authentication methods." msgstr "Klarte ikke å starte opp autentiseringsmetoder." -#: plugins/sudoers/auth/sudo_auth.c:412 +#: plugins/sudoers/auth/sudo_auth.c:442 msgid "Authentication methods:" msgstr "Autentiseringsmetoder:" -#: plugins/sudoers/bsm_audit.c:95 plugins/sudoers/bsm_audit.c:184 +#: plugins/sudoers/bsm_audit.c:111 plugins/sudoers/bsm_audit.c:200 msgid "Could not determine audit condition" msgstr "Klarte ikke å finne revisjonsstatus" -#: plugins/sudoers/bsm_audit.c:156 plugins/sudoers/bsm_audit.c:244 +#: plugins/sudoers/bsm_audit.c:172 plugins/sudoers/bsm_audit.c:260 msgid "unable to commit audit record" msgstr "klarte ikke å kjøre revisjonsoppføring" -#: plugins/sudoers/check.c:197 +#: plugins/sudoers/check.c:252 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -260,15 +387,15 @@ " #3) Makt medfører plikt og ansvar.\n" "\n" -#: plugins/sudoers/check.c:240 plugins/sudoers/check.c:250 -#: plugins/sudoers/sudoers.c:599 plugins/sudoers/sudoers.c:628 +#: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 +#: plugins/sudoers/sudoers.c:699 plugins/sudoers/sudoers.c:728 #, c-format msgid "unknown uid: %u" msgstr "uid-en «%u» er ukjent" -#: plugins/sudoers/check.c:245 plugins/sudoers/policy.c:683 -#: plugins/sudoers/sudoers.c:955 plugins/sudoers/testsudoers.c:212 -#: plugins/sudoers/testsudoers.c:364 +#: plugins/sudoers/check.c:300 plugins/sudoers/policy.c:774 +#: plugins/sudoers/sudoers.c:1095 plugins/sudoers/testsudoers.c:206 +#: plugins/sudoers/testsudoers.c:361 #, c-format msgid "unknown user: %s" msgstr "brukeren %s er ukjent" @@ -317,535 +444,550 @@ msgstr "Send e-post hvis brukeren ikke har lov til å kjøre en kommando" #: plugins/sudoers/def_data.c:67 +msgid "Send mail if the user tries to run a command" +msgstr "Send e-post hvis brukeren prøver å kjøre en kommando" + +#: plugins/sudoers/def_data.c:71 msgid "Use a separate timestamp for each user/tty combo" msgstr "Bruk et separat tidsstempel for hver kombinasjon av bruker og tty" -#: plugins/sudoers/def_data.c:71 +#: plugins/sudoers/def_data.c:75 msgid "Lecture user the first time they run sudo" msgstr "Gi brukere en moralpreken første gang de kjører sudo" -#: plugins/sudoers/def_data.c:75 +#: plugins/sudoers/def_data.c:79 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Fil som inneholder sudo-moralpreken: %s" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:83 msgid "Require users to authenticate by default" msgstr "Krev at brukere skal autentisere seg som standard" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:87 msgid "Root may run sudo" -msgstr "Rotbrukeren kan kjøre sudo" +msgstr "Rotbruker kan kjøre sudo" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:91 msgid "Log the hostname in the (non-syslog) log file" msgstr "Loggfør vertsnavnet i (ikke-syslog)-loggfila" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:95 msgid "Log the year in the (non-syslog) log file" msgstr "Loggfør året i (ikke-syslog)-loggfila" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:99 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Start et skall hvis sudo kjøres uten argumenter" -#: plugins/sudoers/def_data.c:99 +#: plugins/sudoers/def_data.c:103 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Velg målbrukerens $HOME når et skall startes med «-s»" -#: plugins/sudoers/def_data.c:103 +#: plugins/sudoers/def_data.c:107 msgid "Always set $HOME to the target user's home directory" -msgstr "Velg alltid målbrukerens hjemmemappe som $HOME" +msgstr "Bruk alltid målbrukerens hjemmemappe som $HOME" -#: plugins/sudoers/def_data.c:107 +#: plugins/sudoers/def_data.c:111 msgid "Allow some information gathering to give useful error messages" msgstr "Tillat informasjonsinnhenting for å gjøre feilmeldingene nyttige" -#: plugins/sudoers/def_data.c:111 +#: plugins/sudoers/def_data.c:115 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Krev fullstendige vertsnavn i sudoers-fila" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:119 msgid "Insult the user when they enter an incorrect password" msgstr "Send brukere en fornærmelsestekst når de oppgir feil passord" -#: plugins/sudoers/def_data.c:119 +#: plugins/sudoers/def_data.c:123 msgid "Only allow the user to run sudo if they have a tty" msgstr "Bare tillat brukere å kjøre sudo hvis de bruker en tty" -#: plugins/sudoers/def_data.c:123 +#: plugins/sudoers/def_data.c:127 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo tar hensyn til EDITOR-miljøvariabelen" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:131 msgid "Prompt for root's password, not the users's" -msgstr "Spør etter rotbrukerens passord, i stedet for brukernes" +msgstr "Spør etter rotbrukerens passord, i stedet for brukerens eget passord" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:135 msgid "Prompt for the runas_default user's password, not the users's" -msgstr "Spør etter «runas_default»-brukerens passord, i stedet for brukernes" +msgstr "Spør etter «runas_default»-brukerens passord, i stedet for eget passord" -#: plugins/sudoers/def_data.c:135 +#: plugins/sudoers/def_data.c:139 msgid "Prompt for the target user's password, not the users's" -msgstr "Spør etter målbrukerens passord, i stedet for brukernes" +msgstr "Spør etter målbrukerens passord, i stedet for eget passord" -#: plugins/sudoers/def_data.c:139 +#: plugins/sudoers/def_data.c:143 msgid "Apply defaults in the target user's login class if there is one" msgstr "Bruk standardverdier i målbrukerens innloggingsklasse, hvis den finnes" -#: plugins/sudoers/def_data.c:143 +#: plugins/sudoers/def_data.c:147 msgid "Set the LOGNAME and USER environment variables" msgstr "Gi verdier til miljøvariablene «LOGNAME» og «USER»" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:151 msgid "Only set the effective uid to the target user, not the real uid" -msgstr "Velg målbrukeren som effektiv uid, i stedet for faktisk uid" +msgstr "Velg målbrukers uid som effektiv uid, i stedet for faktisk uid" -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:155 msgid "Don't initialize the group vector to that of the target user" msgstr "Ikke start opp målbrukerens gruppevektor" -#: plugins/sudoers/def_data.c:155 +#: plugins/sudoers/def_data.c:159 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Hvilken lengde linjer i loggfiler skal pakkes ned til (bruk 0 for å deaktivere pakking): %u" -#: plugins/sudoers/def_data.c:159 +#: plugins/sudoers/def_data.c:163 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Tidsavbrudd for autentiseringstidsstempel: %.1f minutter" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:167 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Tidsavbrudd for passordetterspørsel: %.1f minutter" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:171 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Antall forsøk på å skrive inn passord: %u" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:175 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" -msgstr "U-maske som skal brukes, eller 0777 for å bruke brukerens maske: 0%o" +msgstr "U-maske som skal brukes, eller 0777 for å bruke brukerens egen: 0%o" -#: plugins/sudoers/def_data.c:175 +#: plugins/sudoers/def_data.c:179 #, c-format msgid "Path to log file: %s" msgstr "Sti til loggfil: %s" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:183 #, c-format msgid "Path to mail program: %s" msgstr "Sti til e-postprogram: %s" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:187 #, c-format msgid "Flags for mail program: %s" msgstr "Valg for e-postprogram: %s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:191 #, c-format msgid "Address to send mail to: %s" msgstr "Hvilken adresse det skal sendes e-post til: %s" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:195 #, c-format msgid "Address to send mail from: %s" msgstr "Hvilken adresse e-posten skal sendes fra: %s" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:199 #, c-format msgid "Subject line for mail messages: %s" msgstr "Emnelinje i e-postmeldinger: %s" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:203 #, c-format msgid "Incorrect password message: %s" msgstr "Melding om feil passord: %s" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:207 #, c-format msgid "Path to lecture status dir: %s" msgstr "Sti til mappe for moralpreken-status: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:211 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Sti til mappe for autentiseringstidsstempel: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:215 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Eieren av mappa for autentiseringstidsstempel: %s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:219 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Brukerne i denne gruppa fritas fra passord- og PATH-krav: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:223 #, c-format msgid "Default password prompt: %s" msgstr "Standard passord-ledetekst: %s" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:227 msgid "If set, passprompt will override system prompt in all cases." msgstr "Hvis dette er valgt, overstyrer passordledeteksten alltid systemledeteksten" -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:231 #, c-format msgid "Default user to run commands as: %s" msgstr "Standard bruker som kjører kommandoer: %s" -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:235 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Verdi som overstyrer brukerens $PATH: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:239 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Filbane til tekstbehandleren som visudo skal bruke: %s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:243 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Når pseudokommandoen «list» skal kreve passord: %s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:247 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Når pseudokommandoen «verify» skal kreve passord: %s" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:251 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Last inn prøvekjøringsfunksjonene som ligger i biblioteket «sudo_noexec»" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:255 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Om lokal sudoers-fil skal ignoreres når en LDAP er aktiv" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:259 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Fildeskriptorne >= %d lukkes før en kommando blir kjørt" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:263 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "Hvis dette er valgt, har brukerne mulighet til å overstyre «closefrom»-verdien med valget «-C»" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:267 msgid "Allow users to set arbitrary environment variables" msgstr "Tillat brukere å velge arbitrære miljøvariabler" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:271 msgid "Reset the environment to a default set of variables" msgstr "Tilbakestill brukermiljøet til et sett med standardvariabler" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to check for sanity:" msgstr "Miljøvariabler som skal kontrolleres:" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to remove:" msgstr "Miljøvariabler som skal fjernes:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:283 msgid "Environment variables to preserve:" msgstr "Miljøvariabler som skal beholdes:" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:287 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "SELinux-rolle som skal brukes i ny sikkerhetskontekst: %s" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:291 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "SELinux-type som skal brukes i ny sikkerhetskontekst: %s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:295 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Sti til sudo-spesifikk miljøfil: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:299 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Regioninnstilling som skal brukes når «sudoers» tolkes: %s" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:303 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Tillat sudo å spørre etter et passord som - hvis skrevet inn - blir synlig på skjermen" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:307 msgid "Provide visual feedback at the password prompt when there is user input" -msgstr "Gi visuell respons i passordforespørselen når brukeren skriver" +msgstr "Gi visuell respons når brukere skriver inn passord" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:311 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Bruk raskere joker-søking som er mindre presis (og som ikke søker i filsystemet)" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:315 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "U-maska som er valgt i «sudoers»-fila overstyrer brukerens maske, selv hvis «sudoers»-maska åpner for tilgang som brukermaska ikke gjør" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:319 msgid "Log user's input for the command being run" msgstr "Loggfør brukerens inndata i kommandoen som kjøres" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:323 msgid "Log the output of the command being run" msgstr "Loggfør utskrift fra kommandoen som kjøres" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:327 msgid "Compress I/O logs using zlib" msgstr "Komprimer inn- og utdatalogger ved bruk av «zlib»" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:331 msgid "Always run commands in a pseudo-tty" msgstr "Kjør alltid kommandoer i en pseudo-tty" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:335 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Støttetillegg for grupper som ikke er Unix-grupper: %s" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:339 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Mappe hvor inn- og utdatalogger skal lagres: %s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:343 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Fil hvor inn- og utdatalogger skal lagres: %s" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:347 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Legg til en oppføring i utmp-/utmpx-fila når en pty tildeles" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:351 msgid "Set the user in utmp to the runas user, not the invoking user" -msgstr "Kjør kommandoer som brukeren i utmp, i stedet for brukeren som kjører kommandoene" +msgstr "Kjør kommandoer som utmp-bruker, i stedet for brukeren som skriver inn kommando" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:355 msgid "Set of permitted privileges" msgstr "Sett med tillatte privilegier" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:359 msgid "Set of limit privileges" msgstr "Sett med begrensningsprivilegier" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:363 msgid "Run commands on a pty in the background" msgstr "Kjør kommandoer på en pty i bakgrunnen" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:367 msgid "PAM service name to use" msgstr "PAM-tjenestenavn som skal brukes" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:371 msgid "PAM service name to use for login shells" msgstr "PAM-tjenestenavn som skal brukes til innloggingsskall" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:375 msgid "Attempt to establish PAM credentials for the target user" -msgstr "Prøv å sette opp PAM-akkreditiver for målbrukeren" +msgstr "Prøv å sette opp PAM-akkreditiver for målbruker" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:379 msgid "Create a new PAM session for the command to run in" msgstr "Lag en ny PAM-økt som kommandoen kjøres i" -#: plugins/sudoers/def_data.c:379 +#: plugins/sudoers/def_data.c:383 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Høyeste tillatte sekvensnummer i inn-/utdatalogg: %u" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:387 msgid "Enable sudoers netgroup support" msgstr "Slå på støtte for sudoers-nettgruppe" -#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:601 -#: plugins/sudoers/visudo_json.c:642 plugins/sudoers/visudo_json.c:677 +#: plugins/sudoers/def_data.c:391 +msgid "Check parent directories for writability when editing files with sudoedit" +msgstr "Kontroller skrivetillatelse til foreldermapper ved redigering av filer med sudoedit" + +#: plugins/sudoers/def_data.c:395 +msgid "Follow symbolic links when editing files with sudoedit" +msgstr "Følg symbolske lenker ved redigering av filer med sudoedit" + +#: plugins/sudoers/def_data.c:399 +msgid "Query the group plugin for unknown system groups" +msgstr "Spør gruppetillegget om ukjente systemgrupper" + +#: plugins/sudoers/def_data.c:403 +msgid "Match netgroups based on the entire tuple: user, host and domain" +msgstr "Kontroller nettgrupper basert på både bruker, vert og domene" + +#: plugins/sudoers/defaults.c:199 plugins/sudoers/defaults.c:610 +#: plugins/sudoers/visudo_json.c:633 plugins/sudoers/visudo_json.c:668 #, c-format msgid "unknown defaults entry `%s'" -msgstr "standardoppføringa «%s» er ukjent" +msgstr "«%s» er en ukjent standardoppføring" -#: plugins/sudoers/defaults.c:218 plugins/sudoers/defaults.c:228 -#: plugins/sudoers/defaults.c:248 plugins/sudoers/defaults.c:261 -#: plugins/sudoers/defaults.c:274 plugins/sudoers/defaults.c:287 -#: plugins/sudoers/defaults.c:300 plugins/sudoers/defaults.c:320 -#: plugins/sudoers/defaults.c:330 +#: plugins/sudoers/defaults.c:207 plugins/sudoers/defaults.c:217 +#: plugins/sudoers/defaults.c:241 plugins/sudoers/defaults.c:256 +#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 +#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 +#: plugins/sudoers/defaults.c:325 #, c-format msgid "value `%s' is invalid for option `%s'" -msgstr "verdien «%s» er ugyldig for valget «%s»" +msgstr "«%s» er en ugyldig verdi for valget «%s»" -#: plugins/sudoers/defaults.c:221 plugins/sudoers/defaults.c:231 -#: plugins/sudoers/defaults.c:239 plugins/sudoers/defaults.c:256 -#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 -#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 -#: plugins/sudoers/defaults.c:326 +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:220 +#: plugins/sudoers/defaults.c:228 plugins/sudoers/defaults.c:251 +#: plugins/sudoers/defaults.c:264 plugins/sudoers/defaults.c:277 +#: plugins/sudoers/defaults.c:290 plugins/sudoers/defaults.c:310 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "no value specified for `%s'" -msgstr "du har ikke gitt valget «%s» en verdi" +msgstr "«%s» har ingen verdi" -#: plugins/sudoers/defaults.c:244 +#: plugins/sudoers/defaults.c:233 #, c-format msgid "values for `%s' must start with a '/'" -msgstr "verdier for «%s» må starte på «/»" +msgstr "verdier av «%s» må begynne med «/»" -#: plugins/sudoers/defaults.c:306 +#: plugins/sudoers/defaults.c:301 #, c-format msgid "option `%s' does not take a value" -msgstr "valget «%s» kan ikke gis en verdi" +msgstr "«%s» kan ikke ha en verdi" -#: plugins/sudoers/env.c:276 plugins/sudoers/env.c:283 -#: plugins/sudoers/env.c:386 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:918 plugins/sudoers/policy.c:461 -#: plugins/sudoers/policy.c:470 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:708 plugins/sudoers/testsudoers.c:242 -#: plugins/sudoers/toke_util.c:174 +#: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 +#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:450 +#: plugins/sudoers/ldap.c:540 plugins/sudoers/ldap.c:1166 +#: plugins/sudoers/ldap.c:1388 plugins/sudoers/ldap.c:1704 +#: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:929 +#: plugins/sudoers/policy.c:511 plugins/sudoers/policy.c:520 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:815 +#: plugins/sudoers/testsudoers.c:236 plugins/sudoers/toke_util.c:162 #, c-format msgid "internal error, %s overflow" msgstr "intern feil: %s er full" -#: plugins/sudoers/env.c:359 +#: plugins/sudoers/env.c:377 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: envp er korrupt (lengde samsvarer ikke)" -#: plugins/sudoers/env.c:1054 +#: plugins/sudoers/env.c:1083 +msgid "unable to rebuild the environment" +msgstr "klarte ikke å bygge opp miljøet på nytt" + +#: plugins/sudoers/env.c:1157 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "du har ikke tillatelse til å bestemme følgende miljøvariabler: %s" -#: plugins/sudoers/group_plugin.c:94 +#: plugins/sudoers/group_plugin.c:86 #, c-format msgid "%s must be owned by uid %d" msgstr "%s må eies av uid %d" -#: plugins/sudoers/group_plugin.c:98 +#: plugins/sudoers/group_plugin.c:90 #, c-format msgid "%s must only be writable by owner" msgstr "%s kan ikke gi skrivetillatelse til andre enn eieren" -#: plugins/sudoers/group_plugin.c:105 plugins/sudoers/sssd.c:251 +#: plugins/sudoers/group_plugin.c:98 plugins/sudoers/sssd.c:331 #, c-format msgid "unable to load %s: %s" msgstr "klarte ikke å laste inn %s. %s" -#: plugins/sudoers/group_plugin.c:110 +#: plugins/sudoers/group_plugin.c:104 #, c-format msgid "unable to find symbol \"group_plugin\" in %s" msgstr "fant ikke symbolet «group_plugin» i %s" -#: plugins/sudoers/group_plugin.c:115 +#: plugins/sudoers/group_plugin.c:109 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: versjon %d av gruppetillegget passer ikke (forventet versjon %d)" -#: plugins/sudoers/interfaces.c:116 +#: plugins/sudoers/interfaces.c:117 msgid "Local IP address and netmask pairs:\n" msgstr "Lokale par av IP-adresser og nettverksmasker:\n" -#: plugins/sudoers/iolog.c:101 plugins/sudoers/iolog.c:119 -#: plugins/sudoers/timestamp.c:233 +#: plugins/sudoers/iolog.c:92 plugins/sudoers/iolog.c:110 +#: plugins/sudoers/timestamp.c:169 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "«%s» finnes, men er ikke en mappe (0%o)" -#: plugins/sudoers/iolog.c:112 plugins/sudoers/iolog.c:133 -#: plugins/sudoers/iolog.c:140 plugins/sudoers/timestamp.c:227 -#: plugins/sudoers/timestamp.c:248 +#: plugins/sudoers/iolog.c:103 plugins/sudoers/iolog.c:124 +#: plugins/sudoers/iolog.c:131 plugins/sudoers/timestamp.c:163 +#: plugins/sudoers/timestamp.c:184 #, c-format msgid "unable to mkdir %s" -msgstr "klarte ikke å utføre «mkdir %s»" +msgstr "klarte ikke å utføre mkdir %s" -#: plugins/sudoers/iolog.c:209 plugins/sudoers/sudoers.c:764 -#: plugins/sudoers/sudoreplay.c:348 plugins/sudoers/sudoreplay.c:819 -#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/timestamp.c:357 -#: plugins/sudoers/visudo.c:832 plugins/sudoers/visudo_json.c:1025 -#: plugins/sudoers/visudo_json.c:1038 +#: plugins/sudoers/iolog.c:200 plugins/sudoers/sudoers.c:871 +#: plugins/sudoers/sudoreplay.c:300 plugins/sudoers/sudoreplay.c:769 +#: plugins/sudoers/sudoreplay.c:973 plugins/sudoers/timestamp.c:399 +#: plugins/sudoers/visudo.c:904 plugins/sudoers/visudo_json.c:1012 +#: plugins/sudoers/visudo_json.c:1025 #, c-format msgid "unable to open %s" msgstr "klarte ikke å åpne %s" -#: plugins/sudoers/iolog.c:250 plugins/sudoers/sudoers.c:768 -#: plugins/sudoers/sudoreplay.c:1123 +#: plugins/sudoers/iolog.c:241 plugins/sudoers/sudoers.c:875 +#: plugins/sudoers/sudoreplay.c:1084 #, c-format msgid "unable to read %s" msgstr "klarte ikke å lese %s" -#: plugins/sudoers/iolog.c:282 plugins/sudoers/sudoreplay.c:588 -#: plugins/sudoers/timestamp.c:186 plugins/sudoers/timestamp.c:189 +#: plugins/sudoers/iolog.c:277 plugins/sudoers/sudoreplay.c:550 +#: plugins/sudoers/timestamp.c:298 plugins/sudoers/timestamp.c:301 #, c-format msgid "unable to write to %s" msgstr "klarte ikke å skrive til %s" -#: plugins/sudoers/iolog.c:347 plugins/sudoers/iolog.c:545 +#: plugins/sudoers/iolog.c:342 plugins/sudoers/iolog.c:540 #, c-format msgid "unable to create %s" msgstr "klarte ikke å opprette %s" -#: plugins/sudoers/ldap.c:406 +#: plugins/sudoers/iolog.c:723 +#, c-format +msgid "%s: internal error, file index %d not open" +msgstr "%s: intern feil. Filindeks %d er ikke åpent" + +#: plugins/sudoers/ldap.c:428 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: portnummeret er for stort" -#: plugins/sudoers/ldap.c:431 -msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" -msgstr "sudo_ldap_conf_add_ports: ikke nok lagringsplass for å utvide vertens hurtiglager" - -#: plugins/sudoers/ldap.c:464 +#: plugins/sudoers/ldap.c:488 #, c-format msgid "unsupported LDAP uri type: %s" -msgstr "LDAP-ens nettadressetype «%s» støttes ikke" +msgstr "LDAP-ens adressetype %s støttes ikke" -#: plugins/sudoers/ldap.c:495 +#: plugins/sudoers/ldap.c:515 msgid "unable to mix ldap and ldaps URIs" msgstr "du kan ikke blande ldap- og ldaps-nettadresser" -#: plugins/sudoers/ldap.c:499 plugins/sudoers/ldap.c:532 +#: plugins/sudoers/ldap.c:519 plugins/sudoers/ldap.c:555 msgid "starttls not supported when using ldaps" msgstr "starttls støttes ikke når du bruker ldaps" -#: plugins/sudoers/ldap.c:517 -msgid "sudo_ldap_parse_uri: out of space building hostbuf" -msgstr "sudo_ldap_parse_uri: ikke nok lagringsplass til å bygge opp vertens hurtiglager" - -#: plugins/sudoers/ldap.c:599 +#: plugins/sudoers/ldap.c:626 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "klarte ikke å starte opp databasen «%s» for SSL-sertifikater og -nøkler" -#: plugins/sudoers/ldap.c:602 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "du må velge TLS_CERT i «%s» for å bruke SSL" -#: plugins/sudoers/ldap.c:1093 +#: plugins/sudoers/ldap.c:1152 msgid "unable to get GMT time" msgstr "klarte ikke å hente GMT-tid" -#: plugins/sudoers/ldap.c:1099 +#: plugins/sudoers/ldap.c:1158 msgid "unable to format timestamp" msgstr "klarte ikke å formatere tidsstempel" -#: plugins/sudoers/ldap.c:1107 -msgid "unable to build time filter" -msgstr "klarte ikke å bygge tidsfilter" - -#: plugins/sudoers/ldap.c:1326 -msgid "sudo_ldap_build_pass1 allocation mismatch" -msgstr "sudo_ldap_build_pass1 samsvar ikke ved tildeling" - -#: plugins/sudoers/ldap.c:1469 +#: plugins/sudoers/ldap.c:1853 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:1963 +#: plugins/sudoers/ldap.c:2394 #, c-format msgid "" "\n" @@ -854,7 +996,7 @@ "\n" "LDAP-rolle: %s\n" -#: plugins/sudoers/ldap.c:1965 +#: plugins/sudoers/ldap.c:2396 #, c-format msgid "" "\n" @@ -863,108 +1005,108 @@ "\n" "LDAP-role: UKJENT\n" -#: plugins/sudoers/ldap.c:2012 +#: plugins/sudoers/ldap.c:2443 #, c-format msgid " Order: %s\n" msgstr " Sorter: %s\n" -#: plugins/sudoers/ldap.c:2020 plugins/sudoers/parse.c:512 -#: plugins/sudoers/sssd.c:1297 +#: plugins/sudoers/ldap.c:2451 plugins/sudoers/parse.c:555 +#: plugins/sudoers/sssd.c:1429 #, c-format msgid " Commands:\n" msgstr " Kommandoer:\n" -#: plugins/sudoers/ldap.c:2570 +#: plugins/sudoers/ldap.c:3015 #, c-format msgid "unable to initialize LDAP: %s" msgstr "klarte ikke å starte opp LDAP. %s" -#: plugins/sudoers/ldap.c:2612 +#: plugins/sudoers/ldap.c:3051 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "start_tls er valgt, men LDAP-bibliotekene støtter hverken «ldap_start_tls_s()» eller «ldap_start_tls_s_np()»" -#: plugins/sudoers/ldap.c:2845 +#: plugins/sudoers/ldap.c:3305 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "sudoOrder-egenskapen «%s» er ugyldig" -#: plugins/sudoers/linux_audit.c:57 +#: plugins/sudoers/linux_audit.c:52 msgid "unable to open audit system" msgstr "klarte ikke å åpne revisjonssystemet" -#: plugins/sudoers/linux_audit.c:94 +#: plugins/sudoers/linux_audit.c:93 msgid "unable to send audit message" msgstr "klarte ikke å sende revisjonsmelding" -#: plugins/sudoers/logging.c:134 +#: plugins/sudoers/logging.c:106 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: plugins/sudoers/logging.c:162 +#: plugins/sudoers/logging.c:134 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s : (kommando fortsetter) %s" -#: plugins/sudoers/logging.c:187 +#: plugins/sudoers/logging.c:159 #, c-format msgid "unable to open log file: %s: %s" msgstr "klarte ikke å åpne loggfila «%s». %s" -#: plugins/sudoers/logging.c:190 +#: plugins/sudoers/logging.c:162 #, c-format msgid "unable to lock log file: %s: %s" msgstr "klarte ikke å låse loggfila «%s». %s" -#: plugins/sudoers/logging.c:242 +#: plugins/sudoers/logging.c:211 msgid "No user or host" msgstr "Ingen bruker eller vert" -#: plugins/sudoers/logging.c:244 +#: plugins/sudoers/logging.c:213 msgid "validation failure" msgstr "feil ved gyldighetssjekk" -#: plugins/sudoers/logging.c:251 +#: plugins/sudoers/logging.c:220 msgid "user NOT in sudoers" msgstr "brukeren er IKKE i sudoers" -#: plugins/sudoers/logging.c:253 +#: plugins/sudoers/logging.c:222 msgid "user NOT authorized on host" msgstr "brukeren er IKKE autorisert på verten" -#: plugins/sudoers/logging.c:255 +#: plugins/sudoers/logging.c:224 msgid "command not allowed" msgstr "denne kommandoen tillates ikke" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:259 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "%s er ikke i sudoers-fila. Denne hendelsen blir rapportert.\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:262 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "%s has ikke tillatelse til å kjøre sudo på %s. Denne hendelsen blir rapportert.\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:266 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Brukeren %s kan ikke kjøre sudo på %s.\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:269 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "Brukeren %s har ikke tillatelse til å kjøre «%s%s%s» som %s%s%s på %s.\n" -#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:407 -#: plugins/sudoers/sudoers.c:409 plugins/sudoers/sudoers.c:411 -#: plugins/sudoers/sudoers.c:413 plugins/sudoers/sudoers.c:1128 -#: plugins/sudoers/sudoers.c:1129 +#: plugins/sudoers/logging.c:306 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1222 +#: plugins/sudoers/sudoers.c:1224 #, c-format msgid "%s: command not found" -msgstr "%s: fant ikke kommandoen" +msgstr "%s: fant ikke kommando" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:403 +#: plugins/sudoers/logging.c:308 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring `%s' found in '.'\n" @@ -973,71 +1115,71 @@ "ignorerer «%s» som ble funnet i «.».\n" "Bruk «sudo ./%s» hvis dette er «%s»-programmet du prøver å kjøre." -#: plugins/sudoers/logging.c:353 +#: plugins/sudoers/logging.c:325 msgid "authentication failure" msgstr "feil ved autentisering" -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:351 msgid "a password is required" -msgstr "du må bruke et passord her" +msgstr "du må oppgi et passord" -#: plugins/sudoers/logging.c:446 plugins/sudoers/logging.c:501 +#: plugins/sudoers/logging.c:422 plugins/sudoers/logging.c:484 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "%u mislykket passordforsøk" msgstr[1] "%u mislykkede passordforsøk" -#: plugins/sudoers/logging.c:584 +#: plugins/sudoers/logging.c:572 msgid "unable to fork" -msgstr "klarte ikke å lage en kopi av prosessen" +msgstr "klarte ikke å kopiere prosess" -#: plugins/sudoers/logging.c:592 plugins/sudoers/logging.c:648 +#: plugins/sudoers/logging.c:580 plugins/sudoers/logging.c:640 #, c-format msgid "unable to fork: %m" -msgstr "klarte ikke å lage en kopi av prosessen. %m" +msgstr "klarte ikke å kopiere prosess. %m" -#: plugins/sudoers/logging.c:638 +#: plugins/sudoers/logging.c:630 #, c-format msgid "unable to open pipe: %m" msgstr "klarte ikke å åpne datarør. %m" -#: plugins/sudoers/logging.c:663 +#: plugins/sudoers/logging.c:655 #, c-format msgid "unable to dup stdin: %m" msgstr "klarte ikke å duplisere standard innkanal. %m" -#: plugins/sudoers/logging.c:698 +#: plugins/sudoers/logging.c:693 #, c-format msgid "unable to execute %s: %m" msgstr "klarte ikke å kjøre «%s». %m" -#: plugins/sudoers/match.c:627 +#: plugins/sudoers/match.c:616 #, c-format msgid "unsupported digest type %d for %s" msgstr "behandlingstype %d for %s støttes ikke" -#: plugins/sudoers/match.c:656 +#: plugins/sudoers/match.c:657 #, c-format msgid "%s: read error" msgstr "%s: lesefeil" -#: plugins/sudoers/match.c:670 +#: plugins/sudoers/match.c:692 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "behandlingen for %s (%s) er ikke i %s-skjemaet" -#: plugins/sudoers/parse.c:123 +#: plugins/sudoers/parse.c:114 #, c-format msgid "parse error in %s near line %d" msgstr "tolkningsfeil i %s ved linje %d" -#: plugins/sudoers/parse.c:126 +#: plugins/sudoers/parse.c:117 #, c-format msgid "parse error in %s" msgstr "tolkningsfeil i %s" -#: plugins/sudoers/parse.c:459 +#: plugins/sudoers/parse.c:502 #, c-format msgid "" "\n" @@ -1046,49 +1188,41 @@ "\n" "Oppføring i sudoers:\n" -#: plugins/sudoers/parse.c:460 +#: plugins/sudoers/parse.c:503 #, c-format msgid " RunAsUsers: " msgstr " Kjør som-brukere: " -#: plugins/sudoers/parse.c:474 +#: plugins/sudoers/parse.c:517 #, c-format msgid " RunAsGroups: " msgstr " Kjør som-grupper: " -#: plugins/sudoers/parse.c:483 +#: plugins/sudoers/parse.c:526 #, c-format msgid " Options: " msgstr " Valg: " -#: plugins/sudoers/policy.c:109 plugins/sudoers/policy.c:118 -#: plugins/sudoers/policy.c:127 plugins/sudoers/policy.c:151 -#: plugins/sudoers/policy.c:263 plugins/sudoers/policy.c:283 -#: plugins/sudoers/policy.c:292 plugins/sudoers/policy.c:322 -#: plugins/sudoers/policy.c:332 plugins/sudoers/policy.c:341 -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" +#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:253 +msgid "unable to parse network address list" +msgstr "klarte ikke å tolke nettverksadresse-liste" -#: plugins/sudoers/policy.c:569 plugins/sudoers/visudo.c:773 +#: plugins/sudoers/policy.c:659 plugins/sudoers/visudo.c:841 #, c-format msgid "unable to execute %s" msgstr "klarte ikke å kjøre %s" -#: plugins/sudoers/policy.c:701 +#: plugins/sudoers/policy.c:792 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Sudoers regeltillegg versjon %s\n" -#: plugins/sudoers/policy.c:703 +#: plugins/sudoers/policy.c:794 #, c-format msgid "Sudoers file grammar version %d\n" -msgstr "Sudoers grammatikkversjon %d\n" +msgstr "Sudoers-grammatikkversjon %d\n" -#: plugins/sudoers/policy.c:707 +#: plugins/sudoers/policy.c:798 #, c-format msgid "" "\n" @@ -1097,374 +1231,411 @@ "\n" "Sti til «sudoers»-fil: %s\n" -#: plugins/sudoers/policy.c:710 +#: plugins/sudoers/policy.c:801 #, c-format msgid "nsswitch path: %s\n" msgstr "Sti til «nsswitch»: %s\n" -#: plugins/sudoers/policy.c:712 +#: plugins/sudoers/policy.c:803 #, c-format msgid "ldap.conf path: %s\n" msgstr "Sti til «ldap.conf»: %s\n" -#: plugins/sudoers/policy.c:713 +#: plugins/sudoers/policy.c:804 #, c-format msgid "ldap.secret path: %s\n" msgstr "Stil til «ldap.secret»: %s\n" -#: plugins/sudoers/pwutil.c:149 +#: plugins/sudoers/policy.c:837 +#, c-format +msgid "unable to register hook of type %d (version %d.%d)" +msgstr "klarte ikke å tildele krok av typen %d (versjon %d.%d)" + +#: plugins/sudoers/pwutil.c:158 plugins/sudoers/pwutil.c:176 +#, c-format +msgid "unable to cache uid %u, out of memory" +msgstr "klarte ikke å hurtiglagre uid %u. Minnet er fullt" + +#: plugins/sudoers/pwutil.c:170 #, c-format msgid "unable to cache uid %u, already exists" msgstr "klarte ikke å hurtiglagre uid %u. Uid-en eksisterer allerede" -#: plugins/sudoers/pwutil.c:194 +#: plugins/sudoers/pwutil.c:222 plugins/sudoers/pwutil.c:239 +#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:334 +#, c-format +msgid "unable to cache user %s, out of memory" +msgstr "klarte ikke å hurtiglagre brukeren %s. Minnet er fullt" + +#: plugins/sudoers/pwutil.c:234 #, c-format msgid "unable to cache user %s, already exists" msgstr "klarte ikke å hurtiglagre brukeren %s. Brukeren eksisterer allerede" -#: plugins/sudoers/pwutil.c:400 +#: plugins/sudoers/pwutil.c:474 plugins/sudoers/pwutil.c:492 +#, c-format +msgid "unable to cache gid %u, out of memory" +msgstr "klarte ikke å hurtiglagre gid %u. Minnet er fullt" + +#: plugins/sudoers/pwutil.c:486 #, c-format msgid "unable to cache gid %u, already exists" msgstr "klarte ikke å hurtiglagre gid %u. Gid-en eksisterer allerede" -#: plugins/sudoers/pwutil.c:439 +#: plugins/sudoers/pwutil.c:532 plugins/sudoers/pwutil.c:549 +#: plugins/sudoers/pwutil.c:584 plugins/sudoers/pwutil.c:626 +#, c-format +msgid "unable to cache group %s, out of memory" +msgstr "klarte ikke å hurtiglagre gruppa %s. Minnet er fullt" + +#: plugins/sudoers/pwutil.c:544 #, c-format msgid "unable to cache group %s, already exists" msgstr "klarte ikke å hurtiglagre gruppa %s. Gruppa eksisterer allerede" -#: plugins/sudoers/pwutil.c:605 plugins/sudoers/pwutil.c:631 +#: plugins/sudoers/pwutil.c:739 plugins/sudoers/pwutil.c:783 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "klarte ikke å hurtiglagre liste over %s. Lista eksisterer allerede" -#: plugins/sudoers/pwutil.c:627 +#: plugins/sudoers/pwutil.c:745 plugins/sudoers/pwutil.c:788 +#, c-format +msgid "unable to cache group list for %s, out of memory" +msgstr "klarte ikke å hurtiglagre liste over %s. Minnet er fullt" + +#: plugins/sudoers/pwutil.c:777 #, c-format msgid "unable to parse groups for %s" msgstr "klarte ikke å tolke grupper for %s" -#: plugins/sudoers/set_perms.c:122 plugins/sudoers/set_perms.c:447 -#: plugins/sudoers/set_perms.c:850 plugins/sudoers/set_perms.c:1147 -#: plugins/sudoers/set_perms.c:1439 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 +#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 +#: plugins/sudoers/set_perms.c:1430 msgid "perm stack overflow" msgstr "perm-stabelen er full" -#: plugins/sudoers/set_perms.c:130 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:1076 -#: plugins/sudoers/set_perms.c:1155 plugins/sudoers/set_perms.c:1372 -#: plugins/sudoers/set_perms.c:1447 plugins/sudoers/set_perms.c:1536 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 +#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 +#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 +#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 +#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 msgid "perm stack underflow" msgstr "perm-stabelen er tom" -#: plugins/sudoers/set_perms.c:189 plugins/sudoers/set_perms.c:502 -#: plugins/sudoers/set_perms.c:1206 plugins/sudoers/set_perms.c:1479 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:493 +#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 msgid "unable to change to root gid" -msgstr "klarte ikke å endre gid til root-brukerens" +msgstr "klarte ikke å endre gid til rotbruker" -#: plugins/sudoers/set_perms.c:278 plugins/sudoers/set_perms.c:599 -#: plugins/sudoers/set_perms.c:987 plugins/sudoers/set_perms.c:1283 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:590 +#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 msgid "unable to change to runas gid" msgstr "klarte ikke å endre til kjør som-brukerens gid" -#: plugins/sudoers/set_perms.c:283 plugins/sudoers/set_perms.c:604 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:595 +#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 msgid "unable to set runas group vector" -msgstr "klarte ikke å velge gruppevektor for «runas»" +msgstr "klarte ikke å velge «kjør som»-gruppevektor" -#: plugins/sudoers/set_perms.c:294 plugins/sudoers/set_perms.c:615 -#: plugins/sudoers/set_perms.c:1001 plugins/sudoers/set_perms.c:1297 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:606 +#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 msgid "unable to change to runas uid" -msgstr "klarte ikke å endre til kjør som-brukerens uid" +msgstr "klarte ikke å endre uid til «kjør som»-bruker" -#: plugins/sudoers/set_perms.c:312 plugins/sudoers/set_perms.c:633 -#: plugins/sudoers/set_perms.c:1017 plugins/sudoers/set_perms.c:1313 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:624 +#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 msgid "unable to change to sudoers gid" -msgstr "klarte ikke å endre til sudoers-gid" +msgstr "klarte ikke å endre gid til sudoers" -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 msgid "too many processes" msgstr "for mange prosesser" -#: plugins/sudoers/solaris_audit.c:47 +#: plugins/sudoers/solaris_audit.c:51 msgid "unable to get current working directory" msgstr "klarte ikke å hente gjeldende arbeidsmappe" -#: plugins/sudoers/solaris_audit.c:55 +#: plugins/sudoers/solaris_audit.c:59 #, c-format msgid "truncated audit path user_cmnd: %s" msgstr "forkortet revisjonssti «user_cmnd»: %s" -#: plugins/sudoers/solaris_audit.c:62 +#: plugins/sudoers/solaris_audit.c:66 #, c-format msgid "truncated audit path argv[0]: %s" msgstr "forkortet revisjonssti «argv[0]»: %s" -#: plugins/sudoers/solaris_audit.c:111 +#: plugins/sudoers/solaris_audit.c:115 msgid "audit_failure message too long" msgstr "audit_failure-meldinga er for lang" -#: plugins/sudoers/sssd.c:252 +#: plugins/sudoers/sssd.c:333 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "klarte ikke å starte opp SSS-kilde. Har du installert SSSD på maskinen?" -#: plugins/sudoers/sssd.c:259 plugins/sudoers/sssd.c:267 -#: plugins/sudoers/sssd.c:275 plugins/sudoers/sssd.c:283 -#: plugins/sudoers/sssd.c:291 +#: plugins/sudoers/sssd.c:341 plugins/sudoers/sssd.c:350 +#: plugins/sudoers/sssd.c:359 plugins/sudoers/sssd.c:368 +#: plugins/sudoers/sssd.c:377 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "fant ikke symbolet «%s» i %s" -#: plugins/sudoers/sudo_nss.c:296 +#: plugins/sudoers/sudo_nss.c:290 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Standardoppføringer som gjelder for %s på %s:\n" -#: plugins/sudoers/sudo_nss.c:309 +#: plugins/sudoers/sudo_nss.c:308 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Kjør-som- og kommandospesifikke standardoppføringer for %s:\n" -#: plugins/sudoers/sudo_nss.c:322 +#: plugins/sudoers/sudo_nss.c:326 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "Brukeren %s kan kjøre følgende kommandoer på %s:\n" -#: plugins/sudoers/sudo_nss.c:331 +#: plugins/sudoers/sudo_nss.c:339 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Brukeren %s har ikke tillatelse til å kjøre sudo på %s.\n" -#: plugins/sudoers/sudoers.c:160 plugins/sudoers/sudoers.c:201 -#: plugins/sudoers/sudoers.c:726 +#: plugins/sudoers/sudoers.c:172 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/visudo.c:223 plugins/sudoers/visudo.c:567 +msgid "unable to initialize sudoers default values" +msgstr "klarte ikke å laste inn standardverdier for sudoers" + +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:239 +#: plugins/sudoers/sudoers.c:833 msgid "problem with defaults entries" msgstr "det har oppstått et problem med én eller flere standardoppføringer" -#: plugins/sudoers/sudoers.c:167 +#: plugins/sudoers/sudoers.c:205 msgid "no valid sudoers sources found, quitting" msgstr "fant ingen gyldig sudoers-kilde. Avslutter." -#: plugins/sudoers/sudoers.c:233 +#: plugins/sudoers/sudoers.c:275 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers-fila tillater ikke rotbrukeren å kjøre sudo" -#: plugins/sudoers/sudoers.c:278 +#: plugins/sudoers/sudoers.c:332 msgid "you are not permitted to use the -C option" msgstr "du har ikke tillatelse til å bruke valget «-C»" -#: plugins/sudoers/sudoers.c:336 +#: plugins/sudoers/sudoers.c:396 #, c-format msgid "timestamp owner (%s): No such user" msgstr "eieren («%s») av tidsstempelet finnes ikke" -#: plugins/sudoers/sudoers.c:350 +#: plugins/sudoers/sudoers.c:410 msgid "no tty" msgstr "ingen tty" -#: plugins/sudoers/sudoers.c:351 +#: plugins/sudoers/sudoers.c:411 msgid "sorry, you must have a tty to run sudo" msgstr "du må ha en tty for å kunne kjøre sudo" -#: plugins/sudoers/sudoers.c:402 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "kommando i gjeldende mappe" -#: plugins/sudoers/sudoers.c:422 +#: plugins/sudoers/sudoers.c:486 msgid "sorry, you are not allowed to preserve the environment" msgstr "du har ikke tillatelse til å beholde brukermiljøet" -#: plugins/sudoers/sudoers.c:674 +#: plugins/sudoers/sudoers.c:778 msgid "command too long" msgstr "kommandoen er for lang" -#: plugins/sudoers/sudoers.c:779 plugins/sudoers/visudo.c:333 -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/sudoers.c:886 plugins/sudoers/visudo.c:427 +#: plugins/sudoers/visudo.c:667 #, c-format msgid "unable to stat %s" msgstr "klarte ikke å lage statistikk av «%s»" -#: plugins/sudoers/sudoers.c:783 +#: plugins/sudoers/sudoers.c:890 #, c-format msgid "%s is not a regular file" msgstr "«%s» er ikke en vanlig fil" -#: plugins/sudoers/sudoers.c:787 plugins/sudoers/timestamp.c:289 toke.l:945 +#: plugins/sudoers/sudoers.c:894 plugins/sudoers/timestamp.c:225 toke.l:947 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "«%s» eies av uid %u, som skulle vært %u" -#: plugins/sudoers/sudoers.c:791 toke.l:952 +#: plugins/sudoers/sudoers.c:898 toke.l:954 #, c-format msgid "%s is world writable" msgstr "«%s» kan overskrives av alle" -#: plugins/sudoers/sudoers.c:795 toke.l:957 +#: plugins/sudoers/sudoers.c:902 toke.l:959 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "«%s» eies av gid %u, som skulle vært %u" -#: plugins/sudoers/sudoers.c:826 +#: plugins/sudoers/sudoers.c:933 #, c-format msgid "only root can use `-c %s'" -msgstr "det er bare rotbrukeren som kan bruke «-c %s»" +msgstr "det er bare rotbruker som kan velge «-c %s»" -#: plugins/sudoers/sudoers.c:845 +#: plugins/sudoers/sudoers.c:952 #, c-format msgid "unknown login class: %s" msgstr "innloggingsklassen «%s» er ukjent" -#: plugins/sudoers/sudoers.c:889 plugins/sudoers/sudoers.c:904 +#: plugins/sudoers/sudoers.c:1031 plugins/sudoers/sudoers.c:1059 #, c-format msgid "unable to resolve host %s" msgstr "klarte ikke å slå opp vertsnavnet «%s»" -#: plugins/sudoers/sudoers.c:986 plugins/sudoers/testsudoers.c:388 +#: plugins/sudoers/sudoers.c:1126 plugins/sudoers/testsudoers.c:385 #, c-format msgid "unknown group: %s" -msgstr "gruppa «%s» er ukjent" +msgstr "«%s» er en ukjent gruppe" -#: plugins/sudoers/sudoreplay.c:280 +#: plugins/sudoers/sudoreplay.c:232 #, c-format msgid "invalid filter option: %s" -msgstr "filtervalget «%s» er ugyldig" +msgstr "«%s» er et ugyldig filtervalg" -#: plugins/sudoers/sudoreplay.c:293 +#: plugins/sudoers/sudoreplay.c:245 #, c-format msgid "invalid max wait: %s" -msgstr "maksimal ventetid «%s» er ugyldig" +msgstr "«%s» er ugyldig maksimal ventetid" -#: plugins/sudoers/sudoreplay.c:299 +#: plugins/sudoers/sudoreplay.c:251 #, c-format msgid "invalid speed factor: %s" -msgstr "hastighetsfaktoren «%s» er ugyldig" +msgstr "«%s» er en ugyldig hastighetsfaktor" -#: plugins/sudoers/sudoreplay.c:302 plugins/sudoers/visudo.c:190 +#: plugins/sudoers/sudoreplay.c:254 plugins/sudoers/visudo.c:180 #, c-format msgid "%s version %s\n" msgstr "%s versjon %s\n" -#: plugins/sudoers/sudoreplay.c:334 +#: plugins/sudoers/sudoreplay.c:286 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/tidsberegning: %s" -#: plugins/sudoers/sudoreplay.c:340 +#: plugins/sudoers/sudoreplay.c:292 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/tidsberegning: %s" -#: plugins/sudoers/sudoreplay.c:356 +#: plugins/sudoers/sudoreplay.c:308 #, c-format msgid "Replaying sudo session: %s\n" msgstr "Spiller av sudo-økt i reprise: %s\n" -#: plugins/sudoers/sudoreplay.c:362 +#: plugins/sudoers/sudoreplay.c:314 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" -msgstr "Advarsel: terminalen din er for liten for å gå gjennom loggen skikkelig.\n" +msgstr "Advarsel: terminalen din er for liten for å spille av loggen skikkelig.\n" -#: plugins/sudoers/sudoreplay.c:363 +#: plugins/sudoers/sudoreplay.c:315 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "Loggens størrelse er %d x %d, mens terminalstørrelsen din er %d x %d." -#: plugins/sudoers/sudoreplay.c:418 +#: plugins/sudoers/sudoreplay.c:368 msgid "unable to set tty to raw mode" msgstr "klarte ikke å velge råmodus for tty" -#: plugins/sudoers/sudoreplay.c:449 +#: plugins/sudoers/sudoreplay.c:401 #, c-format msgid "invalid timing file line: %s" msgstr "linja for tidsberegningsfil er ugyldig: %s" -#: plugins/sudoers/sudoreplay.c:655 plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:611 plugins/sudoers/sudoreplay.c:636 #, c-format msgid "ambiguous expression \"%s\"" msgstr "uttrykket «%s» er tvetydig" -#: plugins/sudoers/sudoreplay.c:702 +#: plugins/sudoers/sudoreplay.c:658 msgid "unmatched ')' in expression" msgstr "fant ingenting som samsvarer med deluttrykket «)»" -#: plugins/sudoers/sudoreplay.c:706 +#: plugins/sudoers/sudoreplay.c:662 #, c-format msgid "unknown search term \"%s\"" -msgstr "søkevalget «%s» er ukjent" +msgstr "«%s» er et ukjent søkevalg" -#: plugins/sudoers/sudoreplay.c:720 +#: plugins/sudoers/sudoreplay.c:677 #, c-format msgid "%s requires an argument" msgstr "%s krever at du bruker et argument" -#: plugins/sudoers/sudoreplay.c:724 plugins/sudoers/sudoreplay.c:1096 +#: plugins/sudoers/sudoreplay.c:680 plugins/sudoers/sudoreplay.c:1060 #, c-format msgid "invalid regular expression: %s" msgstr "«%s» er et ugyldig regulært uttrykk" -#: plugins/sudoers/sudoreplay.c:730 +#: plugins/sudoers/sudoreplay.c:684 #, c-format msgid "could not parse date \"%s\"" msgstr "klarte ikke å tolke datoformatet «%s»" -#: plugins/sudoers/sudoreplay.c:739 +#: plugins/sudoers/sudoreplay.c:693 msgid "unmatched '(' in expression" msgstr "uttrykkets «(» samsvarer ikke" -#: plugins/sudoers/sudoreplay.c:741 +#: plugins/sudoers/sudoreplay.c:695 msgid "illegal trailing \"or\"" msgstr "du kan ikke avslutte med «or»" -#: plugins/sudoers/sudoreplay.c:743 +#: plugins/sudoers/sudoreplay.c:697 msgid "illegal trailing \"!\"" msgstr "du kan ikke avslutte med «!»" -#: plugins/sudoers/sudoreplay.c:796 +#: plugins/sudoers/sudoreplay.c:746 #, c-format msgid "unknown search type %d" -msgstr "søketypen «%d» er ukjent" +msgstr "«%d» er en ukjent søketype" -#: plugins/sudoers/sudoreplay.c:833 +#: plugins/sudoers/sudoreplay.c:784 #, c-format msgid "%s: invalid log file" msgstr "%s: ugyldig loggfil" -#: plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:802 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: tidsstempel-felt mangler" -#: plugins/sudoers/sudoreplay.c:858 +#: plugins/sudoers/sudoreplay.c:809 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: tidsstempel %s: %s" -#: plugins/sudoers/sudoreplay.c:865 +#: plugins/sudoers/sudoreplay.c:816 #, c-format msgid "%s: user field is missing" -msgstr "%s: brukerfeltet mangler" +msgstr "%s: brukerfelt mangler" -#: plugins/sudoers/sudoreplay.c:873 +#: plugins/sudoers/sudoreplay.c:825 #, c-format msgid "%s: runas user field is missing" -msgstr "%s: kjør-som-bruker-feltet mangler" +msgstr "%s: «kjør som bruker»-felt mangler" -#: plugins/sudoers/sudoreplay.c:881 +#: plugins/sudoers/sudoreplay.c:834 #, c-format msgid "%s: runas group field is missing" -msgstr "%s: kjør-som-gruppe-feltet mangler" +msgstr "%s: «kjør som gruppe»-felt mangler" -#: plugins/sudoers/sudoreplay.c:1236 +#: plugins/sudoers/sudoreplay.c:1197 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "bruk: %s [-h] [-d dir] [-m num] [-s num] ID\n" -#: plugins/sudoers/sudoreplay.c:1239 +#: plugins/sudoers/sudoreplay.c:1200 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "bruk: %s [-h] [-d dir] -l [søkeuttrykk]\n" -#: plugins/sudoers/sudoreplay.c:1248 +#: plugins/sudoers/sudoreplay.c:1209 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1473,7 +1644,7 @@ "%s - spill av sudo-øktlogg\n" "\n" -#: plugins/sudoers/sudoreplay.c:1250 +#: plugins/sudoers/sudoreplay.c:1211 msgid "" "\n" "Options:\n" @@ -1495,11 +1666,11 @@ " -s, --speed=num øk eller senk utskriftshastigheten\n" " -V, --version vis versjon og avslutt" -#: plugins/sudoers/testsudoers.c:327 +#: plugins/sudoers/testsudoers.c:324 msgid "\thost unmatched" msgstr "\tvert samsvarer ikke" -#: plugins/sudoers/testsudoers.c:330 +#: plugins/sudoers/testsudoers.c:327 msgid "" "\n" "Command allowed" @@ -1507,7 +1678,7 @@ "\n" "Kommando tillatt" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command denied" @@ -1515,7 +1686,7 @@ "\n" "Kommandoen tillates ikke" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command unmatched" @@ -1523,114 +1694,129 @@ "\n" "Kommandoen samsvarer ikke" -#: plugins/sudoers/timestamp.c:197 -#, c-format -msgid "unable to truncate time stamp file to %lld bytes" -msgstr "klarte ikke å korte ned tidsstempel-fila til %lld byte" - -#: plugins/sudoers/timestamp.c:297 +#: plugins/sudoers/timestamp.c:233 #, c-format msgid "%s is group writable" msgstr "%s kan overskrives av gruppa den tilhører" -#: plugins/sudoers/timestamp.c:318 +#: plugins/sudoers/timestamp.c:309 #, c-format -msgid "timestamp path too long: %s/%s" -msgstr "filbanen «%s/%s» for tidsstempel er for lang" +msgid "unable to truncate time stamp file to %lld bytes" +msgstr "klarte ikke å korte ned tidsstempel-fil til %lld byte" -#: plugins/sudoers/timestamp.c:498 +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:488 plugins/sudoers/visudo.c:494 +msgid "unable to read the clock" +msgstr "klarte ikke å lese klokka" + +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "tidsstempel for fremtidig tidspunkt blir ignorert" -#: plugins/sudoers/timestamp.c:510 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "tidsstempelet er for langt inn i fremtiden: %20.20s" -#: plugins/sudoers/timestamp.c:613 plugins/sudoers/timestamp.c:634 +#: plugins/sudoers/timestamp.c:863 +#, c-format +msgid "unable to lock time stamp file %s" +msgstr "klarte ikke å låse tidsstempel-fila %s" + +#: plugins/sudoers/timestamp.c:906 plugins/sudoers/timestamp.c:926 #, c-format msgid "lecture status path too long: %s/%s" msgstr "filbanen «%s/%s» for moralpreken-status er for lang" -#: plugins/sudoers/visudo.c:192 +#: plugins/sudoers/visudo.c:182 #, c-format msgid "%s grammar version %d\n" msgstr "%s gramatikkversjon %d\n" -#: plugins/sudoers/visudo.c:263 plugins/sudoers/visudo.c:552 +#: plugins/sudoers/visudo.c:254 plugins/sudoers/visudo.c:619 #, c-format msgid "press return to edit %s: " msgstr "trykk linjeskift for å redigere %s: " -#: plugins/sudoers/visudo.c:349 plugins/sudoers/visudo.c:355 +#: plugins/sudoers/visudo.c:320 +#, c-format +msgid "specified editor (%s) doesn't exist" +msgstr "finner ikke valgt redigeringsprogram (%s)" + +#: plugins/sudoers/visudo.c:338 +#, c-format +msgid "no editor found (editor path = %s)" +msgstr "fant ingen redigeringsprogram («editor»-sti = %s)" + +#: plugins/sudoers/visudo.c:447 plugins/sudoers/visudo.c:455 msgid "write error" msgstr "skrivefeil" -#: plugins/sudoers/visudo.c:439 +#: plugins/sudoers/visudo.c:501 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "klarte ikke å undersøke midlertidig fil (%s). %s er ikke endret" -#: plugins/sudoers/visudo.c:444 +#: plugins/sudoers/visudo.c:508 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "midlertidig fil (%s) er tom. %s er ikke endret" -#: plugins/sudoers/visudo.c:450 +#: plugins/sudoers/visudo.c:514 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "noe gikk galt med behandleren (%s). %s er ikke endret" -#: plugins/sudoers/visudo.c:472 +#: plugins/sudoers/visudo.c:536 #, c-format msgid "%s unchanged" msgstr "%s er ikke endret" -#: plugins/sudoers/visudo.c:497 +#: plugins/sudoers/visudo.c:562 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "klarte ikke å åpne midlertidig fil (%s) på nytt. %s er ikke endret" -#: plugins/sudoers/visudo.c:507 +#: plugins/sudoers/visudo.c:573 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "klarte ikke å tolke midlertidig fil (%s). Ukjent feil" -#: plugins/sudoers/visudo.c:543 +#: plugins/sudoers/visudo.c:610 #, c-format msgid "internal error, unable to find %s in list!" msgstr "intern feil: fant ikke %s i lista!" -#: plugins/sudoers/visudo.c:601 plugins/sudoers/visudo.c:610 +#: plugins/sudoers/visudo.c:669 plugins/sudoers/visudo.c:678 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "klarte ikke å sette uid og gid for %s til (%u, %u)" -#: plugins/sudoers/visudo.c:605 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:673 plugins/sudoers/visudo.c:683 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "klarte ikke å endre %s modus til 0%o" -#: plugins/sudoers/visudo.c:632 +#: plugins/sudoers/visudo.c:700 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s og %s er ikke på samme filsystem. Bruker «mv» til å gi nye navn" -#: plugins/sudoers/visudo.c:646 +#: plugins/sudoers/visudo.c:714 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "kommando mislyktes. «%s %s %s». %s er ikke endret" -#: plugins/sudoers/visudo.c:656 +#: plugins/sudoers/visudo.c:724 #, c-format msgid "error renaming %s, %s unchanged" msgstr "klarte ikke å gi %s nytt navn. %s er ikke endret" -#: plugins/sudoers/visudo.c:718 +#: plugins/sudoers/visudo.c:786 msgid "What now? " msgstr "Hva nå? " -#: plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:800 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1642,87 +1828,72 @@ " (x)avslutt uten å lagre endringene dine til sudoers-fila\n" " (Q)avslutt og lagre endringene dine til sudoers-fila (FARLIG!)\n" -#: plugins/sudoers/visudo.c:780 +#: plugins/sudoers/visudo.c:848 #, c-format msgid "unable to run %s" msgstr "klarte ikke å kjøre «%s»" -#: plugins/sudoers/visudo.c:806 +#: plugins/sudoers/visudo.c:878 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: feil eier. uid og gid skulle vært «%u, %u»\n" -#: plugins/sudoers/visudo.c:813 +#: plugins/sudoers/visudo.c:885 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: feil tillatelsesmodus. Skulle vært modus 0%o\n" -#: plugins/sudoers/visudo.c:838 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:910 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "failed to parse %s file, unknown error" msgstr "klarte ikke å tolke fila «%s». Ukjent feil" -#: plugins/sudoers/visudo.c:854 plugins/sudoers/visudo_json.c:1054 +#: plugins/sudoers/visudo.c:926 plugins/sudoers/visudo_json.c:1041 #, c-format msgid "parse error in %s near line %d\n" msgstr "tolkefeil i «%s» ved linje %d\n" -#: plugins/sudoers/visudo.c:857 plugins/sudoers/visudo_json.c:1057 +#: plugins/sudoers/visudo.c:929 plugins/sudoers/visudo_json.c:1044 #, c-format msgid "parse error in %s\n" msgstr "tolkefeil i «%s»\n" -#: plugins/sudoers/visudo.c:865 plugins/sudoers/visudo.c:872 +#: plugins/sudoers/visudo.c:937 plugins/sudoers/visudo.c:944 #, c-format msgid "%s: parsed OK\n" msgstr "%s: lest og tolket OK\n" -#: plugins/sudoers/visudo.c:918 +#: plugins/sudoers/visudo.c:991 #, c-format msgid "%s busy, try again later" msgstr "%s er opptatt. Prøv igjen senere" -#: plugins/sudoers/visudo.c:962 -#, c-format -msgid "specified editor (%s) doesn't exist" -msgstr "finner ikke valgt redigeringsprogram (%s)" - -#: plugins/sudoers/visudo.c:985 -#, c-format -msgid "unable to stat editor (%s)" -msgstr "klarte ikke å undersøke redigeringsprogrammet (%s)" - -#: plugins/sudoers/visudo.c:1033 -#, c-format -msgid "no editor found (editor path = %s)" -msgstr "fant ingen redigeringsprogram («editor»-sti = %s)" - -#: plugins/sudoers/visudo.c:1136 +#: plugins/sudoers/visudo.c:1087 #, c-format msgid "Error: cycle in %s `%s'" msgstr "Feil: sløyfe i %s «%s»" -#: plugins/sudoers/visudo.c:1137 +#: plugins/sudoers/visudo.c:1088 #, c-format msgid "Warning: cycle in %s `%s'" msgstr "Advarsel: sløyfe i %s «%s»" -#: plugins/sudoers/visudo.c:1141 +#: plugins/sudoers/visudo.c:1092 #, c-format msgid "Error: %s `%s' referenced but not defined" msgstr "Feil: det refereres til %s «%s», men aliaset er ikke definert" -#: plugins/sudoers/visudo.c:1142 +#: plugins/sudoers/visudo.c:1093 #, c-format msgid "Warning: %s `%s' referenced but not defined" msgstr "Advarsel: det refereres til %s «%s», men aliaset er ikke definert" -#: plugins/sudoers/visudo.c:1281 +#: plugins/sudoers/visudo.c:1236 #, c-format msgid "Warning: unused %s `%s'" msgstr "Advarsel: ubrukt %s «%s»" -#: plugins/sudoers/visudo.c:1394 +#: plugins/sudoers/visudo.c:1349 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -1731,7 +1902,7 @@ "%s - rediger sudoers-fila på en trygg måte\n" "\n" -#: plugins/sudoers/visudo.c:1396 +#: plugins/sudoers/visudo.c:1351 msgid "" "\n" "Options:\n" @@ -1753,15 +1924,33 @@ " -V, --version vis versjon og avslutt\n" " -x, --export=utdatafil eksporter sudoers-fil i JSON-format til utdatafil" -#: plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo_json.c:1018 #, c-format msgid "%s: input and output files must be different" msgstr "%s: inndata- og utdatafiler må være ulike" -#: toke.l:915 +#: toke.l:918 msgid "too many levels of includes" msgstr "du har for mange nivåer av inkluderte filer" +#~ msgid "unable allocate memory" +#~ msgstr "klarte ikke å tildele minne" + +#~ msgid "timestamp path too long: %s/%s" +#~ msgstr "filbanen «%s/%s» for tidsstempel er for lang" + +#~ msgid "unable to stat editor (%s)" +#~ msgstr "klarte ikke å undersøke redigeringsprogrammet (%s)" + +#~ msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" +#~ msgstr "sudo_ldap_conf_add_ports: ikke nok lagringsplass for å utvide vertens hurtiglager" + +#~ msgid "sudo_ldap_parse_uri: out of space building hostbuf" +#~ msgstr "sudo_ldap_parse_uri: ikke nok lagringsplass til å bygge opp vertens hurtiglager" + +#~ msgid "sudo_ldap_build_pass1 allocation mismatch" +#~ msgstr "sudo_ldap_build_pass1 samsvar ikke ved tildeling" + #~ msgid "internal error: insufficient space for log line" #~ msgstr "intern feil: logglinje mangler plass" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/plugins/sudoers/po/nl.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/plugins/sudoers/po/nl.mo differ diff -Nru sudo-1.8.12/plugins/sudoers/po/nl.po sudo-1.8.16/plugins/sudoers/po/nl.po --- sudo-1.8.12/plugins/sudoers/po/nl.po 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/po/nl.po 2015-10-31 23:35:24.000000000 +0000 @@ -6,8 +6,8 @@ msgstr "" "Project-Id-Version: sudoers 1.8.12b3\n" "Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-11-20 13:33-0700\n" -"PO-Revision-Date: 2015-01-14 03:34+0100\n" +"POT-Creation-Date: 2015-09-10 14:28-0600\n" +"PO-Revision-Date: 2015-10-15 20:40+0200\n" "Last-Translator: P. Hamming \n" "Language-Team: Dutch \n" "Language: nl\n" @@ -42,48 +42,174 @@ msgid "Sorry, try again." msgstr "Sorry, probeer opnieuw" -#: gram.y:379 +#: gram.y:183 gram.y:201 gram.y:207 gram.y:213 gram.y:219 gram.y:225 +#: gram.y:241 gram.y:248 gram.y:255 gram.y:262 gram.y:269 gram.y:285 +#: gram.y:308 gram.y:315 gram.y:322 gram.y:329 gram.y:336 gram.y:391 +#: gram.y:399 gram.y:409 gram.y:439 gram.y:446 gram.y:453 gram.y:460 +#: gram.y:572 gram.y:579 gram.y:588 gram.y:597 gram.y:614 gram.y:670 +#: gram.y:677 gram.y:684 gram.y:692 gram.y:784 gram.y:791 gram.y:798 +#: gram.y:805 gram.y:812 gram.y:838 gram.y:845 gram.y:852 gram.y:1136 +#: gram.y:1143 plugins/sudoers/alias.c:123 plugins/sudoers/alias.c:136 +#: plugins/sudoers/auth/bsdauth.c:141 plugins/sudoers/auth/kerb5.c:119 +#: plugins/sudoers/auth/kerb5.c:145 plugins/sudoers/auth/pam.c:397 +#: plugins/sudoers/auth/pam.c:445 plugins/sudoers/auth/rfc1938.c:109 +#: plugins/sudoers/auth/sia.c:110 plugins/sudoers/defaults.c:516 +#: plugins/sudoers/defaults.c:720 plugins/sudoers/defaults.c:880 +#: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 +#: plugins/sudoers/editor.c:92 plugins/sudoers/env.c:233 +#: plugins/sudoers/group_plugin.c:133 plugins/sudoers/iolog.c:586 +#: plugins/sudoers/iolog.c:618 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:446 plugins/sudoers/ldap.c:477 +#: plugins/sudoers/ldap.c:529 plugins/sudoers/ldap.c:562 +#: plugins/sudoers/ldap.c:914 plugins/sudoers/ldap.c:1061 +#: plugins/sudoers/ldap.c:1348 plugins/sudoers/ldap.c:1521 +#: plugins/sudoers/ldap.c:1597 plugins/sudoers/ldap.c:1733 +#: plugins/sudoers/ldap.c:1757 plugins/sudoers/ldap.c:1787 +#: plugins/sudoers/ldap.c:1840 plugins/sudoers/ldap.c:1855 +#: plugins/sudoers/ldap.c:1951 plugins/sudoers/ldap.c:1984 +#: plugins/sudoers/ldap.c:2137 plugins/sudoers/ldap.c:2234 +#: plugins/sudoers/ldap.c:3041 plugins/sudoers/ldap.c:3074 +#: plugins/sudoers/ldap.c:3388 plugins/sudoers/ldap.c:3416 +#: plugins/sudoers/ldap.c:3427 plugins/sudoers/ldap.c:3517 +#: plugins/sudoers/ldap.c:3533 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:662 +#: plugins/sudoers/logging.c:916 plugins/sudoers/match.c:501 +#: plugins/sudoers/match.c:537 plugins/sudoers/match.c:699 +#: plugins/sudoers/match.c:756 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:384 +#: plugins/sudoers/policy.c:579 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/sssd.c:160 plugins/sudoers/sssd.c:192 +#: plugins/sudoers/sssd.c:235 plugins/sudoers/sssd.c:242 +#: plugins/sudoers/sssd.c:278 plugins/sudoers/sssd.c:323 +#: plugins/sudoers/sssd.c:917 plugins/sudoers/sssd.c:1050 +#: plugins/sudoers/sudoers.c:159 plugins/sudoers/sudoers.c:294 +#: plugins/sudoers/sudoers.c:304 plugins/sudoers/sudoers.c:312 +#: plugins/sudoers/sudoers.c:365 plugins/sudoers/sudoers.c:663 +#: plugins/sudoers/sudoers.c:749 plugins/sudoers/sudoers.c:793 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:472 +#: plugins/sudoers/sudoreplay.c:668 plugins/sudoers/sudoreplay.c:780 +#: plugins/sudoers/sudoreplay.c:820 plugins/sudoers/sudoreplay.c:829 +#: plugins/sudoers/sudoreplay.c:839 plugins/sudoers/sudoreplay.c:847 +#: plugins/sudoers/sudoreplay.c:851 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1011 plugins/sudoers/testsudoers.c:130 +#: plugins/sudoers/testsudoers.c:188 plugins/sudoers/testsudoers.c:215 +#: plugins/sudoers/testsudoers.c:232 plugins/sudoers/timestamp.c:390 +#: plugins/sudoers/timestamp.c:426 plugins/sudoers/timestamp.c:838 +#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 +#: plugins/sudoers/toke_util.c:147 plugins/sudoers/visudo.c:152 +#: plugins/sudoers/visudo.c:213 plugins/sudoers/visudo.c:297 +#: plugins/sudoers/visudo.c:303 plugins/sudoers/visudo.c:433 +#: plugins/sudoers/visudo.c:974 plugins/sudoers/visudo.c:1018 +#: plugins/sudoers/visudo.c:1114 toke.l:785 toke.l:806 toke.l:816 toke.l:924 +#: toke.l:1082 +msgid "unable to allocate memory" +msgstr "kan geen geheugen reserveren" + +#: gram.y:471 #, fuzzy #| msgid "%s requires an argument" msgid "a digest requires a path name" msgstr "een digest heeft een lokatie nodig" -#: plugins/sudoers/alias.c:136 +#: gram.y:1136 gram.y:1143 plugins/sudoers/auth/pam.c:397 +#: plugins/sudoers/auth/pam.c:445 plugins/sudoers/auth/rfc1938.c:109 +#: plugins/sudoers/defaults.c:516 plugins/sudoers/defaults.c:720 +#: plugins/sudoers/defaults.c:880 plugins/sudoers/editor.c:64 +#: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:92 +#: plugins/sudoers/env.c:233 plugins/sudoers/group_plugin.c:133 +#: plugins/sudoers/iolog.c:586 plugins/sudoers/iolog.c:618 +#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:446 +#: plugins/sudoers/ldap.c:477 plugins/sudoers/ldap.c:529 +#: plugins/sudoers/ldap.c:562 plugins/sudoers/ldap.c:914 +#: plugins/sudoers/ldap.c:1061 plugins/sudoers/ldap.c:1348 +#: plugins/sudoers/ldap.c:1521 plugins/sudoers/ldap.c:1597 +#: plugins/sudoers/ldap.c:1733 plugins/sudoers/ldap.c:1757 +#: plugins/sudoers/ldap.c:1787 plugins/sudoers/ldap.c:1840 +#: plugins/sudoers/ldap.c:1855 plugins/sudoers/ldap.c:1951 +#: plugins/sudoers/ldap.c:1984 plugins/sudoers/ldap.c:2137 +#: plugins/sudoers/ldap.c:2234 plugins/sudoers/ldap.c:3041 +#: plugins/sudoers/ldap.c:3074 plugins/sudoers/ldap.c:3388 +#: plugins/sudoers/ldap.c:3416 plugins/sudoers/ldap.c:3427 +#: plugins/sudoers/ldap.c:3517 plugins/sudoers/ldap.c:3533 +#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 +#: plugins/sudoers/logging.c:916 plugins/sudoers/match.c:501 +#: plugins/sudoers/match.c:537 plugins/sudoers/match.c:699 +#: plugins/sudoers/match.c:756 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:97 +#: plugins/sudoers/policy.c:106 plugins/sudoers/policy.c:115 +#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:250 +#: plugins/sudoers/policy.c:271 plugins/sudoers/policy.c:280 +#: plugins/sudoers/policy.c:319 plugins/sudoers/policy.c:329 +#: plugins/sudoers/policy.c:338 plugins/sudoers/policy.c:384 +#: plugins/sudoers/policy.c:579 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:160 +#: plugins/sudoers/sssd.c:192 plugins/sudoers/sssd.c:235 +#: plugins/sudoers/sssd.c:242 plugins/sudoers/sssd.c:278 +#: plugins/sudoers/sssd.c:323 plugins/sudoers/sssd.c:917 +#: plugins/sudoers/sssd.c:1050 plugins/sudoers/sudoers.c:159 +#: plugins/sudoers/sudoers.c:294 plugins/sudoers/sudoers.c:304 +#: plugins/sudoers/sudoers.c:312 plugins/sudoers/sudoers.c:365 +#: plugins/sudoers/sudoers.c:663 plugins/sudoers/sudoers.c:749 +#: plugins/sudoers/sudoers.c:793 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sudoreplay.c:472 plugins/sudoers/sudoreplay.c:668 +#: plugins/sudoers/sudoreplay.c:780 plugins/sudoers/sudoreplay.c:820 +#: plugins/sudoers/sudoreplay.c:829 plugins/sudoers/sudoreplay.c:839 +#: plugins/sudoers/sudoreplay.c:847 plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:1007 plugins/sudoers/sudoreplay.c:1011 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:188 +#: plugins/sudoers/testsudoers.c:215 plugins/sudoers/testsudoers.c:232 +#: plugins/sudoers/timestamp.c:390 plugins/sudoers/timestamp.c:426 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:147 +#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:213 +#: plugins/sudoers/visudo.c:297 plugins/sudoers/visudo.c:303 +#: plugins/sudoers/visudo.c:433 plugins/sudoers/visudo.c:974 +#: plugins/sudoers/visudo.c:1018 plugins/sudoers/visudo.c:1114 toke.l:785 +#: toke.l:806 toke.l:816 toke.l:924 toke.l:1082 +#, c-format +msgid "%s: %s" +msgstr "%s: %s" + +#: plugins/sudoers/alias.c:132 #, c-format msgid "Alias `%s' already defined" msgstr "Alias `%s' reeds gedefinieerd" -#: plugins/sudoers/auth/bsdauth.c:75 +#: plugins/sudoers/auth/bsdauth.c:68 #, c-format msgid "unable to get login class for user %s" msgstr "kan de loginklasse voor gebruiker %s niet verkrijgen" -#: plugins/sudoers/auth/bsdauth.c:80 +#: plugins/sudoers/auth/bsdauth.c:73 msgid "unable to begin bsd authentication" msgstr "kan de bsd aanmelding niet starten" -#: plugins/sudoers/auth/bsdauth.c:88 +#: plugins/sudoers/auth/bsdauth.c:81 msgid "invalid authentication type" msgstr "ongeldig type verificatie" -#: plugins/sudoers/auth/bsdauth.c:97 +#: plugins/sudoers/auth/bsdauth.c:90 msgid "unable to initialize BSD authentication" msgstr "kan de bsd aanmelding niet starten" -#: plugins/sudoers/auth/fwtk.c:59 +#: plugins/sudoers/auth/fwtk.c:52 msgid "unable to read fwtk config" msgstr "kan fwtk configuratie niet lezen" -#: plugins/sudoers/auth/fwtk.c:64 +#: plugins/sudoers/auth/fwtk.c:57 msgid "unable to connect to authentication server" msgstr "kan niet verbinden met aanmeldingsserver" -#: plugins/sudoers/auth/fwtk.c:70 plugins/sudoers/auth/fwtk.c:94 -#: plugins/sudoers/auth/fwtk.c:127 +#: plugins/sudoers/auth/fwtk.c:63 plugins/sudoers/auth/fwtk.c:87 +#: plugins/sudoers/auth/fwtk.c:120 msgid "lost connection to authentication server" msgstr "verbinding met aanmeldingsserver verloren" -#: plugins/sudoers/auth/fwtk.c:74 +#: plugins/sudoers/auth/fwtk.c:67 #, c-format msgid "" "authentication server error:\n" @@ -92,155 +218,155 @@ "aanmeldingsserverfout:\n" "%s" -#: plugins/sudoers/auth/kerb5.c:116 +#: plugins/sudoers/auth/kerb5.c:111 #, fuzzy, c-format msgid "%s: unable to convert principal to string ('%s'): %s" msgstr "%s: kan opdrachtgever niet converteren naar een string ('%s'): %s" -#: plugins/sudoers/auth/kerb5.c:158 +#: plugins/sudoers/auth/kerb5.c:161 #, c-format msgid "%s: unable to parse '%s': %s" msgstr "%s: kan '%s': %s niet ontleden" -#: plugins/sudoers/auth/kerb5.c:167 +#: plugins/sudoers/auth/kerb5.c:170 #, c-format msgid "%s: unable to resolve credential cache: %s" msgstr "%s: kan cache voor aanmeldingsgegevens: %s niet oplossen" -#: plugins/sudoers/auth/kerb5.c:214 +#: plugins/sudoers/auth/kerb5.c:217 #, c-format msgid "%s: unable to allocate options: %s" msgstr "%s: kan opties: %s niet reserveren" -#: plugins/sudoers/auth/kerb5.c:229 +#: plugins/sudoers/auth/kerb5.c:232 #, c-format msgid "%s: unable to get credentials: %s" msgstr "%s: kan aanmeldingsgegevens: %s niet verkrijgen" -#: plugins/sudoers/auth/kerb5.c:242 +#: plugins/sudoers/auth/kerb5.c:245 #, c-format msgid "%s: unable to initialize credential cache: %s" msgstr "%s: kan cache voor aanmeldingsgegevens: %s niet initialiseren" -#: plugins/sudoers/auth/kerb5.c:245 +#: plugins/sudoers/auth/kerb5.c:248 #, c-format msgid "%s: unable to store credential in cache: %s" msgstr "%s: kan aanmeldingsgegeven niet opslaan in cache: %s" -#: plugins/sudoers/auth/kerb5.c:309 +#: plugins/sudoers/auth/kerb5.c:312 #, c-format msgid "%s: unable to get host principal: %s" msgstr "%s: kan belangrijkste server niet vinden: %s" -#: plugins/sudoers/auth/kerb5.c:323 +#: plugins/sudoers/auth/kerb5.c:326 #, c-format msgid "%s: Cannot verify TGT! Possible attack!: %s" msgstr "%s: Kan TGT niet verifieren! U bent mogelijk aangevallen!: %s" -#: plugins/sudoers/auth/pam.c:98 +#: plugins/sudoers/auth/pam.c:92 msgid "unable to initialize PAM" msgstr "kan PAM niet initialiseren" -#: plugins/sudoers/auth/pam.c:149 +#: plugins/sudoers/auth/pam.c:164 msgid "account validation failure, is your account locked?" msgstr "fout bij valideren van account, is uw account geblokkeerd?" -#: plugins/sudoers/auth/pam.c:153 +#: plugins/sudoers/auth/pam.c:168 msgid "Account or password is expired, reset your password and try again" msgstr "Account of wachtwoord is verlopen, stel uw wachtwoord opnieuw in en probeer opnieuw" -#: plugins/sudoers/auth/pam.c:161 +#: plugins/sudoers/auth/pam.c:176 #, c-format msgid "unable to change expired password: %s" msgstr "kan verlopen wachtwoord niet wijzigen: %s" -#: plugins/sudoers/auth/pam.c:166 +#: plugins/sudoers/auth/pam.c:181 msgid "Password expired, contact your system administrator" msgstr "Wachtwoord verlopen, neem contact op met uw systeembeheerder" -#: plugins/sudoers/auth/pam.c:170 +#: plugins/sudoers/auth/pam.c:185 msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator" msgstr "Account verlopen of PAM configuratie heeft geen \"account\"-gedeelte voor sudo, neem contact op met uw systeembeheerder" -#: plugins/sudoers/auth/pam.c:187 +#: plugins/sudoers/auth/pam.c:199 #, c-format msgid "PAM authentication error: %s" msgstr "fout in PAM-aanmelding: %s" -#: plugins/sudoers/auth/rfc1938.c:103 plugins/sudoers/visudo.c:228 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:218 #, c-format msgid "you do not exist in the %s database" msgstr "u bestaat niet in de %s database" -#: plugins/sudoers/auth/securid5.c:80 +#: plugins/sudoers/auth/securid5.c:73 msgid "failed to initialise the ACE API library" msgstr "initialiseren van de ACE API bibliotheek mislukt" -#: plugins/sudoers/auth/securid5.c:106 +#: plugins/sudoers/auth/securid5.c:99 msgid "unable to contact the SecurID server" msgstr "kan geen contact krijgen met de SecurID server" -#: plugins/sudoers/auth/securid5.c:115 +#: plugins/sudoers/auth/securid5.c:108 msgid "User ID locked for SecurID Authentication" msgstr "Gebruikers ID geblokkeerd voor SecurID verificatie" -#: plugins/sudoers/auth/securid5.c:119 plugins/sudoers/auth/securid5.c:170 +#: plugins/sudoers/auth/securid5.c:112 plugins/sudoers/auth/securid5.c:163 msgid "invalid username length for SecurID" msgstr "ongeldige gebruikersnaamlengte voor SecurID" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:175 +#: plugins/sudoers/auth/securid5.c:116 plugins/sudoers/auth/securid5.c:168 msgid "invalid Authentication Handle for SecurID" msgstr "kan verificatie voor SecurID op deze manier niet afhandelen" -#: plugins/sudoers/auth/securid5.c:127 +#: plugins/sudoers/auth/securid5.c:120 msgid "SecurID communication failed" msgstr "SecurID communicatie mislukt" -#: plugins/sudoers/auth/securid5.c:131 plugins/sudoers/auth/securid5.c:214 +#: plugins/sudoers/auth/securid5.c:124 plugins/sudoers/auth/securid5.c:207 msgid "unknown SecurID error" msgstr "onbekende SecurID fout" -#: plugins/sudoers/auth/securid5.c:165 +#: plugins/sudoers/auth/securid5.c:158 msgid "invalid passcode length for SecurID" msgstr "ongeldige lengte van passcode voor SecurID" -#: plugins/sudoers/auth/sia.c:123 +#: plugins/sudoers/auth/sia.c:120 msgid "unable to initialize SIA session" msgstr "kan SIA-sessie niet initialiseren" -#: plugins/sudoers/auth/sudo_auth.c:115 +#: plugins/sudoers/auth/sudo_auth.c:126 msgid "invalid authentication methods" msgstr "ongeldige verificatiemethoden" -#: plugins/sudoers/auth/sudo_auth.c:117 +#: plugins/sudoers/auth/sudo_auth.c:128 msgid "Invalid authentication methods compiled into sudo! You may not mix standalone and non-standalone authentication." msgstr "Ongeldige verificatiemethoden in sudo gecompileerd! U kunt geen zelfstandige en niet-zelfstandige verificatiemethoden door elkaar gebruiken." -#: plugins/sudoers/auth/sudo_auth.c:203 plugins/sudoers/auth/sudo_auth.c:252 +#: plugins/sudoers/auth/sudo_auth.c:225 plugins/sudoers/auth/sudo_auth.c:274 msgid "no authentication methods" msgstr "geen verificatiemethoden" -#: plugins/sudoers/auth/sudo_auth.c:205 +#: plugins/sudoers/auth/sudo_auth.c:227 msgid "There are no authentication methods compiled into sudo! If you want to turn off authentication, use the --disable-authentication configure option." msgstr "Er zijn geen verificatie-methoden in sudo gecompileerd! Als u verificatie wilt uitschakelen, dient u de --disable-authentication configuratie-optie te gebruiken." -#: plugins/sudoers/auth/sudo_auth.c:254 +#: plugins/sudoers/auth/sudo_auth.c:276 msgid "Unable to initialize authentication methods." msgstr "Kon verificatiemethoden niet starten." -#: plugins/sudoers/auth/sudo_auth.c:412 +#: plugins/sudoers/auth/sudo_auth.c:435 msgid "Authentication methods:" msgstr "Verificatie-methoden:" -#: plugins/sudoers/bsm_audit.c:95 plugins/sudoers/bsm_audit.c:184 +#: plugins/sudoers/bsm_audit.c:111 plugins/sudoers/bsm_audit.c:200 msgid "Could not determine audit condition" msgstr "Kan voorwaarden voor controle niet bepalen" -#: plugins/sudoers/bsm_audit.c:156 plugins/sudoers/bsm_audit.c:244 +#: plugins/sudoers/bsm_audit.c:172 plugins/sudoers/bsm_audit.c:260 msgid "unable to commit audit record" msgstr "kan controlestructuur niet opbouwen" -#: plugins/sudoers/check.c:197 +#: plugins/sudoers/check.c:250 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -257,18 +383,18 @@ "\n" " 1. Respecteer de privacy van anderen.\n" " 2. Denk na voordat u iets doet.\n" -" 3. Veel mogelijkheden betekend veel verantwoordelijkheid.\n" +" 3. Veel mogelijkheden betekent veel verantwoordelijkheid.\n" "\n" -#: plugins/sudoers/check.c:240 plugins/sudoers/check.c:250 -#: plugins/sudoers/sudoers.c:599 plugins/sudoers/sudoers.c:628 +#: plugins/sudoers/check.c:293 plugins/sudoers/check.c:303 +#: plugins/sudoers/sudoers.c:699 plugins/sudoers/sudoers.c:728 #, c-format msgid "unknown uid: %u" msgstr "onbekend gebruikersnummer: %u" -#: plugins/sudoers/check.c:245 plugins/sudoers/policy.c:683 -#: plugins/sudoers/sudoers.c:955 plugins/sudoers/testsudoers.c:212 -#: plugins/sudoers/testsudoers.c:364 +#: plugins/sudoers/check.c:298 plugins/sudoers/policy.c:751 +#: plugins/sudoers/sudoers.c:1095 plugins/sudoers/testsudoers.c:206 +#: plugins/sudoers/testsudoers.c:361 #, c-format msgid "unknown user: %s" msgstr "onbekende gebruiker: %s" @@ -317,536 +443,539 @@ msgstr "Stuur een mail als de gebruiker een opdracht niet mag gebruiken" #: plugins/sudoers/def_data.c:67 +#, fuzzy +#| msgid "Send mail if the user is not allowed to run a command" +msgid "Send mail if the user tries to run a command" +msgstr "Stuur een mail als de gebruiker een opdracht niet mag gebruiken" + +#: plugins/sudoers/def_data.c:71 msgid "Use a separate timestamp for each user/tty combo" msgstr "Gebruik een verschillende tijd voor elke gebruiker/terminal combinatie" -#: plugins/sudoers/def_data.c:71 +#: plugins/sudoers/def_data.c:75 msgid "Lecture user the first time they run sudo" msgstr "Instrueer gebruikers de eerste keer dat ze sudo gebruiken" -#: plugins/sudoers/def_data.c:75 +#: plugins/sudoers/def_data.c:79 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Bestand met de sudo-instructies: %s" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:83 msgid "Require users to authenticate by default" msgstr "Standaard is verificatie van gebruikers vereist" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:87 msgid "Root may run sudo" msgstr "Root mag sudo gebruiken" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:91 msgid "Log the hostname in the (non-syslog) log file" msgstr "Log de computernaam in het (niet-syslog) logbestand" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:95 msgid "Log the year in the (non-syslog) log file" msgstr "Log het jaar in het (niet-syslog) logbestand" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:99 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Start een shell als sudo wordt aangeroepen zonder argumenten" -#: plugins/sudoers/def_data.c:99 +#: plugins/sudoers/def_data.c:103 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Stel $HOME in op de doel-gebruiker wanneer een shell wordt gestart met -s" -#: plugins/sudoers/def_data.c:103 +#: plugins/sudoers/def_data.c:107 msgid "Always set $HOME to the target user's home directory" msgstr "$HOME altijd instellen op de persoonlijke map van de doelgebruiker" -#: plugins/sudoers/def_data.c:107 +#: plugins/sudoers/def_data.c:111 msgid "Allow some information gathering to give useful error messages" msgstr "Sta verzamelen van informatie toe om bruikbare fout-berichten te geven" -#: plugins/sudoers/def_data.c:111 +#: plugins/sudoers/def_data.c:115 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Vereis volledig-gekwalificeerde computernamen (fqdn) in het sudoers-bestand" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:119 msgid "Insult the user when they enter an incorrect password" msgstr "Beledig de gebruiker wanneer ze een verkeerd wachtwoord invoeren" -#: plugins/sudoers/def_data.c:119 +#: plugins/sudoers/def_data.c:123 msgid "Only allow the user to run sudo if they have a tty" msgstr "Gebruiker alleen toestaan sudo te gebruiken wanneer deze een terminal heeft" -#: plugins/sudoers/def_data.c:123 +#: plugins/sudoers/def_data.c:127 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo zal de EDITOR omgevingsvariabele in acht nemen" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:131 msgid "Prompt for root's password, not the users's" msgstr "Vraag naar wachtwoord van root, niet van de gebruiker" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:135 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Vraag naar wachtwoord van runas_default gebruiker, niet van huidige gebruiker" -#: plugins/sudoers/def_data.c:135 +#: plugins/sudoers/def_data.c:139 msgid "Prompt for the target user's password, not the users's" msgstr "Vraag naar wachtwoord van doelgebruiker, niet van huidige gebruiker" -#: plugins/sudoers/def_data.c:139 +#: plugins/sudoers/def_data.c:143 msgid "Apply defaults in the target user's login class if there is one" msgstr "Pas de standaardinstellingen van de doelgebruikers inlogklasse toe wanneer deze bestaat" -#: plugins/sudoers/def_data.c:143 +#: plugins/sudoers/def_data.c:147 msgid "Set the LOGNAME and USER environment variables" msgstr "Stel de LOGNAME en USER omgevingsvariabelen in" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:151 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Stel het effectieve gebruikersnummer van de doelgebuiker in, niet het werkelijke gebruikersnummer" -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:155 msgid "Don't initialize the group vector to that of the target user" msgstr "Initialiseer niet de doelgebruikers groepsvector" -#: plugins/sudoers/def_data.c:155 +#: plugins/sudoers/def_data.c:159 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Breek regels in logbestanden af op (0 voor niet afbreken): %u" -#: plugins/sudoers/def_data.c:159 +#: plugins/sudoers/def_data.c:163 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Aanmeldtijd timeout: %.1f minuten" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:167 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Wachtwoordprompt timeout: %.1f minuten" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:171 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Aantal pogingen om een wachtwoord in te voeren: %u" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:175 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "Te gebruiken umask of 0777 om die van gebruiker te gebruiken: 0%o" -#: plugins/sudoers/def_data.c:175 +#: plugins/sudoers/def_data.c:179 #, c-format msgid "Path to log file: %s" msgstr "Pad naar logbestand: %s" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:183 #, c-format msgid "Path to mail program: %s" msgstr "Pad naar mailprogramma: %s" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:187 #, c-format msgid "Flags for mail program: %s" msgstr "Opties voor mailprogramma: %s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:191 #, c-format msgid "Address to send mail to: %s" msgstr "Adres om mails naar te sturen: %s" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:195 #, c-format msgid "Address to send mail from: %s" msgstr "Adres waarvan de mail wordt verzonden: %s" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:199 #, c-format msgid "Subject line for mail messages: %s" msgstr "Onderwerp voor mails: %s" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:203 #, c-format msgid "Incorrect password message: %s" msgstr "Boodschap voor verkeerd wachtwoord: %s" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:207 #, fuzzy, c-format #| msgid "Path to authentication timestamp dir: %s" msgid "Path to lecture status dir: %s" msgstr "Pad naar aanmeld-tijdmap: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:211 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Pad naar aanmeld-tijdmap: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:215 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Eigenaar van aanmeld-tijdmap: %s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:219 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Gebruikers in deze groep hoeven geen wachtwoord en PATH in te voeren: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:223 #, c-format msgid "Default password prompt: %s" msgstr "Standaard wachtwoordprompt: %s" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:227 msgid "If set, passprompt will override system prompt in all cases." msgstr "Wanneer ingesteld zal de wachtwoordprompt altijd de systeempromt vervangen." -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:231 #, c-format msgid "Default user to run commands as: %s" msgstr "Standaard gebruiker om opdrachten uit te voeren: %s" -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:235 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Waarde om $PATH van gebruiker te vervangen %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:239 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Pad naar de editor bij gebruik van visudo: %s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:243 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Wanneer een wachtwoord noodzakelijk is voor 'list' pseudopdracht: %s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:247 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Wanneer een wachtwoord noodzakelijk is voor 'verify' pseudopdracht: %s" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:251 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Laadt vooraf de dummy uitvoerfuncties uit de sudo_noexec-bibliotheek" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:255 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Als de LDAP-map beschikbaar is, wordt het lokale sudoersbestand genegeerd?" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:259 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Bestandsindicators >= %d zullen worden gesloten voor uitvoeren van een opdracht" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:263 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "Als ingesteld, gebruikers mogen de waarde van `closefrom' vervangen met de optie -C" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:267 msgid "Allow users to set arbitrary environment variables" msgstr "Sta gebruikers toe willekeurige omgevingsvariabelen in te stellen" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:271 msgid "Reset the environment to a default set of variables" msgstr "Stel de omgevingsvariablen in op een standaard set" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to check for sanity:" msgstr "Omgevingsvariablen om juistheid te controleren:" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to remove:" msgstr "Verwijder de volgende omgevingsvariablen:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:283 msgid "Environment variables to preserve:" msgstr "Behoud de volgende omgevingsvariablen:" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:287 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "SELinux role om in de nieuwe beveiliginscontext te gebruiken: %s" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:291 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "SELinux type om in de nieuwe beveiliginscontext te gebruiken: %s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:295 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Pad naar het omgevingsbestand voor sudo: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:299 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Te gebruiken taaldefinitie bij ontleden sudoers: %s" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:303 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Sta sudo toe ook te vragen naar een wachtwoord wanneer dit zichtbaar zou worden" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:307 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Zorg voor zichtbare terugkoppeling op de wachtwoordprompt wanneer er gebruikersinvoer is" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:311 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Gebruik snellere expansie van jokertekens. Dit is minder nauwkeurig, maar maakt geen gebruik van het bestandsysteem" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:315 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "De umask die is opgegeven in het sudoersbestand zal die van de gebruiker vervangen, ook wanneer deze meer toestaat" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:319 msgid "Log user's input for the command being run" msgstr "Log gebruikersinvoer voor de uitgevoerde opdracht" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:323 msgid "Log the output of the command being run" msgstr "Log uitvoer voor de uitgevoerde opdracht" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:327 msgid "Compress I/O logs using zlib" msgstr "Comprimeer in-/uitvoerlogs met zlib" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:331 msgid "Always run commands in a pseudo-tty" msgstr "Voer opdrachten altijd uit in een pseudo-terminal" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:335 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Plugin voor ondersteuning van niet-Unixgroepen: %s" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:339 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Map waarin in-/uitvoerlogs moeten worden opgeslagen: %s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:343 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Bestand waarin in-/uitvoerlogs moeten worden opgeslagen: %s" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:347 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Voeg een item toe aan het utmp/utmpx-bestand wanneer een virtuele terminal wordt gereserveerd" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:351 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Stel de gebruiker in utmp in als de doelgebruiker, niet als de aanroepende gebruiker" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:355 msgid "Set of permitted privileges" msgstr "Set van toegestane privileges" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:359 msgid "Set of limit privileges" msgstr "Set van beperkende privileges" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:363 msgid "Run commands on a pty in the background" msgstr "Draai opdrachten op een virtuele terminal op de achtergrond." -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:367 msgid "PAM service name to use" msgstr "naam van PAM-service om te gebruiken" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:371 msgid "PAM service name to use for login shells" msgstr "naam van PAM-service om te gebruiken voor inlog-shells" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:375 msgid "Attempt to establish PAM credentials for the target user" msgstr "Probeert PAM-aanmeldgegevens voor doelgebruiker te verkrijgen" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:379 msgid "Create a new PAM session for the command to run in" msgstr "Maak een nieuwe PAM-sessie om de opdracht in uit te voeren." -#: plugins/sudoers/def_data.c:379 +#: plugins/sudoers/def_data.c:383 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Maximaal in-/uitvoerlog volgnummer: %u" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:387 msgid "Enable sudoers netgroup support" msgstr "Ondersteuning voor sudoers netgroup inschakelen" -#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:601 -#: plugins/sudoers/visudo_json.c:642 plugins/sudoers/visudo_json.c:677 +#: plugins/sudoers/def_data.c:391 +msgid "Follow symbolic links when editing files with sudoedit" +msgstr "" + +#: plugins/sudoers/defaults.c:199 plugins/sudoers/defaults.c:608 +#: plugins/sudoers/visudo_json.c:633 plugins/sudoers/visudo_json.c:668 #, c-format msgid "unknown defaults entry `%s'" msgstr "onbekend standaarditem `%s'" -#: plugins/sudoers/defaults.c:218 plugins/sudoers/defaults.c:228 -#: plugins/sudoers/defaults.c:248 plugins/sudoers/defaults.c:261 -#: plugins/sudoers/defaults.c:274 plugins/sudoers/defaults.c:287 -#: plugins/sudoers/defaults.c:300 plugins/sudoers/defaults.c:320 -#: plugins/sudoers/defaults.c:330 +#: plugins/sudoers/defaults.c:207 plugins/sudoers/defaults.c:217 +#: plugins/sudoers/defaults.c:241 plugins/sudoers/defaults.c:256 +#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 +#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 +#: plugins/sudoers/defaults.c:325 #, c-format msgid "value `%s' is invalid for option `%s'" msgstr "waarde `%s' is ongeldig voor optie `%s'" -#: plugins/sudoers/defaults.c:221 plugins/sudoers/defaults.c:231 -#: plugins/sudoers/defaults.c:239 plugins/sudoers/defaults.c:256 -#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 -#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 -#: plugins/sudoers/defaults.c:326 +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:220 +#: plugins/sudoers/defaults.c:228 plugins/sudoers/defaults.c:251 +#: plugins/sudoers/defaults.c:264 plugins/sudoers/defaults.c:277 +#: plugins/sudoers/defaults.c:290 plugins/sudoers/defaults.c:310 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "no value specified for `%s'" msgstr "geen waarde opgegeven voor `%s'" -#: plugins/sudoers/defaults.c:244 +#: plugins/sudoers/defaults.c:233 #, c-format msgid "values for `%s' must start with a '/'" msgstr "waarden voor `%s' moeten beginnen met een '/'" -#: plugins/sudoers/defaults.c:306 +#: plugins/sudoers/defaults.c:301 #, c-format msgid "option `%s' does not take a value" msgstr "optie `%s' kan geen waarde verwerken" -#: plugins/sudoers/env.c:276 plugins/sudoers/env.c:283 -#: plugins/sudoers/env.c:386 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:918 plugins/sudoers/policy.c:461 -#: plugins/sudoers/policy.c:470 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:708 plugins/sudoers/testsudoers.c:242 -#: plugins/sudoers/toke_util.c:174 +#: plugins/sudoers/env.c:295 plugins/sudoers/env.c:302 +#: plugins/sudoers/env.c:407 plugins/sudoers/ldap.c:450 +#: plugins/sudoers/ldap.c:540 plugins/sudoers/ldap.c:1152 +#: plugins/sudoers/ldap.c:1354 plugins/sudoers/ldap.c:1526 +#: plugins/sudoers/ldap.c:1682 plugins/sudoers/linux_audit.c:82 +#: plugins/sudoers/logging.c:921 plugins/sudoers/policy.c:498 +#: plugins/sudoers/policy.c:507 plugins/sudoers/prompt.c:161 +#: plugins/sudoers/sudoers.c:815 plugins/sudoers/testsudoers.c:236 +#: plugins/sudoers/toke_util.c:160 #, c-format msgid "internal error, %s overflow" msgstr "interne fout, %s overflow" -#: plugins/sudoers/env.c:359 +#: plugins/sudoers/env.c:376 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: envp bevat fouten, verkeerde lengte" -#: plugins/sudoers/env.c:1054 +#: plugins/sudoers/env.c:1052 +#, fuzzy +#| msgid "unable to build time filter" +msgid "unable to rebuild the environment" +msgstr "kan tijd-filter niet opbouwen" + +#: plugins/sudoers/env.c:1126 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "excuseer, u mag de volgende omgevingsvariabelen niet instellen: %s" -#: plugins/sudoers/group_plugin.c:94 +#: plugins/sudoers/group_plugin.c:85 #, c-format msgid "%s must be owned by uid %d" msgstr "%s moet eigendom zijn van gebruikersnummer %d" -#: plugins/sudoers/group_plugin.c:98 +#: plugins/sudoers/group_plugin.c:89 #, c-format msgid "%s must only be writable by owner" msgstr "%s mag enkel schrijfbaar zijn voor eigenaar" -#: plugins/sudoers/group_plugin.c:105 plugins/sudoers/sssd.c:251 +#: plugins/sudoers/group_plugin.c:97 plugins/sudoers/sssd.c:331 #, c-format msgid "unable to load %s: %s" msgstr "kan %s niet laden: %s" -#: plugins/sudoers/group_plugin.c:110 +#: plugins/sudoers/group_plugin.c:103 #, c-format msgid "unable to find symbol \"group_plugin\" in %s" msgstr "kan symbool \"group_plugin\" niet vinden in %s" -#: plugins/sudoers/group_plugin.c:115 +#: plugins/sudoers/group_plugin.c:108 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: incompatibele groepplugin hoofdversie %d, verwacht wordt %d" -#: plugins/sudoers/interfaces.c:116 +#: plugins/sudoers/interfaces.c:117 msgid "Local IP address and netmask pairs:\n" msgstr "Combinaties van lokale IP-adressen en netwerkmaskers:\n" -#: plugins/sudoers/iolog.c:101 plugins/sudoers/iolog.c:119 -#: plugins/sudoers/timestamp.c:233 +#: plugins/sudoers/iolog.c:92 plugins/sudoers/iolog.c:110 +#: plugins/sudoers/timestamp.c:169 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s bestaat al, maar is geen map (0%o)" -#: plugins/sudoers/iolog.c:112 plugins/sudoers/iolog.c:133 -#: plugins/sudoers/iolog.c:140 plugins/sudoers/timestamp.c:227 -#: plugins/sudoers/timestamp.c:248 +#: plugins/sudoers/iolog.c:103 plugins/sudoers/iolog.c:124 +#: plugins/sudoers/iolog.c:131 plugins/sudoers/timestamp.c:163 +#: plugins/sudoers/timestamp.c:184 #, c-format msgid "unable to mkdir %s" msgstr "mkdir %s: aanmaken mislukt" -#: plugins/sudoers/iolog.c:209 plugins/sudoers/sudoers.c:764 -#: plugins/sudoers/sudoreplay.c:348 plugins/sudoers/sudoreplay.c:819 -#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/timestamp.c:357 -#: plugins/sudoers/visudo.c:832 plugins/sudoers/visudo_json.c:1025 -#: plugins/sudoers/visudo_json.c:1038 +#: plugins/sudoers/iolog.c:200 plugins/sudoers/sudoers.c:871 +#: plugins/sudoers/sudoreplay.c:300 plugins/sudoers/sudoreplay.c:769 +#: plugins/sudoers/sudoreplay.c:973 plugins/sudoers/timestamp.c:399 +#: plugins/sudoers/visudo.c:898 plugins/sudoers/visudo_json.c:1012 +#: plugins/sudoers/visudo_json.c:1025 #, c-format msgid "unable to open %s" msgstr "kan %s niet openen" -#: plugins/sudoers/iolog.c:250 plugins/sudoers/sudoers.c:768 -#: plugins/sudoers/sudoreplay.c:1123 +#: plugins/sudoers/iolog.c:241 plugins/sudoers/sudoers.c:875 +#: plugins/sudoers/sudoreplay.c:1084 #, c-format msgid "unable to read %s" msgstr "kan %s niet lezen" -#: plugins/sudoers/iolog.c:282 plugins/sudoers/sudoreplay.c:588 -#: plugins/sudoers/timestamp.c:186 plugins/sudoers/timestamp.c:189 +#: plugins/sudoers/iolog.c:277 plugins/sudoers/sudoreplay.c:550 +#: plugins/sudoers/timestamp.c:298 plugins/sudoers/timestamp.c:301 #, c-format msgid "unable to write to %s" msgstr "kan %s niet schrijven" -#: plugins/sudoers/iolog.c:347 plugins/sudoers/iolog.c:545 +#: plugins/sudoers/iolog.c:342 plugins/sudoers/iolog.c:540 #, c-format msgid "unable to create %s" msgstr "kan %s niet aanmaken" -#: plugins/sudoers/ldap.c:406 +#: plugins/sudoers/ldap.c:428 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: poort te groot" -#: plugins/sudoers/ldap.c:431 -msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" -msgstr "sudo_ldap_conf_add_ports: ruimte ontoereikend bij uitbreiden hostbuf" - -#: plugins/sudoers/ldap.c:464 +#: plugins/sudoers/ldap.c:488 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "niet-ondersteund LDAP uri type: %s" -#: plugins/sudoers/ldap.c:495 +#: plugins/sudoers/ldap.c:515 msgid "unable to mix ldap and ldaps URIs" msgstr "kan ldap en ldaps URIs niet door elkaar gebruiken" -#: plugins/sudoers/ldap.c:499 plugins/sudoers/ldap.c:532 +#: plugins/sudoers/ldap.c:519 plugins/sudoers/ldap.c:555 msgid "starttls not supported when using ldaps" msgstr "starttls wordt niet ondersteund in combinatie met ldaps" -#: plugins/sudoers/ldap.c:517 -msgid "sudo_ldap_parse_uri: out of space building hostbuf" -msgstr "sudo_ldap_parse_uri: ruimte ontoereikend bij bouwen van hostbuf" - -#: plugins/sudoers/ldap.c:599 +#: plugins/sudoers/ldap.c:626 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "kan SSL cert en key db niet initialiseren: %s" -#: plugins/sudoers/ldap.c:602 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "u moet TLS_CERT in %s instellen om SSL te gebruiken" -#: plugins/sudoers/ldap.c:1093 +#: plugins/sudoers/ldap.c:1138 msgid "unable to get GMT time" msgstr "kan GMT-tijd niet verkrijgen" -#: plugins/sudoers/ldap.c:1099 +#: plugins/sudoers/ldap.c:1144 msgid "unable to format timestamp" msgstr "kan tijd niet juist opmaken" -#: plugins/sudoers/ldap.c:1107 -msgid "unable to build time filter" -msgstr "kan tijd-filter niet opbouwen" - -#: plugins/sudoers/ldap.c:1326 -msgid "sudo_ldap_build_pass1 allocation mismatch" -msgstr "sudo_ldap_build_pass1 reserveren mislukt" - -#: plugins/sudoers/ldap.c:1469 +#: plugins/sudoers/ldap.c:1830 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:1963 +#: plugins/sudoers/ldap.c:2372 #, c-format msgid "" "\n" @@ -855,7 +984,7 @@ "\n" "LDAP Role: %s\n" -#: plugins/sudoers/ldap.c:1965 +#: plugins/sudoers/ldap.c:2374 #, c-format msgid "" "\n" @@ -864,108 +993,108 @@ "\n" "LDAP Role: UNKNOWN\n" -#: plugins/sudoers/ldap.c:2012 +#: plugins/sudoers/ldap.c:2421 #, c-format msgid " Order: %s\n" msgstr " Volgorde: %s\n" -#: plugins/sudoers/ldap.c:2020 plugins/sudoers/parse.c:512 -#: plugins/sudoers/sssd.c:1297 +#: plugins/sudoers/ldap.c:2429 plugins/sudoers/parse.c:555 +#: plugins/sudoers/sssd.c:1417 #, c-format msgid " Commands:\n" msgstr " Opdrachten:\n" -#: plugins/sudoers/ldap.c:2570 +#: plugins/sudoers/ldap.c:2993 #, c-format msgid "unable to initialize LDAP: %s" msgstr "kan LDAP niet initialiseren: %s" -#: plugins/sudoers/ldap.c:2612 +#: plugins/sudoers/ldap.c:3029 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "start_tls opgegeven maar LDAP bibliotheken ondersteunen geen ldap_start_tls_s() of ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:2845 +#: plugins/sudoers/ldap.c:3286 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "ongeldig sudoOrder kenmerk: %s" -#: plugins/sudoers/linux_audit.c:57 +#: plugins/sudoers/linux_audit.c:52 msgid "unable to open audit system" msgstr "kan controlesysteem niet openen" -#: plugins/sudoers/linux_audit.c:94 +#: plugins/sudoers/linux_audit.c:93 msgid "unable to send audit message" msgstr "kan controleboodschap niet verzenden" -#: plugins/sudoers/logging.c:134 +#: plugins/sudoers/logging.c:106 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: plugins/sudoers/logging.c:162 +#: plugins/sudoers/logging.c:134 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s : (opdracht voortgezet) %s" -#: plugins/sudoers/logging.c:187 +#: plugins/sudoers/logging.c:159 #, c-format msgid "unable to open log file: %s: %s" msgstr "kan logbestand niet openen: %s: %s" -#: plugins/sudoers/logging.c:190 +#: plugins/sudoers/logging.c:162 #, c-format msgid "unable to lock log file: %s: %s" msgstr "kan logbestand niet vergrendelen: %s: %s" -#: plugins/sudoers/logging.c:242 +#: plugins/sudoers/logging.c:211 msgid "No user or host" msgstr "Geen gebruiker of computer" -#: plugins/sudoers/logging.c:244 +#: plugins/sudoers/logging.c:213 msgid "validation failure" msgstr "geldigheidsfout" -#: plugins/sudoers/logging.c:251 +#: plugins/sudoers/logging.c:220 msgid "user NOT in sudoers" msgstr "gebruiker NIET in sudoers" -#: plugins/sudoers/logging.c:253 +#: plugins/sudoers/logging.c:222 msgid "user NOT authorized on host" msgstr "gebruiker NIET aangemeld op computer" -#: plugins/sudoers/logging.c:255 +#: plugins/sudoers/logging.c:224 msgid "command not allowed" msgstr "opdracht niet toegestaan" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:259 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "%s in niet in het sudoersbestand. Dit incident zal worden gerapporteerd.\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:262 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "%s is niet toegestaan sudo te gebruiken op %s. Dit incident zal worden gerapporteerd.\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:266 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Excuseer, gebruiker %s mag sudo niet gebruiken op %s.\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:269 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" -msgstr "Excuseer, gebruiker %s man '%s%s%s' niet uitvoeren als %s%s%s op %s.\n" +msgstr "Excuseer, gebruiker %s mag '%s%s%s' niet uitvoeren als %s%s%s op %s.\n" -#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:407 -#: plugins/sudoers/sudoers.c:409 plugins/sudoers/sudoers.c:411 -#: plugins/sudoers/sudoers.c:413 plugins/sudoers/sudoers.c:1128 -#: plugins/sudoers/sudoers.c:1129 +#: plugins/sudoers/logging.c:306 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1222 +#: plugins/sudoers/sudoers.c:1224 #, c-format msgid "%s: command not found" msgstr "%s: opdracht niet gevonden" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:403 +#: plugins/sudoers/logging.c:308 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring `%s' found in '.'\n" @@ -974,71 +1103,71 @@ "`%s' gevonden in '.' wordt genegeerd.\n" "Gebruik `sudo ./%s' als `%s' is wat u wilt gebruiken." -#: plugins/sudoers/logging.c:353 +#: plugins/sudoers/logging.c:325 msgid "authentication failure" msgstr "aanmeldfout" -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:351 msgid "a password is required" msgstr "een wachtwoord is verplicht" -#: plugins/sudoers/logging.c:446 plugins/sudoers/logging.c:501 +#: plugins/sudoers/logging.c:422 plugins/sudoers/logging.c:484 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "%u ongeldige wachtwoord poging" msgstr[1] "%u ongeldige wachtwoord pogingen" -#: plugins/sudoers/logging.c:584 +#: plugins/sudoers/logging.c:572 msgid "unable to fork" msgstr "kan niet afsplitsen" -#: plugins/sudoers/logging.c:592 plugins/sudoers/logging.c:648 +#: plugins/sudoers/logging.c:580 plugins/sudoers/logging.c:636 #, c-format msgid "unable to fork: %m" msgstr "kan niet afsplitsen: %m" -#: plugins/sudoers/logging.c:638 +#: plugins/sudoers/logging.c:626 #, c-format msgid "unable to open pipe: %m" msgstr "kan pipe niet openen: %m" -#: plugins/sudoers/logging.c:663 +#: plugins/sudoers/logging.c:651 #, c-format msgid "unable to dup stdin: %m" msgstr "kan stdin niet klonen: %m" -#: plugins/sudoers/logging.c:698 +#: plugins/sudoers/logging.c:689 #, c-format msgid "unable to execute %s: %m" msgstr "kan %s niet uitvoeren: %m" -#: plugins/sudoers/match.c:627 +#: plugins/sudoers/match.c:606 #, c-format msgid "unsupported digest type %d for %s" msgstr "niet-ondersteund type controlegetal %d voor %s" -#: plugins/sudoers/match.c:656 +#: plugins/sudoers/match.c:639 #, c-format msgid "%s: read error" msgstr "%s: leesfout" -#: plugins/sudoers/match.c:670 +#: plugins/sudoers/match.c:653 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "controlegetal voor %s (%s) is niet in de juiste vorm: %s" -#: plugins/sudoers/parse.c:123 +#: plugins/sudoers/parse.c:114 #, c-format msgid "parse error in %s near line %d" msgstr "ontleedfout in %s bij regel %d" -#: plugins/sudoers/parse.c:126 +#: plugins/sudoers/parse.c:117 #, c-format msgid "parse error in %s" msgstr "ontleedfout in %s" -#: plugins/sudoers/parse.c:459 +#: plugins/sudoers/parse.c:502 #, c-format msgid "" "\n" @@ -1047,49 +1176,43 @@ "\n" "Sudoers item:\n" -#: plugins/sudoers/parse.c:460 +#: plugins/sudoers/parse.c:503 #, c-format msgid " RunAsUsers: " msgstr " RunAsUsers: " -#: plugins/sudoers/parse.c:474 +#: plugins/sudoers/parse.c:517 #, c-format msgid " RunAsGroups: " msgstr " RunAsGroups: " -#: plugins/sudoers/parse.c:483 +#: plugins/sudoers/parse.c:526 #, c-format msgid " Options: " msgstr " Opties: " -#: plugins/sudoers/policy.c:109 plugins/sudoers/policy.c:118 -#: plugins/sudoers/policy.c:127 plugins/sudoers/policy.c:151 -#: plugins/sudoers/policy.c:263 plugins/sudoers/policy.c:283 -#: plugins/sudoers/policy.c:292 plugins/sudoers/policy.c:322 -#: plugins/sudoers/policy.c:332 plugins/sudoers/policy.c:341 -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" +#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:253 +#, fuzzy +#| msgid "unable to parse groups for %s" +msgid "unable to parse network address list" +msgstr "kan groepen voor %s niet ontleden" -#: plugins/sudoers/policy.c:569 plugins/sudoers/visudo.c:773 +#: plugins/sudoers/policy.c:636 plugins/sudoers/visudo.c:839 #, c-format msgid "unable to execute %s" msgstr "kan %s niet uitvoeren" -#: plugins/sudoers/policy.c:701 +#: plugins/sudoers/policy.c:769 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Sudoers beleidsplugin versie %s\n" -#: plugins/sudoers/policy.c:703 +#: plugins/sudoers/policy.c:771 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Versie van sudoers bestandsgrammatica %d\n" -#: plugins/sudoers/policy.c:707 +#: plugins/sudoers/policy.c:775 #, c-format msgid "" "\n" @@ -1098,374 +1221,418 @@ "\n" "Sudoers pad: %s\n" -#: plugins/sudoers/policy.c:710 +#: plugins/sudoers/policy.c:778 #, c-format msgid "nsswitch path: %s\n" msgstr "nsswitch pad: %s\n" -#: plugins/sudoers/policy.c:712 +#: plugins/sudoers/policy.c:780 #, c-format msgid "ldap.conf path: %s\n" msgstr "ldap.conf pad: %s\n" -#: plugins/sudoers/policy.c:713 +#: plugins/sudoers/policy.c:781 #, c-format msgid "ldap.secret path: %s\n" msgstr "ldap.secret pad: %s\n" -#: plugins/sudoers/pwutil.c:149 +#: plugins/sudoers/policy.c:814 +#, c-format +msgid "unable to register hook of type %d (version %d.%d)" +msgstr "" + +#: plugins/sudoers/pwutil.c:136 plugins/sudoers/pwutil.c:153 +#, fuzzy, c-format +#| msgid "unable to cache uid %u, already exists" +msgid "unable to cache uid %u, out of memory" +msgstr "kan gebruikersnummer %u niet bufferen, bestaat reeds" + +#: plugins/sudoers/pwutil.c:147 #, c-format msgid "unable to cache uid %u, already exists" msgstr "kan gebruikersnummer %u niet bufferen, bestaat reeds" -#: plugins/sudoers/pwutil.c:194 +#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:207 +#: plugins/sudoers/pwutil.c:250 plugins/sudoers/pwutil.c:294 +#, fuzzy, c-format +#| msgid "unable to cache user %s, already exists" +msgid "unable to cache user %s, out of memory" +msgstr "kan gebruiker %s niet bufferen, bestaat reeds" + +#: plugins/sudoers/pwutil.c:202 #, c-format msgid "unable to cache user %s, already exists" msgstr "kan gebruiker %s niet bufferen, bestaat reeds" -#: plugins/sudoers/pwutil.c:400 +#: plugins/sudoers/pwutil.c:427 plugins/sudoers/pwutil.c:444 +#, fuzzy, c-format +#| msgid "unable to cache gid %u, already exists" +msgid "unable to cache gid %u, out of memory" +msgstr "kan groepsnummer %u niet bufferen, bestaat reeds" + +#: plugins/sudoers/pwutil.c:438 #, c-format msgid "unable to cache gid %u, already exists" msgstr "kan groepsnummer %u niet bufferen, bestaat reeds" -#: plugins/sudoers/pwutil.c:439 +#: plugins/sudoers/pwutil.c:476 plugins/sudoers/pwutil.c:492 +#: plugins/sudoers/pwutil.c:524 plugins/sudoers/pwutil.c:565 +#, fuzzy, c-format +#| msgid "unable to cache group %s, already exists" +msgid "unable to cache group %s, out of memory" +msgstr "kan groep %s niet bufferen, bestaat reeds" + +#: plugins/sudoers/pwutil.c:487 #, c-format msgid "unable to cache group %s, already exists" msgstr "kan groep %s niet bufferen, bestaat reeds" -#: plugins/sudoers/pwutil.c:605 plugins/sudoers/pwutil.c:631 +#: plugins/sudoers/pwutil.c:676 plugins/sudoers/pwutil.c:710 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "kan groepslijst voor %s niet bufferen, bestaat reeds" -#: plugins/sudoers/pwutil.c:627 +#: plugins/sudoers/pwutil.c:682 plugins/sudoers/pwutil.c:715 +#, fuzzy, c-format +#| msgid "unable to cache group list for %s, already exists" +msgid "unable to cache group list for %s, out of memory" +msgstr "kan groepslijst voor %s niet bufferen, bestaat reeds" + +#: plugins/sudoers/pwutil.c:705 #, c-format msgid "unable to parse groups for %s" msgstr "kan groepen voor %s niet ontleden" -#: plugins/sudoers/set_perms.c:122 plugins/sudoers/set_perms.c:447 -#: plugins/sudoers/set_perms.c:850 plugins/sudoers/set_perms.c:1147 -#: plugins/sudoers/set_perms.c:1439 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 +#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 +#: plugins/sudoers/set_perms.c:1430 msgid "perm stack overflow" msgstr "permanente stapeloverloop" -#: plugins/sudoers/set_perms.c:130 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:1076 -#: plugins/sudoers/set_perms.c:1155 plugins/sudoers/set_perms.c:1372 -#: plugins/sudoers/set_perms.c:1447 plugins/sudoers/set_perms.c:1536 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 +#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 +#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 +#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 +#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 msgid "perm stack underflow" msgstr "permanente stapelonderloop" -#: plugins/sudoers/set_perms.c:189 plugins/sudoers/set_perms.c:502 -#: plugins/sudoers/set_perms.c:1206 plugins/sudoers/set_perms.c:1479 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:493 +#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 msgid "unable to change to root gid" msgstr "kan niet wijzigen naar rootgroupsnummer" -#: plugins/sudoers/set_perms.c:278 plugins/sudoers/set_perms.c:599 -#: plugins/sudoers/set_perms.c:987 plugins/sudoers/set_perms.c:1283 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:590 +#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 msgid "unable to change to runas gid" msgstr "kan niet wijzigen naar doelgroupsnummer" -#: plugins/sudoers/set_perms.c:283 plugins/sudoers/set_perms.c:604 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:595 +#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 msgid "unable to set runas group vector" msgstr "kan doelgroepvector niet instellen" -#: plugins/sudoers/set_perms.c:294 plugins/sudoers/set_perms.c:615 -#: plugins/sudoers/set_perms.c:1001 plugins/sudoers/set_perms.c:1297 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:606 +#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 msgid "unable to change to runas uid" msgstr "kan niet wijzigen naar doelgebruikersnummer" -#: plugins/sudoers/set_perms.c:312 plugins/sudoers/set_perms.c:633 -#: plugins/sudoers/set_perms.c:1017 plugins/sudoers/set_perms.c:1313 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:624 +#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 msgid "unable to change to sudoers gid" msgstr "kan niet wijzigen naar sudoers groupsnummer" -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 msgid "too many processes" msgstr "te veel taken" -#: plugins/sudoers/solaris_audit.c:47 +#: plugins/sudoers/solaris_audit.c:51 msgid "unable to get current working directory" msgstr "kan huidige werkdirectory niet vaststellen" -#: plugins/sudoers/solaris_audit.c:55 +#: plugins/sudoers/solaris_audit.c:59 #, c-format msgid "truncated audit path user_cmnd: %s" msgstr "" -#: plugins/sudoers/solaris_audit.c:62 +#: plugins/sudoers/solaris_audit.c:66 #, c-format msgid "truncated audit path argv[0]: %s" msgstr "" -#: plugins/sudoers/solaris_audit.c:111 +#: plugins/sudoers/solaris_audit.c:115 msgid "audit_failure message too long" msgstr "boodschap voor audit_failure is te lang" -#: plugins/sudoers/sssd.c:252 +#: plugins/sudoers/sssd.c:333 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "Kan SSS-bron niet initialiseren. Is SSSD op uw machine geinstalleerd?" -#: plugins/sudoers/sssd.c:259 plugins/sudoers/sssd.c:267 -#: plugins/sudoers/sssd.c:275 plugins/sudoers/sssd.c:283 -#: plugins/sudoers/sssd.c:291 +#: plugins/sudoers/sssd.c:341 plugins/sudoers/sssd.c:350 +#: plugins/sudoers/sssd.c:359 plugins/sudoers/sssd.c:368 +#: plugins/sudoers/sssd.c:377 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "kan symbool \"%s\" niet vinden in %s" -#: plugins/sudoers/sudo_nss.c:296 +#: plugins/sudoers/sudo_nss.c:290 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Overeenkomende standaarditems voor %s op %s:\n" -#: plugins/sudoers/sudo_nss.c:309 +#: plugins/sudoers/sudo_nss.c:308 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Runas en opdrachtspecifieke standaarden voor %s:\n" -#: plugins/sudoers/sudo_nss.c:322 +#: plugins/sudoers/sudo_nss.c:326 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "Gebruiker %s mag de volgende opdrachten uitvoeren op %s:\n" -#: plugins/sudoers/sudo_nss.c:331 +#: plugins/sudoers/sudo_nss.c:339 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Gebruiker %s in niet toegestaan sudo te gebruiken op %s.\n" -#: plugins/sudoers/sudoers.c:160 plugins/sudoers/sudoers.c:201 -#: plugins/sudoers/sudoers.c:726 +#: plugins/sudoers/sudoers.c:172 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/visudo.c:223 plugins/sudoers/visudo.c:565 +#, fuzzy +#| msgid "%s: unable to initialize credential cache: %s" +msgid "unable to initialize sudoers default values" +msgstr "%s: kan cache voor aanmeldingsgegevens: %s niet initialiseren" + +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:239 +#: plugins/sudoers/sudoers.c:833 msgid "problem with defaults entries" msgstr "probleem met standaarditems" -#: plugins/sudoers/sudoers.c:167 +#: plugins/sudoers/sudoers.c:205 msgid "no valid sudoers sources found, quitting" msgstr "geen geldige sudoers-bronnen gevonden, afsluiten" -#: plugins/sudoers/sudoers.c:233 +#: plugins/sudoers/sudoers.c:275 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers geeft aan dat root sudo niet mag gebruiken" -#: plugins/sudoers/sudoers.c:278 +#: plugins/sudoers/sudoers.c:332 msgid "you are not permitted to use the -C option" msgstr "u mag de optie -C niet gebruiken" -#: plugins/sudoers/sudoers.c:336 +#: plugins/sudoers/sudoers.c:396 #, c-format msgid "timestamp owner (%s): No such user" msgstr "tijd-eigenaar (%s): Gebruiker bestaat niet" -#: plugins/sudoers/sudoers.c:350 +#: plugins/sudoers/sudoers.c:410 msgid "no tty" msgstr "geen terminal" -#: plugins/sudoers/sudoers.c:351 +#: plugins/sudoers/sudoers.c:411 msgid "sorry, you must have a tty to run sudo" msgstr "excuseer, u moet een terminal hebben om sudo te gebruiken" -#: plugins/sudoers/sudoers.c:402 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "opdracht in huidige map" -#: plugins/sudoers/sudoers.c:422 +#: plugins/sudoers/sudoers.c:486 msgid "sorry, you are not allowed to preserve the environment" msgstr "excuseer, u mag de omgeving niet behouden" -#: plugins/sudoers/sudoers.c:674 +#: plugins/sudoers/sudoers.c:778 msgid "command too long" msgstr "opdracht te lang" -#: plugins/sudoers/sudoers.c:779 plugins/sudoers/visudo.c:333 -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/sudoers.c:886 plugins/sudoers/visudo.c:426 +#: plugins/sudoers/visudo.c:665 #, c-format msgid "unable to stat %s" msgstr "kan stat %s niet uitvoeren" -#: plugins/sudoers/sudoers.c:783 +#: plugins/sudoers/sudoers.c:890 #, c-format msgid "%s is not a regular file" msgstr "%s in geen regulier bestand" -#: plugins/sudoers/sudoers.c:787 plugins/sudoers/timestamp.c:289 toke.l:945 +#: plugins/sudoers/sudoers.c:894 plugins/sudoers/timestamp.c:225 toke.l:947 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s is eigendom van gebruikersnummer %u, moet zijn %u" -#: plugins/sudoers/sudoers.c:791 toke.l:952 +#: plugins/sudoers/sudoers.c:898 toke.l:954 #, c-format msgid "%s is world writable" msgstr "%s kan door iedereen worden geschreven" -#: plugins/sudoers/sudoers.c:795 toke.l:957 +#: plugins/sudoers/sudoers.c:902 toke.l:959 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s is eigendom van groupsnummer %u, moet zijn %u" -#: plugins/sudoers/sudoers.c:826 +#: plugins/sudoers/sudoers.c:933 #, c-format msgid "only root can use `-c %s'" msgstr "alleen root kan `-c %s' gebruiken" -#: plugins/sudoers/sudoers.c:845 +#: plugins/sudoers/sudoers.c:952 #, c-format msgid "unknown login class: %s" msgstr "onbekende loginklasse: %s" -#: plugins/sudoers/sudoers.c:889 plugins/sudoers/sudoers.c:904 +#: plugins/sudoers/sudoers.c:1031 plugins/sudoers/sudoers.c:1059 #, c-format msgid "unable to resolve host %s" msgstr "kan computernaam %s niet herleiden" -#: plugins/sudoers/sudoers.c:986 plugins/sudoers/testsudoers.c:388 +#: plugins/sudoers/sudoers.c:1126 plugins/sudoers/testsudoers.c:385 #, c-format msgid "unknown group: %s" msgstr "onbekende groep: %s" -#: plugins/sudoers/sudoreplay.c:280 +#: plugins/sudoers/sudoreplay.c:232 #, c-format msgid "invalid filter option: %s" msgstr "ongeldige filteroptie: %s" -#: plugins/sudoers/sudoreplay.c:293 +#: plugins/sudoers/sudoreplay.c:245 #, c-format msgid "invalid max wait: %s" msgstr "ongeldige maximale wacht: %s" -#: plugins/sudoers/sudoreplay.c:299 +#: plugins/sudoers/sudoreplay.c:251 #, c-format msgid "invalid speed factor: %s" msgstr "ongeldige snelheidsfactor: %s" -#: plugins/sudoers/sudoreplay.c:302 plugins/sudoers/visudo.c:190 +#: plugins/sudoers/sudoreplay.c:254 plugins/sudoers/visudo.c:180 #, c-format msgid "%s version %s\n" msgstr "%s versie %s\n" -#: plugins/sudoers/sudoreplay.c:334 +#: plugins/sudoers/sudoreplay.c:286 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/timing: %s" -#: plugins/sudoers/sudoreplay.c:340 +#: plugins/sudoers/sudoreplay.c:292 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/timing: %s" -#: plugins/sudoers/sudoreplay.c:356 +#: plugins/sudoers/sudoreplay.c:308 #, c-format msgid "Replaying sudo session: %s\n" msgstr "Bekijken van sudo sessie: %s\n" -#: plugins/sudoers/sudoreplay.c:362 +#: plugins/sudoers/sudoreplay.c:314 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Waarschuwing: uw terminal is te klein om de log goed af te bekijken.\n" -#: plugins/sudoers/sudoreplay.c:363 +#: plugins/sudoers/sudoreplay.c:315 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "Logverhouding is %d x %d, de verhouding van uw terminal is %d x %d." -#: plugins/sudoers/sudoreplay.c:418 +#: plugins/sudoers/sudoreplay.c:368 msgid "unable to set tty to raw mode" msgstr "kan terminal niet instellen voor ruwe modus" -#: plugins/sudoers/sudoreplay.c:449 +#: plugins/sudoers/sudoreplay.c:401 #, c-format msgid "invalid timing file line: %s" msgstr "ongeldige timing bestandsregel: %s" -#: plugins/sudoers/sudoreplay.c:655 plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:611 plugins/sudoers/sudoreplay.c:636 #, c-format msgid "ambiguous expression \"%s\"" msgstr "dubbelzinnige expressie \"%s\"" -#: plugins/sudoers/sudoreplay.c:702 +#: plugins/sudoers/sudoreplay.c:658 msgid "unmatched ')' in expression" msgstr "onvergezelde ')' in expressie" -#: plugins/sudoers/sudoreplay.c:706 +#: plugins/sudoers/sudoreplay.c:662 #, c-format msgid "unknown search term \"%s\"" msgstr "onbekende zoekterm \"%s\"" -#: plugins/sudoers/sudoreplay.c:720 +#: plugins/sudoers/sudoreplay.c:677 #, c-format msgid "%s requires an argument" msgstr "%s heeft een argument nodig" -#: plugins/sudoers/sudoreplay.c:724 plugins/sudoers/sudoreplay.c:1096 +#: plugins/sudoers/sudoreplay.c:680 plugins/sudoers/sudoreplay.c:1060 #, c-format msgid "invalid regular expression: %s" msgstr "ongeldige reguliere expressie: %s" -#: plugins/sudoers/sudoreplay.c:730 +#: plugins/sudoers/sudoreplay.c:684 #, c-format msgid "could not parse date \"%s\"" msgstr "kan datum niet ontleden \"%s\"" -#: plugins/sudoers/sudoreplay.c:739 +#: plugins/sudoers/sudoreplay.c:693 msgid "unmatched '(' in expression" msgstr "onvergezelde '(' in expressie" -#: plugins/sudoers/sudoreplay.c:741 +#: plugins/sudoers/sudoreplay.c:695 msgid "illegal trailing \"or\"" msgstr "ongeldige afsluitende \"or\"" -#: plugins/sudoers/sudoreplay.c:743 +#: plugins/sudoers/sudoreplay.c:697 msgid "illegal trailing \"!\"" msgstr "ongeldige afsluitende \"!\"" -#: plugins/sudoers/sudoreplay.c:796 +#: plugins/sudoers/sudoreplay.c:746 #, c-format msgid "unknown search type %d" msgstr "onbekende zoekterm %d" -#: plugins/sudoers/sudoreplay.c:833 +#: plugins/sudoers/sudoreplay.c:784 #, c-format msgid "%s: invalid log file" msgstr "%s: ongeldig logbestand" -#: plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:802 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: tijdveld mist" -#: plugins/sudoers/sudoreplay.c:858 +#: plugins/sudoers/sudoreplay.c:809 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: tijdstempel %s: %s" -#: plugins/sudoers/sudoreplay.c:865 +#: plugins/sudoers/sudoreplay.c:816 #, c-format msgid "%s: user field is missing" msgstr "%s: gebruikersveld mist" -#: plugins/sudoers/sudoreplay.c:873 +#: plugins/sudoers/sudoreplay.c:825 #, c-format msgid "%s: runas user field is missing" msgstr "%s: runas gebuikersveld mist" -#: plugins/sudoers/sudoreplay.c:881 +#: plugins/sudoers/sudoreplay.c:834 #, c-format msgid "%s: runas group field is missing" msgstr "%s: runas groepveld mist" -#: plugins/sudoers/sudoreplay.c:1236 +#: plugins/sudoers/sudoreplay.c:1197 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "gebruik: %s [-h] [-d map] [-m max_wacht] [-s snelheidsfactor] ID\n" -#: plugins/sudoers/sudoreplay.c:1239 +#: plugins/sudoers/sudoreplay.c:1200 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "gebruik: %s [-h] [-d map] -l [zoek expressie]\n" -#: plugins/sudoers/sudoreplay.c:1248 +#: plugins/sudoers/sudoreplay.c:1209 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1474,7 +1641,7 @@ "%s - sudo sessielogs bekijken\n" "\n" -#: plugins/sudoers/sudoreplay.c:1250 +#: plugins/sudoers/sudoreplay.c:1211 msgid "" "\n" "Options:\n" @@ -1497,11 +1664,11 @@ " -s, --speed=num snelheid van uitvoer verhogen of verlagen\n" " -V, --version geef versieinformatie weer en sluit af" -#: plugins/sudoers/testsudoers.c:327 +#: plugins/sudoers/testsudoers.c:324 msgid "\thost unmatched" msgstr "\tcomputer komt niet overeen" -#: plugins/sudoers/testsudoers.c:330 +#: plugins/sudoers/testsudoers.c:327 msgid "" "\n" "Command allowed" @@ -1509,7 +1676,7 @@ "\n" "Opdracht toegestaan" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command denied" @@ -1517,7 +1684,7 @@ "\n" "Opdracht niet toegestaan" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command unmatched" @@ -1525,115 +1692,133 @@ "\n" "Opdracht komt niet overeen" -#: plugins/sudoers/timestamp.c:197 -#, c-format -msgid "unable to truncate time stamp file to %lld bytes" -msgstr "kan tijdbestand niet inkorten naar %lld bytes" - -#: plugins/sudoers/timestamp.c:297 +#: plugins/sudoers/timestamp.c:233 #, c-format msgid "%s is group writable" msgstr "%s kan door groep worden gewijzigd" -#: plugins/sudoers/timestamp.c:318 +#: plugins/sudoers/timestamp.c:309 #, c-format -msgid "timestamp path too long: %s/%s" -msgstr "tijd voor pad te lang: %s/%s" +msgid "unable to truncate time stamp file to %lld bytes" +msgstr "kan tijdbestand niet inkorten naar %lld bytes" -#: plugins/sudoers/timestamp.c:498 +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:486 plugins/sudoers/visudo.c:492 +#, fuzzy +#| msgid "unable to read fwtk config" +msgid "unable to read the clock" +msgstr "kan fwtk configuratie niet lezen" + +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "tijdstempel uit de toekomst wordt genegeerd" -#: plugins/sudoers/timestamp.c:510 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "tijd is te ver in de toekomst: %20.20s" -#: plugins/sudoers/timestamp.c:613 plugins/sudoers/timestamp.c:634 +#: plugins/sudoers/timestamp.c:863 +#, fuzzy, c-format +#| msgid "unable to truncate time stamp file to %lld bytes" +msgid "unable to lock time stamp file %s" +msgstr "kan tijdbestand niet inkorten naar %lld bytes" + +#: plugins/sudoers/timestamp.c:906 plugins/sudoers/timestamp.c:926 #, fuzzy, c-format #| msgid "timestamp path too long: %s" msgid "lecture status path too long: %s/%s" msgstr "tijd voor pad te lang: %s" -#: plugins/sudoers/visudo.c:192 +#: plugins/sudoers/visudo.c:182 #, c-format msgid "%s grammar version %d\n" msgstr "%s grammaticaversie %d\n" -#: plugins/sudoers/visudo.c:263 plugins/sudoers/visudo.c:552 +#: plugins/sudoers/visudo.c:254 plugins/sudoers/visudo.c:617 #, c-format msgid "press return to edit %s: " msgstr "toets enter om te bewerken %s: " -#: plugins/sudoers/visudo.c:349 plugins/sudoers/visudo.c:355 +#: plugins/sudoers/visudo.c:319 +#, c-format +msgid "specified editor (%s) doesn't exist" +msgstr "opgegeven editor (%s) bestaat niet" + +#: plugins/sudoers/visudo.c:337 +#, c-format +msgid "no editor found (editor path = %s)" +msgstr "geen editor gevonden (editorpad = %s)" + +#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:454 msgid "write error" msgstr "schrijffout" -#: plugins/sudoers/visudo.c:439 +#: plugins/sudoers/visudo.c:499 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "kan status van tijdelijk bestand (%s) niet vaststellen, %s ongewijzigd" -#: plugins/sudoers/visudo.c:444 +#: plugins/sudoers/visudo.c:506 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "tijdelijk bestand (%s) leeg, %s ongewijzigd" -#: plugins/sudoers/visudo.c:450 +#: plugins/sudoers/visudo.c:512 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "editor (%s) mislukt, %s ongewijzigd" -#: plugins/sudoers/visudo.c:472 +#: plugins/sudoers/visudo.c:534 #, c-format msgid "%s unchanged" msgstr "%s ongewijzigd" -#: plugins/sudoers/visudo.c:497 +#: plugins/sudoers/visudo.c:560 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "kan tijdelijk bestand (%s) niet openen, %s ongewijzigd." -#: plugins/sudoers/visudo.c:507 +#: plugins/sudoers/visudo.c:571 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "kan tijdelijke bestand (%s) niet ontleden, onbekende fout" -#: plugins/sudoers/visudo.c:543 +#: plugins/sudoers/visudo.c:608 #, c-format msgid "internal error, unable to find %s in list!" msgstr "interne fout, kan %s niet in de lijst vinden!" -#: plugins/sudoers/visudo.c:601 plugins/sudoers/visudo.c:610 +#: plugins/sudoers/visudo.c:667 plugins/sudoers/visudo.c:676 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "kan %s niet wijzigen (gebruikers- of groupsnummer) naar (%u, %u)" -#: plugins/sudoers/visudo.c:605 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:671 plugins/sudoers/visudo.c:681 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "kan modus van %s niet wijzigen naar 0%o" -#: plugins/sudoers/visudo.c:632 +#: plugins/sudoers/visudo.c:698 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s en %s niet op hetzelfde bestandssyteem, gebuikt mv om te hernoemen" -#: plugins/sudoers/visudo.c:646 +#: plugins/sudoers/visudo.c:712 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "opdracht mislukt: '%s %s %s', %s ongewijzigd" -#: plugins/sudoers/visudo.c:656 +#: plugins/sudoers/visudo.c:722 #, c-format msgid "error renaming %s, %s unchanged" msgstr "fout bij hernoemen %s, %s ongewijzigd" -#: plugins/sudoers/visudo.c:718 +#: plugins/sudoers/visudo.c:784 msgid "What now? " msgstr "Wat nu? " -#: plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:798 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1645,87 +1830,72 @@ " e(x)it zonder de wijzigingen op te slaan\n" " (Q)uit en sla wijziging op in het sudoers bestand (GEVAAR!)\n" -#: plugins/sudoers/visudo.c:780 +#: plugins/sudoers/visudo.c:846 #, c-format msgid "unable to run %s" msgstr "kan %s niet gebruiken" -#: plugins/sudoers/visudo.c:806 +#: plugins/sudoers/visudo.c:872 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: verkeerde eigenaar (gebruikers-, groepsnummer) zou moeten zijn (%u, %u)\n" -#: plugins/sudoers/visudo.c:813 +#: plugins/sudoers/visudo.c:879 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: verkeerde permissies, mout zijn modus 0%o\n" -#: plugins/sudoers/visudo.c:838 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:904 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "failed to parse %s file, unknown error" msgstr "kon %sbestand niet ontleden, onbekende fout" -#: plugins/sudoers/visudo.c:854 plugins/sudoers/visudo_json.c:1054 +#: plugins/sudoers/visudo.c:920 plugins/sudoers/visudo_json.c:1041 #, c-format msgid "parse error in %s near line %d\n" msgstr "fout bij ontleden van %s bij regel %d\n" -#: plugins/sudoers/visudo.c:857 plugins/sudoers/visudo_json.c:1057 +#: plugins/sudoers/visudo.c:923 plugins/sudoers/visudo_json.c:1044 #, c-format msgid "parse error in %s\n" msgstr "fout bij ontleden van %s\n" -#: plugins/sudoers/visudo.c:865 plugins/sudoers/visudo.c:872 +#: plugins/sudoers/visudo.c:931 plugins/sudoers/visudo.c:938 #, c-format msgid "%s: parsed OK\n" msgstr "%s: ontleden geslaagd\n" -#: plugins/sudoers/visudo.c:918 +#: plugins/sudoers/visudo.c:985 #, c-format msgid "%s busy, try again later" msgstr "%s bezig, probeer later opnieuw" -#: plugins/sudoers/visudo.c:962 -#, c-format -msgid "specified editor (%s) doesn't exist" -msgstr "opgegeven editor (%s) bestaat niet" - -#: plugins/sudoers/visudo.c:985 -#, c-format -msgid "unable to stat editor (%s)" -msgstr "kan status van editor (%s) niet verkrijgen" - -#: plugins/sudoers/visudo.c:1033 -#, c-format -msgid "no editor found (editor path = %s)" -msgstr "geen editor gevonden (editorpad = %s)" - -#: plugins/sudoers/visudo.c:1136 +#: plugins/sudoers/visudo.c:1081 #, c-format msgid "Error: cycle in %s `%s'" msgstr "Fout: cyclus in %s '%s'" -#: plugins/sudoers/visudo.c:1137 +#: plugins/sudoers/visudo.c:1082 #, c-format msgid "Warning: cycle in %s `%s'" msgstr "Waarschuwing: cyclus in %s '%s'" -#: plugins/sudoers/visudo.c:1141 +#: plugins/sudoers/visudo.c:1086 #, c-format msgid "Error: %s `%s' referenced but not defined" msgstr "Fout: %s '%s' wordt naar verwezen, maar is niet gedefinieerd" -#: plugins/sudoers/visudo.c:1142 +#: plugins/sudoers/visudo.c:1087 #, c-format msgid "Warning: %s `%s' referenced but not defined" msgstr "Waarschuwing: %s `%s' wordt naar verwezen, maar is niet gedefinieerd" -#: plugins/sudoers/visudo.c:1281 +#: plugins/sudoers/visudo.c:1230 #, c-format msgid "Warning: unused %s `%s'" msgstr "Waarschuwing: %s '%s' wordt niet gebruikt" -#: plugins/sudoers/visudo.c:1394 +#: plugins/sudoers/visudo.c:1343 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -1734,7 +1904,7 @@ "%s - bewerk het sudoersbestand voorzichtig\n" "\n" -#: plugins/sudoers/visudo.c:1396 +#: plugins/sudoers/visudo.c:1345 msgid "" "\n" "Options:\n" @@ -1755,15 +1925,30 @@ " -s, --strict stricte controle van syntaxis\n" " -V, --verion geef versieinformatie weer en sluit af" -#: plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo_json.c:1018 #, c-format msgid "%s: input and output files must be different" msgstr "%s: in- en uitvoerbestanden moeten verschillen" -#: toke.l:915 +#: toke.l:918 msgid "too many levels of includes" msgstr "te veel niveaus van insluitingen" +#~ msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" +#~ msgstr "sudo_ldap_conf_add_ports: ruimte ontoereikend bij uitbreiden hostbuf" + +#~ msgid "sudo_ldap_parse_uri: out of space building hostbuf" +#~ msgstr "sudo_ldap_parse_uri: ruimte ontoereikend bij bouwen van hostbuf" + +#~ msgid "sudo_ldap_build_pass1 allocation mismatch" +#~ msgstr "sudo_ldap_build_pass1 reserveren mislukt" + +#~ msgid "timestamp path too long: %s/%s" +#~ msgstr "tijd voor pad te lang: %s/%s" + +#~ msgid "unable to stat editor (%s)" +#~ msgstr "kan status van editor (%s) niet verkrijgen" + #~ msgid "Password:" #~ msgstr "Wachtwoord:" @@ -1845,9 +2030,6 @@ #~ msgid "au_to_text: failed" #~ msgstr "au_to_text: failed" -#~ msgid "unable to allocate memory" -#~ msgstr "kan geen geheugen reserveren" - #~ msgid "unable to set locale to \"%s\", using \"C\"" #~ msgstr "kan taaldefinitie niet instellen op \"%s\", gebruikt wordt \"C\"" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/plugins/sudoers/po/pl.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/plugins/sudoers/po/pl.mo differ diff -Nru sudo-1.8.12/plugins/sudoers/po/pl.po sudo-1.8.16/plugins/sudoers/po/pl.po --- sudo-1.8.12/plugins/sudoers/po/pl.po 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/po/pl.po 2016-03-17 16:13:10.000000000 +0000 @@ -1,13 +1,13 @@ # Polish translation for sudo/sudoers. # This file is put in the public domain. -# Jakub Bogusz , 2011-2014. +# Jakub Bogusz , 2011-2016. # msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.12b3\n" -"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-11-20 13:33-0700\n" -"PO-Revision-Date: 2014-11-22 08:54+0100\n" +"Project-Id-Version: sudoers 1.8.16b1\n" +"Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" +"POT-Creation-Date: 2016-02-19 15:48-0700\n" +"PO-Revision-Date: 2016-02-25 20:01+0100\n" "Last-Translator: Jakub Bogusz \n" "Language-Team: Polish \n" "Language: pl\n" @@ -40,46 +40,172 @@ msgid "Sorry, try again." msgstr "Niestety, proszę spróbować ponownie." -#: gram.y:379 +#: gram.y:183 gram.y:201 gram.y:207 gram.y:213 gram.y:219 gram.y:225 +#: gram.y:241 gram.y:248 gram.y:255 gram.y:262 gram.y:269 gram.y:285 +#: gram.y:308 gram.y:315 gram.y:322 gram.y:329 gram.y:336 gram.y:391 +#: gram.y:399 gram.y:409 gram.y:439 gram.y:446 gram.y:453 gram.y:460 +#: gram.y:572 gram.y:579 gram.y:588 gram.y:597 gram.y:614 gram.y:670 +#: gram.y:677 gram.y:684 gram.y:692 gram.y:784 gram.y:791 gram.y:798 +#: gram.y:805 gram.y:812 gram.y:838 gram.y:845 gram.y:852 gram.y:1136 +#: gram.y:1143 plugins/sudoers/alias.c:123 plugins/sudoers/alias.c:136 +#: plugins/sudoers/auth/bsdauth.c:141 plugins/sudoers/auth/kerb5.c:119 +#: plugins/sudoers/auth/kerb5.c:145 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/auth/sia.c:59 +#: plugins/sudoers/defaults.c:518 plugins/sudoers/defaults.c:722 +#: plugins/sudoers/defaults.c:882 plugins/sudoers/editor.c:64 +#: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:92 +#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/iolog.c:586 +#: plugins/sudoers/iolog.c:618 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:446 plugins/sudoers/ldap.c:477 +#: plugins/sudoers/ldap.c:529 plugins/sudoers/ldap.c:562 +#: plugins/sudoers/ldap.c:917 plugins/sudoers/ldap.c:1064 +#: plugins/sudoers/ldap.c:1384 plugins/sudoers/ldap.c:1542 +#: plugins/sudoers/ldap.c:1620 plugins/sudoers/ldap.c:1756 +#: plugins/sudoers/ldap.c:1780 plugins/sudoers/ldap.c:1810 +#: plugins/sudoers/ldap.c:1863 plugins/sudoers/ldap.c:1878 +#: plugins/sudoers/ldap.c:1974 plugins/sudoers/ldap.c:2007 +#: plugins/sudoers/ldap.c:2160 plugins/sudoers/ldap.c:2257 +#: plugins/sudoers/ldap.c:3063 plugins/sudoers/ldap.c:3096 +#: plugins/sudoers/ldap.c:3407 plugins/sudoers/ldap.c:3435 +#: plugins/sudoers/ldap.c:3451 plugins/sudoers/ldap.c:3540 +#: plugins/sudoers/ldap.c:3556 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:666 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:508 +#: plugins/sudoers/match.c:544 plugins/sudoers/match.c:742 +#: plugins/sudoers/match.c:799 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:393 +#: plugins/sudoers/policy.c:602 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/sssd.c:160 plugins/sudoers/sssd.c:192 +#: plugins/sudoers/sssd.c:235 plugins/sudoers/sssd.c:242 +#: plugins/sudoers/sssd.c:278 plugins/sudoers/sssd.c:323 +#: plugins/sudoers/sssd.c:920 plugins/sudoers/sssd.c:1053 +#: plugins/sudoers/sudoers.c:159 plugins/sudoers/sudoers.c:294 +#: plugins/sudoers/sudoers.c:304 plugins/sudoers/sudoers.c:312 +#: plugins/sudoers/sudoers.c:365 plugins/sudoers/sudoers.c:663 +#: plugins/sudoers/sudoers.c:749 plugins/sudoers/sudoers.c:793 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:472 +#: plugins/sudoers/sudoreplay.c:668 plugins/sudoers/sudoreplay.c:780 +#: plugins/sudoers/sudoreplay.c:820 plugins/sudoers/sudoreplay.c:829 +#: plugins/sudoers/sudoreplay.c:839 plugins/sudoers/sudoreplay.c:847 +#: plugins/sudoers/sudoreplay.c:851 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1011 plugins/sudoers/testsudoers.c:130 +#: plugins/sudoers/testsudoers.c:188 plugins/sudoers/testsudoers.c:215 +#: plugins/sudoers/testsudoers.c:232 plugins/sudoers/timestamp.c:390 +#: plugins/sudoers/timestamp.c:426 plugins/sudoers/timestamp.c:838 +#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 +#: plugins/sudoers/toke_util.c:147 plugins/sudoers/visudo.c:152 +#: plugins/sudoers/visudo.c:213 plugins/sudoers/visudo.c:298 +#: plugins/sudoers/visudo.c:304 plugins/sudoers/visudo.c:434 +#: plugins/sudoers/visudo.c:980 plugins/sudoers/visudo.c:1024 +#: plugins/sudoers/visudo.c:1120 toke.l:785 toke.l:806 toke.l:816 toke.l:924 +#: toke.l:1082 +msgid "unable to allocate memory" +msgstr "nie udało się przydzielić pamięci" + +#: gram.y:471 msgid "a digest requires a path name" msgstr "skrót wymaga nazwy pliku" -#: plugins/sudoers/alias.c:136 +#: gram.y:1136 gram.y:1143 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/defaults.c:518 +#: plugins/sudoers/defaults.c:722 plugins/sudoers/defaults.c:882 +#: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 +#: plugins/sudoers/editor.c:92 plugins/sudoers/env.c:234 +#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 +#: plugins/sudoers/iolog.c:586 plugins/sudoers/iolog.c:618 +#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:446 +#: plugins/sudoers/ldap.c:477 plugins/sudoers/ldap.c:529 +#: plugins/sudoers/ldap.c:562 plugins/sudoers/ldap.c:917 +#: plugins/sudoers/ldap.c:1064 plugins/sudoers/ldap.c:1384 +#: plugins/sudoers/ldap.c:1542 plugins/sudoers/ldap.c:1620 +#: plugins/sudoers/ldap.c:1756 plugins/sudoers/ldap.c:1780 +#: plugins/sudoers/ldap.c:1810 plugins/sudoers/ldap.c:1863 +#: plugins/sudoers/ldap.c:1878 plugins/sudoers/ldap.c:1974 +#: plugins/sudoers/ldap.c:2007 plugins/sudoers/ldap.c:2160 +#: plugins/sudoers/ldap.c:2257 plugins/sudoers/ldap.c:3063 +#: plugins/sudoers/ldap.c:3096 plugins/sudoers/ldap.c:3407 +#: plugins/sudoers/ldap.c:3434 plugins/sudoers/ldap.c:3450 +#: plugins/sudoers/ldap.c:3540 plugins/sudoers/ldap.c:3556 +#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:508 +#: plugins/sudoers/match.c:544 plugins/sudoers/match.c:742 +#: plugins/sudoers/match.c:799 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:97 +#: plugins/sudoers/policy.c:106 plugins/sudoers/policy.c:115 +#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:250 +#: plugins/sudoers/policy.c:277 plugins/sudoers/policy.c:286 +#: plugins/sudoers/policy.c:325 plugins/sudoers/policy.c:335 +#: plugins/sudoers/policy.c:344 plugins/sudoers/policy.c:393 +#: plugins/sudoers/policy.c:602 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:160 +#: plugins/sudoers/sssd.c:192 plugins/sudoers/sssd.c:235 +#: plugins/sudoers/sssd.c:242 plugins/sudoers/sssd.c:278 +#: plugins/sudoers/sssd.c:323 plugins/sudoers/sssd.c:920 +#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sudoers.c:159 +#: plugins/sudoers/sudoers.c:294 plugins/sudoers/sudoers.c:304 +#: plugins/sudoers/sudoers.c:312 plugins/sudoers/sudoers.c:365 +#: plugins/sudoers/sudoers.c:663 plugins/sudoers/sudoers.c:749 +#: plugins/sudoers/sudoers.c:793 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sudoreplay.c:472 plugins/sudoers/sudoreplay.c:668 +#: plugins/sudoers/sudoreplay.c:780 plugins/sudoers/sudoreplay.c:820 +#: plugins/sudoers/sudoreplay.c:829 plugins/sudoers/sudoreplay.c:839 +#: plugins/sudoers/sudoreplay.c:847 plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:1007 plugins/sudoers/sudoreplay.c:1011 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:188 +#: plugins/sudoers/testsudoers.c:215 plugins/sudoers/testsudoers.c:232 +#: plugins/sudoers/timestamp.c:390 plugins/sudoers/timestamp.c:426 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:147 +#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:213 +#: plugins/sudoers/visudo.c:298 plugins/sudoers/visudo.c:304 +#: plugins/sudoers/visudo.c:434 plugins/sudoers/visudo.c:980 +#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1120 toke.l:785 +#: toke.l:806 toke.l:816 toke.l:924 toke.l:1082 +#, c-format +msgid "%s: %s" +msgstr "%s: %s" + +#: plugins/sudoers/alias.c:132 #, c-format msgid "Alias `%s' already defined" msgstr "Alias `%s' jest już zdefiniowany" -#: plugins/sudoers/auth/bsdauth.c:75 +#: plugins/sudoers/auth/bsdauth.c:68 #, c-format msgid "unable to get login class for user %s" msgstr "nie udało się uzyskać klasy logowania dla użytkownika %s" -#: plugins/sudoers/auth/bsdauth.c:80 +#: plugins/sudoers/auth/bsdauth.c:73 msgid "unable to begin bsd authentication" msgstr "nie udało się rozpocząć uwierzytelnienia BSD" -#: plugins/sudoers/auth/bsdauth.c:88 +#: plugins/sudoers/auth/bsdauth.c:81 msgid "invalid authentication type" msgstr "błędny rodzaj uwierzytelnienia" -#: plugins/sudoers/auth/bsdauth.c:97 +#: plugins/sudoers/auth/bsdauth.c:90 msgid "unable to initialize BSD authentication" msgstr "nie udało się zainicjować uwierzytelnienia BSD" -#: plugins/sudoers/auth/fwtk.c:59 +#: plugins/sudoers/auth/fwtk.c:52 msgid "unable to read fwtk config" msgstr "nie udało się odczytać konfiguracji fwtk" -#: plugins/sudoers/auth/fwtk.c:64 +#: plugins/sudoers/auth/fwtk.c:57 msgid "unable to connect to authentication server" msgstr "nie udało się połączyć z serwerem uwierzytelniającym" -#: plugins/sudoers/auth/fwtk.c:70 plugins/sudoers/auth/fwtk.c:94 -#: plugins/sudoers/auth/fwtk.c:127 +#: plugins/sudoers/auth/fwtk.c:63 plugins/sudoers/auth/fwtk.c:87 +#: plugins/sudoers/auth/fwtk.c:121 msgid "lost connection to authentication server" msgstr "utracono połączenie z serwerem uwierzytelniającym" -#: plugins/sudoers/auth/fwtk.c:74 +#: plugins/sudoers/auth/fwtk.c:67 #, c-format msgid "" "authentication server error:\n" @@ -88,155 +214,155 @@ "błąd serwera uwierzytelniającego:\n" "%s" -#: plugins/sudoers/auth/kerb5.c:116 +#: plugins/sudoers/auth/kerb5.c:111 #, c-format msgid "%s: unable to convert principal to string ('%s'): %s" msgstr "%s: nie udało się przekształcić nazwy principal do łańcucha ('%s'): %s" -#: plugins/sudoers/auth/kerb5.c:158 +#: plugins/sudoers/auth/kerb5.c:161 #, c-format msgid "%s: unable to parse '%s': %s" msgstr "%s: nie udało się przeanalizować '%s': %s" -#: plugins/sudoers/auth/kerb5.c:167 +#: plugins/sudoers/auth/kerb5.c:170 #, c-format msgid "%s: unable to resolve credential cache: %s" msgstr "%s: nie udało się rozwiązać pamięci podręcznej danych uwierzytelniających: %s" -#: plugins/sudoers/auth/kerb5.c:214 +#: plugins/sudoers/auth/kerb5.c:217 #, c-format msgid "%s: unable to allocate options: %s" msgstr "%s: nie udało się przydzielić opcji: %s" -#: plugins/sudoers/auth/kerb5.c:229 +#: plugins/sudoers/auth/kerb5.c:232 #, c-format msgid "%s: unable to get credentials: %s" msgstr "%s: nie udało się pobrać danych uwierzytelniających: %s" -#: plugins/sudoers/auth/kerb5.c:242 +#: plugins/sudoers/auth/kerb5.c:245 #, c-format msgid "%s: unable to initialize credential cache: %s" msgstr "%s: nie udało się zainicjować pamięci podręcznej danych uwierzytelniających: %s" -#: plugins/sudoers/auth/kerb5.c:245 +#: plugins/sudoers/auth/kerb5.c:248 #, c-format msgid "%s: unable to store credential in cache: %s" msgstr "%s: nie udało się zapisać danych uwierzytelniających w pamięci podręcznej: %s" -#: plugins/sudoers/auth/kerb5.c:309 +#: plugins/sudoers/auth/kerb5.c:312 #, c-format msgid "%s: unable to get host principal: %s" msgstr "%s: nie udało się pobrać nazwy principal dla hosta: %s" -#: plugins/sudoers/auth/kerb5.c:323 +#: plugins/sudoers/auth/kerb5.c:326 #, c-format msgid "%s: Cannot verify TGT! Possible attack!: %s" msgstr "%s: Nie można zweryfikować TGT! Możliwy atak!: %s" -#: plugins/sudoers/auth/pam.c:98 +#: plugins/sudoers/auth/pam.c:92 msgid "unable to initialize PAM" msgstr "nie udało się zainicjować PAM" -#: plugins/sudoers/auth/pam.c:149 +#: plugins/sudoers/auth/pam.c:164 msgid "account validation failure, is your account locked?" msgstr "błąd kontroli poprawności konta - konto zablokowane?" -#: plugins/sudoers/auth/pam.c:153 +#: plugins/sudoers/auth/pam.c:168 msgid "Account or password is expired, reset your password and try again" msgstr "Konto lub hasło wygasło, należy ustawić ponownie hasło i spróbować jeszcze raz" -#: plugins/sudoers/auth/pam.c:161 +#: plugins/sudoers/auth/pam.c:176 #, c-format msgid "unable to change expired password: %s" msgstr "nie udało się zmienić przedawnionego hasła: %s" -#: plugins/sudoers/auth/pam.c:166 +#: plugins/sudoers/auth/pam.c:181 msgid "Password expired, contact your system administrator" msgstr "Hasło wygasło, proszę skontaktować się z administratorem systemu" -#: plugins/sudoers/auth/pam.c:170 +#: plugins/sudoers/auth/pam.c:185 msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator" msgstr "Konto wygasło lub w konfiguracji PAM brak sekcji \"account\" dla sudo, proszę skontaktować się z administratorem systemu" -#: plugins/sudoers/auth/pam.c:187 +#: plugins/sudoers/auth/pam.c:199 #, c-format msgid "PAM authentication error: %s" msgstr "Błąd uwierzytelniania PAM: %s" -#: plugins/sudoers/auth/rfc1938.c:103 plugins/sudoers/visudo.c:228 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:218 #, c-format msgid "you do not exist in the %s database" msgstr "nie istniejesz w bazie danych %s" -#: plugins/sudoers/auth/securid5.c:80 +#: plugins/sudoers/auth/securid5.c:73 msgid "failed to initialise the ACE API library" msgstr "nie udało się zainicjować biblioteki ACE API" -#: plugins/sudoers/auth/securid5.c:106 +#: plugins/sudoers/auth/securid5.c:99 msgid "unable to contact the SecurID server" msgstr "nie udało się połączyć z serwerem SecurID" -#: plugins/sudoers/auth/securid5.c:115 +#: plugins/sudoers/auth/securid5.c:108 msgid "User ID locked for SecurID Authentication" msgstr "ID użytkownika zablokowany dla uwierzytelnienia SecurID" -#: plugins/sudoers/auth/securid5.c:119 plugins/sudoers/auth/securid5.c:170 +#: plugins/sudoers/auth/securid5.c:112 plugins/sudoers/auth/securid5.c:163 msgid "invalid username length for SecurID" msgstr "błędna długość nazwy użytkownika dla SecurID" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:175 +#: plugins/sudoers/auth/securid5.c:116 plugins/sudoers/auth/securid5.c:168 msgid "invalid Authentication Handle for SecurID" msgstr "błędny uchwyt uwierzytelnienia dla SecurID" -#: plugins/sudoers/auth/securid5.c:127 +#: plugins/sudoers/auth/securid5.c:120 msgid "SecurID communication failed" msgstr "błąd komunikacji SecurID" -#: plugins/sudoers/auth/securid5.c:131 plugins/sudoers/auth/securid5.c:214 +#: plugins/sudoers/auth/securid5.c:124 plugins/sudoers/auth/securid5.c:211 msgid "unknown SecurID error" msgstr "nieznany błąd SecurID" -#: plugins/sudoers/auth/securid5.c:165 +#: plugins/sudoers/auth/securid5.c:158 msgid "invalid passcode length for SecurID" msgstr "błędna długość hasła dla SecurID" -#: plugins/sudoers/auth/sia.c:123 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:125 msgid "unable to initialize SIA session" msgstr "nie udało się zainicjować sesji SIA" -#: plugins/sudoers/auth/sudo_auth.c:115 +#: plugins/sudoers/auth/sudo_auth.c:126 msgid "invalid authentication methods" msgstr "błędne metody uwierzytelniania" -#: plugins/sudoers/auth/sudo_auth.c:117 +#: plugins/sudoers/auth/sudo_auth.c:128 msgid "Invalid authentication methods compiled into sudo! You may not mix standalone and non-standalone authentication." msgstr "W sudo wkompilowano błędne metody uwierzytelniania! Nie można mieszać samodzielnych i niesamodzielnych sposobów uwierzytelniania." -#: plugins/sudoers/auth/sudo_auth.c:203 plugins/sudoers/auth/sudo_auth.c:252 +#: plugins/sudoers/auth/sudo_auth.c:224 plugins/sudoers/auth/sudo_auth.c:274 msgid "no authentication methods" msgstr "brak metod uwierzytelniania" -#: plugins/sudoers/auth/sudo_auth.c:205 +#: plugins/sudoers/auth/sudo_auth.c:226 msgid "There are no authentication methods compiled into sudo! If you want to turn off authentication, use the --disable-authentication configure option." msgstr "W sudo nie wkompilowano żadnych metod uwierzytelniania! Aby wyłączyć uwierzytelnianie, proszę użyć opcji konfiguracyjnej --disable-authentication." -#: plugins/sudoers/auth/sudo_auth.c:254 +#: plugins/sudoers/auth/sudo_auth.c:276 msgid "Unable to initialize authentication methods." msgstr "Nie udało się zainicjować metod uwierzytelniania." -#: plugins/sudoers/auth/sudo_auth.c:412 +#: plugins/sudoers/auth/sudo_auth.c:442 msgid "Authentication methods:" msgstr "Metody uwierzytelniania:" -#: plugins/sudoers/bsm_audit.c:95 plugins/sudoers/bsm_audit.c:184 +#: plugins/sudoers/bsm_audit.c:111 plugins/sudoers/bsm_audit.c:200 msgid "Could not determine audit condition" msgstr "Nie udało się określić warunku audytowego" -#: plugins/sudoers/bsm_audit.c:156 plugins/sudoers/bsm_audit.c:244 +#: plugins/sudoers/bsm_audit.c:172 plugins/sudoers/bsm_audit.c:260 msgid "unable to commit audit record" msgstr "nie udało się zatwierdzić rekordu audytowego" -#: plugins/sudoers/check.c:197 +#: plugins/sudoers/check.c:252 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -256,15 +382,15 @@ " 3) z dużą władzą wiąże się duża odpowiedzialność.\n" "\n" -#: plugins/sudoers/check.c:240 plugins/sudoers/check.c:250 -#: plugins/sudoers/sudoers.c:599 plugins/sudoers/sudoers.c:628 +#: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 +#: plugins/sudoers/sudoers.c:699 plugins/sudoers/sudoers.c:728 #, c-format msgid "unknown uid: %u" msgstr "nieznany uid: %u" -#: plugins/sudoers/check.c:245 plugins/sudoers/policy.c:683 -#: plugins/sudoers/sudoers.c:955 plugins/sudoers/testsudoers.c:212 -#: plugins/sudoers/testsudoers.c:364 +#: plugins/sudoers/check.c:300 plugins/sudoers/policy.c:774 +#: plugins/sudoers/sudoers.c:1095 plugins/sudoers/testsudoers.c:206 +#: plugins/sudoers/testsudoers.c:361 #, c-format msgid "unknown user: %s" msgstr "nieznany użytkownik: %s" @@ -313,535 +439,550 @@ msgstr "Wysyłanie listu jeśli użytkownik nie ma prawa do uruchomienia polecenia" #: plugins/sudoers/def_data.c:67 +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:71 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:71 +#: plugins/sudoers/def_data.c:75 msgid "Lecture user the first time they run sudo" msgstr "Poinstruowanie użytkownika przy pierwszym uruchomieniu sudo" -#: plugins/sudoers/def_data.c:75 +#: plugins/sudoers/def_data.c:79 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Plik zawierający instrukcję do sudo: %s" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:83 msgid "Require users to authenticate by default" msgstr "Domyślne wymaganie uwierzytelnienia przez użytkowników" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:87 msgid "Root may run sudo" msgstr "Możliwość uruchamiania sudo przez roota" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:91 msgid "Log the hostname in the (non-syslog) log file" msgstr "Logowanie nazwy hosta w pliku logu (niesyslogowym)" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:95 msgid "Log the year in the (non-syslog) log file" msgstr "Logowanie roku w pliku logu (niesyslogowym)" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:99 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:99 +#: plugins/sudoers/def_data.c:103 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:103 +#: plugins/sudoers/def_data.c:107 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:107 +#: plugins/sudoers/def_data.c:111 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:111 +#: plugins/sudoers/def_data.c:115 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Wymaganie pełnych nazw hostów w pliku sudoers" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:119 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:119 +#: plugins/sudoers/def_data.c:123 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:123 +#: plugins/sudoers/def_data.c:127 msgid "Visudo will honor the EDITOR environment variable" msgstr "Honorowanie zmiennej środowiskowej EDITOR przez visudo" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:131 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:131 +#: plugins/sudoers/def_data.c:135 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:135 +#: plugins/sudoers/def_data.c:139 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:139 +#: plugins/sudoers/def_data.c:143 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:143 +#: plugins/sudoers/def_data.c:147 msgid "Set the LOGNAME and USER environment variables" msgstr "Ustawianie zmiennych środowiskowych LOGNAME i USER" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:151 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:151 +#: plugins/sudoers/def_data.c:155 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:155 +#: plugins/sudoers/def_data.c:159 #, 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:159 +#: plugins/sudoers/def_data.c:163 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Limit czasu znacznika uwierzytelniania (w minutach): %.1f" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:167 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Limit czasu pytania o hasło (w minutach): %.1f" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:171 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Liczba prób wpisania hasła: %u" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:175 #, 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:175 +#: plugins/sudoers/def_data.c:179 #, c-format msgid "Path to log file: %s" msgstr "Ścieżka do pliku logu: %s" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:183 #, c-format msgid "Path to mail program: %s" msgstr "Ścieżka do programu mail: %s" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:187 #, c-format msgid "Flags for mail program: %s" msgstr "Flagi dla programu mail: %s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:191 #, 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:191 +#: plugins/sudoers/def_data.c:195 #, 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:195 +#: plugins/sudoers/def_data.c:199 #, c-format msgid "Subject line for mail messages: %s" msgstr "Temat wysyłanych listów: %s" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:203 #, c-format msgid "Incorrect password message: %s" msgstr "Komunikat o błędnym haśle: %s" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:207 #, c-format msgid "Path to lecture status dir: %s" msgstr "Ścieżka katalogu stanu instrukcji: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:211 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Ścieżka katalogu znaczników czasu uwierzytelniania: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:215 #, 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:215 +#: plugins/sudoers/def_data.c:219 #, 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:219 +#: plugins/sudoers/def_data.c:223 #, c-format msgid "Default password prompt: %s" msgstr "Domyślne pytanie o hasło: %s" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:227 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:227 +#: plugins/sudoers/def_data.c:231 #, c-format msgid "Default user to run commands as: %s" msgstr "Domyślny użytkownik do uruchamiania poleceń: %s" -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:235 #, 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:235 +#: plugins/sudoers/def_data.c:239 #, 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:239 +#: plugins/sudoers/def_data.c:243 #, 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:243 +#: plugins/sudoers/def_data.c:247 #, 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:247 +#: plugins/sudoers/def_data.c:251 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:251 +#: plugins/sudoers/def_data.c:255 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:255 +#: plugins/sudoers/def_data.c:259 #, 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:259 +#: plugins/sudoers/def_data.c:263 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:263 +#: plugins/sudoers/def_data.c:267 msgid "Allow users to set arbitrary environment variables" msgstr "Zezwolenie użytkownikom na ustawianie dowolnych zmiennych środowiskowych" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:271 msgid "Reset the environment to a default set of variables" msgstr "Wyczyszczenie środowiska do domyślnego zbioru zmiennych" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to check for sanity:" msgstr "Zmienne środowiskowe do sprawdzania poprawności:" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to remove:" msgstr "Zmienne środowiskowe do usunięcia:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:283 msgid "Environment variables to preserve:" msgstr "Zmienne środowiskowe do zachowania:" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:287 #, 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:287 +#: plugins/sudoers/def_data.c:291 #, 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:291 +#: plugins/sudoers/def_data.c:295 #, 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:295 +#: plugins/sudoers/def_data.c:299 #, 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:299 +#: plugins/sudoers/def_data.c:303 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:303 +#: plugins/sudoers/def_data.c:307 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:307 +#: plugins/sudoers/def_data.c:311 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:311 +#: plugins/sudoers/def_data.c:315 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:315 +#: plugins/sudoers/def_data.c:319 msgid "Log user's input for the command being run" msgstr "Logowanie wejścia użytkownika dla uruchamianych poleceń" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:323 msgid "Log the output of the command being run" msgstr "Logowanie wyjścia z uruchamianych poleceń" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:327 msgid "Compress I/O logs using zlib" msgstr "Kompresja logów we/wy przy użyciu zliba" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:331 msgid "Always run commands in a pseudo-tty" msgstr "Uruchamianie poleceń zawsze na pseudoterminalu" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:335 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Wtyczka do obsługi grup nieuniksowych: %s" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:339 #, 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:339 +#: plugins/sudoers/def_data.c:343 #, 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:343 +#: plugins/sudoers/def_data.c:347 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:347 +#: plugins/sudoers/def_data.c:351 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:351 +#: plugins/sudoers/def_data.c:355 msgid "Set of permitted privileges" msgstr "Zbiór dozwolonych uprawnień" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:359 msgid "Set of limit privileges" msgstr "Zbiór ograniczonych uprawnień" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:363 msgid "Run commands on a pty in the background" msgstr "Uruchomienie poleceń na pseudoterminalu w tle" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:367 msgid "PAM service name to use" msgstr "Nazwa usługi PAM do użycia" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:371 msgid "PAM service name to use for login shells" msgstr "Nazwa usługi PAM do użycia dla powłok logowania" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:375 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:375 +#: plugins/sudoers/def_data.c:379 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:379 +#: plugins/sudoers/def_data.c:383 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Maksymalny numer sekwencji logu we/wy: %u" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:387 msgid "Enable sudoers netgroup support" msgstr "Włączenie obsługi grup sieciowych w sudoers" -#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:601 -#: plugins/sudoers/visudo_json.c:642 plugins/sudoers/visudo_json.c:677 +#: plugins/sudoers/def_data.c:391 +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:395 +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:399 +msgid "Query the group plugin for unknown system groups" +msgstr "Odpytanie wtyczki group pod kątem nieznanych grup systemowych" + +#: plugins/sudoers/def_data.c:403 +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/defaults.c:199 plugins/sudoers/defaults.c:610 +#: plugins/sudoers/visudo_json.c:633 plugins/sudoers/visudo_json.c:668 #, c-format msgid "unknown defaults entry `%s'" msgstr "nieznany wpis domyślny `%s'" -#: plugins/sudoers/defaults.c:218 plugins/sudoers/defaults.c:228 -#: plugins/sudoers/defaults.c:248 plugins/sudoers/defaults.c:261 -#: plugins/sudoers/defaults.c:274 plugins/sudoers/defaults.c:287 -#: plugins/sudoers/defaults.c:300 plugins/sudoers/defaults.c:320 -#: plugins/sudoers/defaults.c:330 +#: plugins/sudoers/defaults.c:207 plugins/sudoers/defaults.c:217 +#: plugins/sudoers/defaults.c:241 plugins/sudoers/defaults.c:256 +#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 +#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 +#: plugins/sudoers/defaults.c:325 #, c-format msgid "value `%s' is invalid for option `%s'" msgstr "błędna wartość `%s' dla opcji `%s'" -#: plugins/sudoers/defaults.c:221 plugins/sudoers/defaults.c:231 -#: plugins/sudoers/defaults.c:239 plugins/sudoers/defaults.c:256 -#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 -#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 -#: plugins/sudoers/defaults.c:326 +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:220 +#: plugins/sudoers/defaults.c:228 plugins/sudoers/defaults.c:251 +#: plugins/sudoers/defaults.c:264 plugins/sudoers/defaults.c:277 +#: plugins/sudoers/defaults.c:290 plugins/sudoers/defaults.c:310 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "no value specified for `%s'" msgstr "nie podano wartości dla `%s'" -#: plugins/sudoers/defaults.c:244 +#: plugins/sudoers/defaults.c:233 #, c-format msgid "values for `%s' must start with a '/'" msgstr "wartości `%s' muszą zaczynać się od '/'" -#: plugins/sudoers/defaults.c:306 +#: plugins/sudoers/defaults.c:301 #, c-format msgid "option `%s' does not take a value" msgstr "opcja `%s' nie przyjmuje wartości" -#: plugins/sudoers/env.c:276 plugins/sudoers/env.c:283 -#: plugins/sudoers/env.c:386 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:918 plugins/sudoers/policy.c:461 -#: plugins/sudoers/policy.c:470 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:708 plugins/sudoers/testsudoers.c:242 -#: plugins/sudoers/toke_util.c:174 +#: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 +#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:450 +#: plugins/sudoers/ldap.c:540 plugins/sudoers/ldap.c:1166 +#: plugins/sudoers/ldap.c:1388 plugins/sudoers/ldap.c:1704 +#: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:929 +#: plugins/sudoers/policy.c:511 plugins/sudoers/policy.c:520 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:815 +#: plugins/sudoers/testsudoers.c:236 plugins/sudoers/toke_util.c:162 #, c-format msgid "internal error, %s overflow" msgstr "błąd wewnętrzny, przepełnienie %s" -#: plugins/sudoers/env.c:359 +#: plugins/sudoers/env.c:377 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: uszkodzone envp, niezgodność długości" -#: plugins/sudoers/env.c:1054 +#: plugins/sudoers/env.c:1083 +msgid "unable to rebuild the environment" +msgstr "nie udało się przebudować środowiska" + +#: plugins/sudoers/env.c:1157 #, 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/group_plugin.c:94 +#: plugins/sudoers/group_plugin.c:86 #, c-format msgid "%s must be owned by uid %d" msgstr "właścicielem %s musi być uid %d" -#: plugins/sudoers/group_plugin.c:98 +#: plugins/sudoers/group_plugin.c:90 #, c-format msgid "%s must only be writable by owner" msgstr "prawo zapisu do %s może mieć tylko właściciel" -#: plugins/sudoers/group_plugin.c:105 plugins/sudoers/sssd.c:251 +#: plugins/sudoers/group_plugin.c:98 plugins/sudoers/sssd.c:331 #, c-format msgid "unable to load %s: %s" msgstr "nie udało się załadować %s: %s" -#: plugins/sudoers/group_plugin.c:110 +#: plugins/sudoers/group_plugin.c:104 #, c-format msgid "unable to find symbol \"group_plugin\" in %s" msgstr "nie udało się odnaleźć symbolu \"group_plugin\" w %s" -#: plugins/sudoers/group_plugin.c:115 +#: plugins/sudoers/group_plugin.c:109 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: niezgodna główna wersja wtyczki grup %d, oczekiwano %d" -#: plugins/sudoers/interfaces.c:116 +#: plugins/sudoers/interfaces.c:117 msgid "Local IP address and netmask pairs:\n" msgstr "Pary lokalnych adresów IP i masek:\n" -#: plugins/sudoers/iolog.c:101 plugins/sudoers/iolog.c:119 -#: plugins/sudoers/timestamp.c:233 +#: plugins/sudoers/iolog.c:92 plugins/sudoers/iolog.c:110 +#: plugins/sudoers/timestamp.c:169 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s istnieje, ale nie jest katalogiem (0%o)" -#: plugins/sudoers/iolog.c:112 plugins/sudoers/iolog.c:133 -#: plugins/sudoers/iolog.c:140 plugins/sudoers/timestamp.c:227 -#: plugins/sudoers/timestamp.c:248 +#: plugins/sudoers/iolog.c:103 plugins/sudoers/iolog.c:124 +#: plugins/sudoers/iolog.c:131 plugins/sudoers/timestamp.c:163 +#: plugins/sudoers/timestamp.c:184 #, c-format msgid "unable to mkdir %s" msgstr "nie udało się wykonać mkdir %s" -#: plugins/sudoers/iolog.c:209 plugins/sudoers/sudoers.c:764 -#: plugins/sudoers/sudoreplay.c:348 plugins/sudoers/sudoreplay.c:819 -#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/timestamp.c:357 -#: plugins/sudoers/visudo.c:832 plugins/sudoers/visudo_json.c:1025 -#: plugins/sudoers/visudo_json.c:1038 +#: plugins/sudoers/iolog.c:200 plugins/sudoers/sudoers.c:871 +#: plugins/sudoers/sudoreplay.c:300 plugins/sudoers/sudoreplay.c:769 +#: plugins/sudoers/sudoreplay.c:973 plugins/sudoers/timestamp.c:399 +#: plugins/sudoers/visudo.c:904 plugins/sudoers/visudo_json.c:1012 +#: plugins/sudoers/visudo_json.c:1025 #, c-format msgid "unable to open %s" msgstr "nie udało się otworzyć %s" -#: plugins/sudoers/iolog.c:250 plugins/sudoers/sudoers.c:768 -#: plugins/sudoers/sudoreplay.c:1123 +#: plugins/sudoers/iolog.c:241 plugins/sudoers/sudoers.c:875 +#: plugins/sudoers/sudoreplay.c:1084 #, c-format msgid "unable to read %s" msgstr "nie udało się odczytać %s" -#: plugins/sudoers/iolog.c:282 plugins/sudoers/sudoreplay.c:588 -#: plugins/sudoers/timestamp.c:186 plugins/sudoers/timestamp.c:189 +#: plugins/sudoers/iolog.c:277 plugins/sudoers/sudoreplay.c:550 +#: plugins/sudoers/timestamp.c:298 plugins/sudoers/timestamp.c:301 #, c-format msgid "unable to write to %s" msgstr "nie udało się zapisać do %s" -#: plugins/sudoers/iolog.c:347 plugins/sudoers/iolog.c:545 +#: plugins/sudoers/iolog.c:342 plugins/sudoers/iolog.c:540 #, c-format msgid "unable to create %s" msgstr "nie udało się utworzyć %s" -#: plugins/sudoers/ldap.c:406 +#: plugins/sudoers/iolog.c:723 +#, c-format +msgid "%s: internal error, file index %d not open" +msgstr "%s: błąd wewnętrzny, plik o indeksie %d nie jest otwarty" + +#: plugins/sudoers/ldap.c:428 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: port zbyt duży" -#: plugins/sudoers/ldap.c:431 -msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" -msgstr "sudo_ldap_conf_add_ports: brak miejsca podczas rozszerzania hostbuf" - -#: plugins/sudoers/ldap.c:464 +#: plugins/sudoers/ldap.c:488 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "nieobsługiwany rodzaj URI LDAP: %s" -#: plugins/sudoers/ldap.c:495 +#: plugins/sudoers/ldap.c:515 msgid "unable to mix ldap and ldaps URIs" msgstr "nie można mieszać URI ldap i ldaps" -#: plugins/sudoers/ldap.c:499 plugins/sudoers/ldap.c:532 +#: plugins/sudoers/ldap.c:519 plugins/sudoers/ldap.c:555 msgid "starttls not supported when using ldaps" msgstr "brak obsługi starttls w przypadku użycia ldaps" -#: plugins/sudoers/ldap.c:517 -msgid "sudo_ldap_parse_uri: out of space building hostbuf" -msgstr "sudo_ldap_parse_uri: brak miejsca podczas konstruowania hostbuf" - -#: plugins/sudoers/ldap.c:599 +#: plugins/sudoers/ldap.c:626 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "nie udało się zainicjować bazy certyfikatów i kluczy SSL: %s" -#: plugins/sudoers/ldap.c:602 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "aby używać SSL, trzeba ustawić TLS_CERT w %s" -#: plugins/sudoers/ldap.c:1093 +#: plugins/sudoers/ldap.c:1152 msgid "unable to get GMT time" msgstr "nie udało się pobrać czasu GMT" -#: plugins/sudoers/ldap.c:1099 +#: plugins/sudoers/ldap.c:1158 msgid "unable to format timestamp" msgstr "nie udało się sformatować znacznika czasu" -#: plugins/sudoers/ldap.c:1107 -msgid "unable to build time filter" -msgstr "nie udało się stworzyć filtra czasu" - -#: plugins/sudoers/ldap.c:1326 -msgid "sudo_ldap_build_pass1 allocation mismatch" -msgstr "niezgodność przydzielenia sudo_ldap_build_pass1" - -#: plugins/sudoers/ldap.c:1469 +#: plugins/sudoers/ldap.c:1853 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:1963 +#: plugins/sudoers/ldap.c:2394 #, c-format msgid "" "\n" @@ -850,7 +991,7 @@ "\n" "Rola LDAP: %s\n" -#: plugins/sudoers/ldap.c:1965 +#: plugins/sudoers/ldap.c:2396 #, c-format msgid "" "\n" @@ -859,108 +1000,108 @@ "\n" "Rola LDAP: NIEZNANA\n" -#: plugins/sudoers/ldap.c:2012 +#: plugins/sudoers/ldap.c:2443 #, c-format msgid " Order: %s\n" msgstr " Porządek: %s\n" -#: plugins/sudoers/ldap.c:2020 plugins/sudoers/parse.c:512 -#: plugins/sudoers/sssd.c:1297 +#: plugins/sudoers/ldap.c:2451 plugins/sudoers/parse.c:555 +#: plugins/sudoers/sssd.c:1429 #, c-format msgid " Commands:\n" msgstr " Polecenia:\n" -#: plugins/sudoers/ldap.c:2570 +#: plugins/sudoers/ldap.c:3015 #, c-format msgid "unable to initialize LDAP: %s" msgstr "nie udało się zainicjować LDAP: %s" -#: plugins/sudoers/ldap.c:2612 +#: plugins/sudoers/ldap.c:3051 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:2845 +#: plugins/sudoers/ldap.c:3305 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "błędny atrybut sudoOrder: %s" -#: plugins/sudoers/linux_audit.c:57 +#: plugins/sudoers/linux_audit.c:52 msgid "unable to open audit system" msgstr "nie udało się otworzyć systemu audytowego" -#: plugins/sudoers/linux_audit.c:94 +#: plugins/sudoers/linux_audit.c:93 msgid "unable to send audit message" msgstr "nie udało się wysłać komunikatu audytowego" -#: plugins/sudoers/logging.c:134 +#: plugins/sudoers/logging.c:106 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: plugins/sudoers/logging.c:162 +#: plugins/sudoers/logging.c:134 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s : (kontynuacja polecenia) %s" -#: plugins/sudoers/logging.c:187 +#: plugins/sudoers/logging.c:159 #, c-format msgid "unable to open log file: %s: %s" msgstr "nie udało się otworzyć pliku logu: %s: %s" -#: plugins/sudoers/logging.c:190 +#: plugins/sudoers/logging.c:162 #, c-format msgid "unable to lock log file: %s: %s" msgstr "nie udało się zablokować pliku logu: %s: %s" -#: plugins/sudoers/logging.c:242 +#: plugins/sudoers/logging.c:211 msgid "No user or host" msgstr "Brak użytkownika lub hosta" -#: plugins/sudoers/logging.c:244 +#: plugins/sudoers/logging.c:213 msgid "validation failure" msgstr "błąd kontroli poprawności" -#: plugins/sudoers/logging.c:251 +#: plugins/sudoers/logging.c:220 msgid "user NOT in sudoers" msgstr "użytkownik NIE występuje w sudoers" -#: plugins/sudoers/logging.c:253 +#: plugins/sudoers/logging.c:222 msgid "user NOT authorized on host" msgstr "użytkownik NIE jest autoryzowany na hoście" -#: plugins/sudoers/logging.c:255 +#: plugins/sudoers/logging.c:224 msgid "command not allowed" msgstr "polecenie niedozwolone" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:259 #, 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:262 #, 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:266 #, 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:269 #, 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:407 -#: plugins/sudoers/sudoers.c:409 plugins/sudoers/sudoers.c:411 -#: plugins/sudoers/sudoers.c:413 plugins/sudoers/sudoers.c:1128 -#: plugins/sudoers/sudoers.c:1129 +#: plugins/sudoers/logging.c:306 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1222 +#: plugins/sudoers/sudoers.c:1224 #, c-format msgid "%s: command not found" msgstr "%s: nie znaleziono polecenia" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:403 +#: plugins/sudoers/logging.c:308 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring `%s' found in '.'\n" @@ -969,15 +1110,15 @@ "zignorowano plik `%s' znaleziony w '.'\n" "Proszę użyć `sudo ./%s', jeśli to `%s' ma być uruchomiony." -#: plugins/sudoers/logging.c:353 +#: plugins/sudoers/logging.c:325 msgid "authentication failure" msgstr "błąd uwierzytelniania" -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:351 msgid "a password is required" msgstr "wymagane jest hasło" -#: plugins/sudoers/logging.c:446 plugins/sudoers/logging.c:501 +#: plugins/sudoers/logging.c:422 plugins/sudoers/logging.c:484 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" @@ -985,56 +1126,56 @@ msgstr[1] "%u błędne próby wprowadzenia hasła" msgstr[2] "%u błędnych prób wprowadzenia hasła" -#: plugins/sudoers/logging.c:584 +#: plugins/sudoers/logging.c:572 msgid "unable to fork" msgstr "nie udało się wykonać fork" -#: plugins/sudoers/logging.c:592 plugins/sudoers/logging.c:648 +#: plugins/sudoers/logging.c:580 plugins/sudoers/logging.c:640 #, c-format msgid "unable to fork: %m" msgstr "nie udało się wykonać fork: %m" -#: plugins/sudoers/logging.c:638 +#: plugins/sudoers/logging.c:630 #, c-format msgid "unable to open pipe: %m" msgstr "nie udało się otworzyć potoku: %m" -#: plugins/sudoers/logging.c:663 +#: plugins/sudoers/logging.c:655 #, c-format msgid "unable to dup stdin: %m" msgstr "nie udało się wykonać dup na stdin: %m" -#: plugins/sudoers/logging.c:698 +#: plugins/sudoers/logging.c:693 #, c-format msgid "unable to execute %s: %m" msgstr "nie udało się wywołać %s: %m" -#: plugins/sudoers/match.c:627 +#: plugins/sudoers/match.c:616 #, c-format msgid "unsupported digest type %d for %s" msgstr "nieobsługiwany typ skrótu %d dla %s" -#: plugins/sudoers/match.c:656 +#: plugins/sudoers/match.c:657 #, c-format msgid "%s: read error" msgstr "%s: błąd odczytu" -#: plugins/sudoers/match.c:670 +#: plugins/sudoers/match.c:692 #, c-format 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:123 +#: plugins/sudoers/parse.c:114 #, c-format msgid "parse error in %s near line %d" msgstr "błąd składni w %s w okolicy linii %d" -#: plugins/sudoers/parse.c:126 +#: plugins/sudoers/parse.c:117 #, c-format msgid "parse error in %s" msgstr "błąd składni w %s" -#: plugins/sudoers/parse.c:459 +#: plugins/sudoers/parse.c:502 #, c-format msgid "" "\n" @@ -1043,49 +1184,41 @@ "\n" "Wpis sudoers:\n" -#: plugins/sudoers/parse.c:460 +#: plugins/sudoers/parse.c:503 #, c-format msgid " RunAsUsers: " msgstr " Jako użytkownicy: " -#: plugins/sudoers/parse.c:474 +#: plugins/sudoers/parse.c:517 #, c-format msgid " RunAsGroups: " msgstr " Jako grupy: " -#: plugins/sudoers/parse.c:483 +#: plugins/sudoers/parse.c:526 #, c-format msgid " Options: " msgstr " Opcje: " -#: plugins/sudoers/policy.c:109 plugins/sudoers/policy.c:118 -#: plugins/sudoers/policy.c:127 plugins/sudoers/policy.c:151 -#: plugins/sudoers/policy.c:263 plugins/sudoers/policy.c:283 -#: plugins/sudoers/policy.c:292 plugins/sudoers/policy.c:322 -#: plugins/sudoers/policy.c:332 plugins/sudoers/policy.c:341 -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" +#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:253 +msgid "unable to parse network address list" +msgstr "nie udało się przeanalizować listy adresów sieciowych" -#: plugins/sudoers/policy.c:569 plugins/sudoers/visudo.c:773 +#: plugins/sudoers/policy.c:659 plugins/sudoers/visudo.c:841 #, c-format msgid "unable to execute %s" msgstr "nie udało się wywołać %s" -#: plugins/sudoers/policy.c:701 +#: plugins/sudoers/policy.c:792 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Wersja wtyczki polityki sudoers %s\n" -#: plugins/sudoers/policy.c:703 +#: plugins/sudoers/policy.c:794 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Wersja gramatyki pliku sudoers %d\n" -#: plugins/sudoers/policy.c:707 +#: plugins/sudoers/policy.c:798 #, c-format msgid "" "\n" @@ -1094,374 +1227,411 @@ "\n" "Ścieżka do sudoers: %s\n" -#: plugins/sudoers/policy.c:710 +#: plugins/sudoers/policy.c:801 #, c-format msgid "nsswitch path: %s\n" msgstr "ścieżka do nsswitch: %s\n" -#: plugins/sudoers/policy.c:712 +#: plugins/sudoers/policy.c:803 #, c-format msgid "ldap.conf path: %s\n" msgstr "ścieżka do ldap.conf: %s\n" -#: plugins/sudoers/policy.c:713 +#: plugins/sudoers/policy.c:804 #, c-format msgid "ldap.secret path: %s\n" msgstr "ścieżka do ldap.secret: %s\n" -#: plugins/sudoers/pwutil.c:149 +#: plugins/sudoers/policy.c:837 +#, 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:158 plugins/sudoers/pwutil.c:176 +#, c-format +msgid "unable to cache uid %u, out of memory" +msgstr "nie udało się zapamiętać uid-a %u, brak pamięci" + +#: plugins/sudoers/pwutil.c:170 #, 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:194 +#: plugins/sudoers/pwutil.c:222 plugins/sudoers/pwutil.c:239 +#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:334 +#, c-format +msgid "unable to cache user %s, out of memory" +msgstr "nie udało się zapamiętać użytkownika %s, brak pamięci" + +#: plugins/sudoers/pwutil.c:234 #, 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:400 +#: plugins/sudoers/pwutil.c:474 plugins/sudoers/pwutil.c:492 +#, c-format +msgid "unable to cache gid %u, out of memory" +msgstr "nie udało się zapamiętać gid-a %u, brak pamięci" + +#: plugins/sudoers/pwutil.c:486 #, 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:439 +#: plugins/sudoers/pwutil.c:532 plugins/sudoers/pwutil.c:549 +#: plugins/sudoers/pwutil.c:584 plugins/sudoers/pwutil.c:626 +#, c-format +msgid "unable to cache group %s, out of memory" +msgstr "nie udało się zapamiętać grupy %s, brak pamięci" + +#: plugins/sudoers/pwutil.c:544 #, 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:605 plugins/sudoers/pwutil.c:631 +#: plugins/sudoers/pwutil.c:739 plugins/sudoers/pwutil.c:783 #, 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:627 +#: plugins/sudoers/pwutil.c:745 plugins/sudoers/pwutil.c:788 +#, c-format +msgid "unable to cache group list for %s, out of memory" +msgstr "nie udało się zapamiętać listy grup dla %s, brak pamięci" + +#: plugins/sudoers/pwutil.c:777 #, c-format msgid "unable to parse groups for %s" msgstr "nie udało się przeanalizować grup dla %s" -#: plugins/sudoers/set_perms.c:122 plugins/sudoers/set_perms.c:447 -#: plugins/sudoers/set_perms.c:850 plugins/sudoers/set_perms.c:1147 -#: plugins/sudoers/set_perms.c:1439 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 +#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 +#: plugins/sudoers/set_perms.c:1430 msgid "perm stack overflow" msgstr "przepełnienie stosu uprawnień" -#: plugins/sudoers/set_perms.c:130 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:1076 -#: plugins/sudoers/set_perms.c:1155 plugins/sudoers/set_perms.c:1372 -#: plugins/sudoers/set_perms.c:1447 plugins/sudoers/set_perms.c:1536 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 +#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 +#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 +#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 +#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 msgid "perm stack underflow" msgstr "niedopełnienie stosu uprawnień" -#: plugins/sudoers/set_perms.c:189 plugins/sudoers/set_perms.c:502 -#: plugins/sudoers/set_perms.c:1206 plugins/sudoers/set_perms.c:1479 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:493 +#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 msgid "unable to change to root gid" msgstr "nie udało się zmienić na gid roota" -#: plugins/sudoers/set_perms.c:278 plugins/sudoers/set_perms.c:599 -#: plugins/sudoers/set_perms.c:987 plugins/sudoers/set_perms.c:1283 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:590 +#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 msgid "unable to change to runas gid" msgstr "nie udało się zmienić na docelowy gid" -#: plugins/sudoers/set_perms.c:283 plugins/sudoers/set_perms.c:604 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:595 +#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 msgid "unable to set runas group vector" msgstr "nie udało się ustawić wektora grup docelowych" -#: plugins/sudoers/set_perms.c:294 plugins/sudoers/set_perms.c:615 -#: plugins/sudoers/set_perms.c:1001 plugins/sudoers/set_perms.c:1297 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:606 +#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 msgid "unable to change to runas uid" msgstr "nie udało się zmienić na docelowy uid" -#: plugins/sudoers/set_perms.c:312 plugins/sudoers/set_perms.c:633 -#: plugins/sudoers/set_perms.c:1017 plugins/sudoers/set_perms.c:1313 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:624 +#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 msgid "unable to change to sudoers gid" msgstr "nie udało się zmienić na gid sudoers" -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 msgid "too many processes" msgstr "zbyt dużo procesów" -#: plugins/sudoers/solaris_audit.c:47 +#: plugins/sudoers/solaris_audit.c:51 msgid "unable to get current working directory" msgstr "nie udało się pobrać bieżącego katalogu roboczego" -#: plugins/sudoers/solaris_audit.c:55 +#: plugins/sudoers/solaris_audit.c:59 #, c-format msgid "truncated audit path user_cmnd: %s" msgstr "ucięta ścieżka audytu user_cmnd: %s" -#: plugins/sudoers/solaris_audit.c:62 +#: plugins/sudoers/solaris_audit.c:66 #, c-format msgid "truncated audit path argv[0]: %s" msgstr "ucięta ścieżka audytu argv[0]: %s" -#: plugins/sudoers/solaris_audit.c:111 +#: plugins/sudoers/solaris_audit.c:115 msgid "audit_failure message too long" msgstr "komunikat audit_failure zbyt długi" -#: plugins/sudoers/sssd.c:252 +#: plugins/sudoers/sssd.c:333 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:259 plugins/sudoers/sssd.c:267 -#: plugins/sudoers/sssd.c:275 plugins/sudoers/sssd.c:283 -#: plugins/sudoers/sssd.c:291 +#: plugins/sudoers/sssd.c:341 plugins/sudoers/sssd.c:350 +#: plugins/sudoers/sssd.c:359 plugins/sudoers/sssd.c:368 +#: plugins/sudoers/sssd.c:377 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "nie udało się odnaleźć symbolu \"%s\" w %s" -#: plugins/sudoers/sudo_nss.c:296 +#: plugins/sudoers/sudo_nss.c:290 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Pasujące wpisy Defaults dla %s na %s:\n" -#: plugins/sudoers/sudo_nss.c:309 +#: plugins/sudoers/sudo_nss.c:308 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Wartości specyficzne dla Runas i Command dla %s:\n" -#: plugins/sudoers/sudo_nss.c:322 +#: plugins/sudoers/sudo_nss.c:326 #, 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/sudo_nss.c:331 +#: plugins/sudoers/sudo_nss.c:339 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Użytkownik %s nie ma uprawnień do uruchamiania sudo na %s.\n" -#: plugins/sudoers/sudoers.c:160 plugins/sudoers/sudoers.c:201 -#: plugins/sudoers/sudoers.c:726 +#: plugins/sudoers/sudoers.c:172 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/visudo.c:223 plugins/sudoers/visudo.c:567 +msgid "unable to initialize sudoers default values" +msgstr "nie udało się zainicjować wartości domyślnych sudoers" + +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:239 +#: plugins/sudoers/sudoers.c:833 msgid "problem with defaults entries" msgstr "problem z wpisami domyślnymi" -#: plugins/sudoers/sudoers.c:167 +#: plugins/sudoers/sudoers.c:205 msgid "no valid sudoers sources found, quitting" msgstr "nie znaleziono poprawnych źródeł sudoers, zakończenie" -#: plugins/sudoers/sudoers.c:233 +#: plugins/sudoers/sudoers.c:275 msgid "sudoers specifies that root is not allowed to sudo" msgstr "wg sudoers root nie ma prawa używać sudo" -#: plugins/sudoers/sudoers.c:278 +#: plugins/sudoers/sudoers.c:332 msgid "you are not permitted to use the -C option" msgstr "brak uprawnień do używania opcji -C" -#: plugins/sudoers/sudoers.c:336 +#: plugins/sudoers/sudoers.c:396 #, 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:350 +#: plugins/sudoers/sudoers.c:410 msgid "no tty" msgstr "brak tty" -#: plugins/sudoers/sudoers.c:351 +#: plugins/sudoers/sudoers.c:411 msgid "sorry, you must have a tty to run sudo" msgstr "niestety do uruchomienia sudo konieczny jest tty" -#: plugins/sudoers/sudoers.c:402 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "polecenie w bieżącym katalogu" -#: plugins/sudoers/sudoers.c:422 +#: plugins/sudoers/sudoers.c:486 msgid "sorry, you are not allowed to preserve the environment" msgstr "niestety brak uprawnień do zachowania środowiska" -#: plugins/sudoers/sudoers.c:674 +#: plugins/sudoers/sudoers.c:778 msgid "command too long" msgstr "polecenie zbyt długie" -#: plugins/sudoers/sudoers.c:779 plugins/sudoers/visudo.c:333 -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/sudoers.c:886 plugins/sudoers/visudo.c:427 +#: plugins/sudoers/visudo.c:667 #, c-format msgid "unable to stat %s" msgstr "nie udało się wykonać stat na %s" -#: plugins/sudoers/sudoers.c:783 +#: plugins/sudoers/sudoers.c:890 #, c-format msgid "%s is not a regular file" msgstr "%s nie jest zwykłym plikiem" -#: plugins/sudoers/sudoers.c:787 plugins/sudoers/timestamp.c:289 toke.l:945 +#: plugins/sudoers/sudoers.c:894 plugins/sudoers/timestamp.c:225 toke.l:947 #, 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:791 toke.l:952 +#: plugins/sudoers/sudoers.c:898 toke.l:954 #, c-format msgid "%s is world writable" msgstr "%s jest zapisywalny dla świata" -#: plugins/sudoers/sudoers.c:795 toke.l:957 +#: plugins/sudoers/sudoers.c:902 toke.l:959 #, 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:826 +#: plugins/sudoers/sudoers.c:933 #, c-format msgid "only root can use `-c %s'" msgstr "tylko root może używać `-c %s'" -#: plugins/sudoers/sudoers.c:845 +#: plugins/sudoers/sudoers.c:952 #, c-format msgid "unknown login class: %s" msgstr "nieznana klasa logowania: %s" -#: plugins/sudoers/sudoers.c:889 plugins/sudoers/sudoers.c:904 +#: plugins/sudoers/sudoers.c:1031 plugins/sudoers/sudoers.c:1059 #, c-format msgid "unable to resolve host %s" msgstr "nie udało się rozwiązać nazwy hosta %s" -#: plugins/sudoers/sudoers.c:986 plugins/sudoers/testsudoers.c:388 +#: plugins/sudoers/sudoers.c:1126 plugins/sudoers/testsudoers.c:385 #, c-format msgid "unknown group: %s" msgstr "nieznana grupa: %s" -#: plugins/sudoers/sudoreplay.c:280 +#: plugins/sudoers/sudoreplay.c:232 #, c-format msgid "invalid filter option: %s" msgstr "błędna opcja filtra: %s" -#: plugins/sudoers/sudoreplay.c:293 +#: plugins/sudoers/sudoreplay.c:245 #, c-format msgid "invalid max wait: %s" msgstr "błędny maksymalny czas oczekiwania: %s" -#: plugins/sudoers/sudoreplay.c:299 +#: plugins/sudoers/sudoreplay.c:251 #, c-format msgid "invalid speed factor: %s" msgstr "błędny współczynnik szybkości: %s" -#: plugins/sudoers/sudoreplay.c:302 plugins/sudoers/visudo.c:190 +#: plugins/sudoers/sudoreplay.c:254 plugins/sudoers/visudo.c:180 #, c-format msgid "%s version %s\n" msgstr "%s wersja %s\n" -#: plugins/sudoers/sudoreplay.c:334 +#: plugins/sudoers/sudoreplay.c:286 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/czas: %s" -#: plugins/sudoers/sudoreplay.c:340 +#: plugins/sudoers/sudoreplay.c:292 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/czas: %s" -#: plugins/sudoers/sudoreplay.c:356 +#: plugins/sudoers/sudoreplay.c:308 #, c-format msgid "Replaying sudo session: %s\n" msgstr "Odtwarzanie sesji sudo: %s\n" -#: plugins/sudoers/sudoreplay.c:362 +#: plugins/sudoers/sudoreplay.c:314 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Uwaga: ten terminal jest za mały, aby właściwie odtworzyć log.\n" -#: plugins/sudoers/sudoreplay.c:363 +#: plugins/sudoers/sudoreplay.c:315 #, 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:418 +#: plugins/sudoers/sudoreplay.c:368 msgid "unable to set tty to raw mode" msgstr "nie udało się przestawić tty w tryb surowy" -#: plugins/sudoers/sudoreplay.c:449 +#: plugins/sudoers/sudoreplay.c:401 #, c-format msgid "invalid timing file line: %s" msgstr "błędna linia pliku czasu: %s" -#: plugins/sudoers/sudoreplay.c:655 plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:611 plugins/sudoers/sudoreplay.c:636 #, c-format msgid "ambiguous expression \"%s\"" msgstr "niejednoznaczne wyrażenie \"%s\"" -#: plugins/sudoers/sudoreplay.c:702 +#: plugins/sudoers/sudoreplay.c:658 msgid "unmatched ')' in expression" msgstr "niesparowany ')' w wyrażeniu" -#: plugins/sudoers/sudoreplay.c:706 +#: plugins/sudoers/sudoreplay.c:662 #, c-format msgid "unknown search term \"%s\"" msgstr "nieznany warunek wyszukiwania \"%s\"" -#: plugins/sudoers/sudoreplay.c:720 +#: plugins/sudoers/sudoreplay.c:677 #, c-format msgid "%s requires an argument" msgstr "%s wymaga argumentu" -#: plugins/sudoers/sudoreplay.c:724 plugins/sudoers/sudoreplay.c:1096 +#: plugins/sudoers/sudoreplay.c:680 plugins/sudoers/sudoreplay.c:1060 #, c-format msgid "invalid regular expression: %s" msgstr "błędne wyrażenie regularne: %s" -#: plugins/sudoers/sudoreplay.c:730 +#: plugins/sudoers/sudoreplay.c:684 #, c-format msgid "could not parse date \"%s\"" msgstr "nie udało się przeanalizować daty \"%s\"" -#: plugins/sudoers/sudoreplay.c:739 +#: plugins/sudoers/sudoreplay.c:693 msgid "unmatched '(' in expression" msgstr "niesparowany '(' w wyrażeniu" -#: plugins/sudoers/sudoreplay.c:741 +#: plugins/sudoers/sudoreplay.c:695 msgid "illegal trailing \"or\"" msgstr "niedozwolone kończące \"or\"" -#: plugins/sudoers/sudoreplay.c:743 +#: plugins/sudoers/sudoreplay.c:697 msgid "illegal trailing \"!\"" msgstr "niedozwolony kończący \"!\"" -#: plugins/sudoers/sudoreplay.c:796 +#: plugins/sudoers/sudoreplay.c:746 #, c-format msgid "unknown search type %d" msgstr "nieznany typ wyszukiwania %d" -#: plugins/sudoers/sudoreplay.c:833 +#: plugins/sudoers/sudoreplay.c:784 #, c-format msgid "%s: invalid log file" msgstr "%s: błędny plik logu" -#: plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:802 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: brak pola znacznika czasu" -#: plugins/sudoers/sudoreplay.c:858 +#: plugins/sudoers/sudoreplay.c:809 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: znacznik czasu %s: %s" -#: plugins/sudoers/sudoreplay.c:865 +#: plugins/sudoers/sudoreplay.c:816 #, c-format msgid "%s: user field is missing" msgstr "%s: brak pola z użytkownikiem" -#: plugins/sudoers/sudoreplay.c:873 +#: plugins/sudoers/sudoreplay.c:825 #, c-format msgid "%s: runas user field is missing" msgstr "%s: brak pola z użytkownikiem runas" -#: plugins/sudoers/sudoreplay.c:881 +#: plugins/sudoers/sudoreplay.c:834 #, c-format msgid "%s: runas group field is missing" msgstr "%s: brak pola z grupą runas" -#: plugins/sudoers/sudoreplay.c:1236 +#: plugins/sudoers/sudoreplay.c:1197 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "Składnia: %s [-h] [-d katalog] [-m liczba] [-s wsp_szybkości] ID\n" -#: plugins/sudoers/sudoreplay.c:1239 +#: plugins/sudoers/sudoreplay.c:1200 #, 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:1248 +#: plugins/sudoers/sudoreplay.c:1209 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1470,7 +1640,7 @@ "%s - odtwarzanie logów sesji sudo\n" "\n" -#: plugins/sudoers/sudoreplay.c:1250 +#: plugins/sudoers/sudoreplay.c:1211 msgid "" "\n" "Options:\n" @@ -1492,11 +1662,11 @@ " -s, --speed=ile przyspieszenie lub spowolnienie wyjścia\n" " -V, --version wyświetlenie informacji o wersji i zakończenie" -#: plugins/sudoers/testsudoers.c:327 +#: plugins/sudoers/testsudoers.c:324 msgid "\thost unmatched" msgstr "\thost nie znaleziony" -#: plugins/sudoers/testsudoers.c:330 +#: plugins/sudoers/testsudoers.c:327 msgid "" "\n" "Command allowed" @@ -1504,7 +1674,7 @@ "\n" "Polecenie dozwolone" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command denied" @@ -1512,7 +1682,7 @@ "\n" "Polecenie niedozwolone" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command unmatched" @@ -1520,114 +1690,129 @@ "\n" "Polecenie nie znalezione" -#: plugins/sudoers/timestamp.c:197 -#, c-format -msgid "unable to truncate time stamp file to %lld bytes" -msgstr "nie udało się uciąć pliku znacznika czasu do długości %lld" - -#: plugins/sudoers/timestamp.c:297 +#: plugins/sudoers/timestamp.c:233 #, c-format msgid "%s is group writable" msgstr "%s jest zapisywalny dla groupy" -#: plugins/sudoers/timestamp.c:318 +#: plugins/sudoers/timestamp.c:309 #, c-format -msgid "timestamp path too long: %s/%s" -msgstr "ścieżka znacznika czasu zbyt długa: %s/%s" +msgid "unable to truncate time stamp file to %lld bytes" +msgstr "nie udało się uciąć pliku znacznika czasu do długości %lld" -#: plugins/sudoers/timestamp.c:498 +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:488 plugins/sudoers/visudo.c:494 +msgid "unable to read the clock" +msgstr "nie udało się odczytać zegara" + +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "znacznik czasu zbyt daleko w przyszłości" -#: plugins/sudoers/timestamp.c:510 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "znacznik czasu zbyt daleko w przyszłości: %20.20s" -#: plugins/sudoers/timestamp.c:613 plugins/sudoers/timestamp.c:634 +#: plugins/sudoers/timestamp.c:863 +#, c-format +msgid "unable to lock time stamp file %s" +msgstr "nie udało się zablokować pliku znacznika czasu %s" + +#: plugins/sudoers/timestamp.c:906 plugins/sudoers/timestamp.c:926 #, c-format msgid "lecture status path too long: %s/%s" msgstr "ścieżka stanu instrukcji zbyt długa: %s/%s" -#: plugins/sudoers/visudo.c:192 +#: plugins/sudoers/visudo.c:182 #, c-format msgid "%s grammar version %d\n" msgstr "%s, wersja gramatyki %d\n" -#: plugins/sudoers/visudo.c:263 plugins/sudoers/visudo.c:552 +#: plugins/sudoers/visudo.c:254 plugins/sudoers/visudo.c:619 #, c-format msgid "press return to edit %s: " msgstr "wciśnięcie return przejdzie do edycji %s: " -#: plugins/sudoers/visudo.c:349 plugins/sudoers/visudo.c:355 +#: plugins/sudoers/visudo.c:320 +#, c-format +msgid "specified editor (%s) doesn't exist" +msgstr "podany edytor (%s) nie istnieje" + +#: plugins/sudoers/visudo.c:338 +#, c-format +msgid "no editor found (editor path = %s)" +msgstr "nie znaleziono edytora (ścieżka = %s)" + +#: plugins/sudoers/visudo.c:447 plugins/sudoers/visudo.c:455 msgid "write error" msgstr "błąd zapisu" -#: plugins/sudoers/visudo.c:439 +#: plugins/sudoers/visudo.c:501 #, 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:444 +#: plugins/sudoers/visudo.c:508 #, 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:450 +#: plugins/sudoers/visudo.c:514 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "błąd edytora (%s), %s nie zmieniony" -#: plugins/sudoers/visudo.c:472 +#: plugins/sudoers/visudo.c:536 #, c-format msgid "%s unchanged" msgstr "%s nie zmieniony" -#: plugins/sudoers/visudo.c:497 +#: plugins/sudoers/visudo.c:562 #, 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:507 +#: plugins/sudoers/visudo.c:573 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "nie udało się przeanalizować pliku tymczasowego (%s), nieznany błąd" -#: plugins/sudoers/visudo.c:543 +#: plugins/sudoers/visudo.c:610 #, 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:601 plugins/sudoers/visudo.c:610 +#: plugins/sudoers/visudo.c:669 plugins/sudoers/visudo.c:678 #, 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:605 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:673 plugins/sudoers/visudo.c:683 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "nie udało się zmienić uprawnień %s na 0%o" -#: plugins/sudoers/visudo.c:632 +#: plugins/sudoers/visudo.c:700 #, 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:646 +#: plugins/sudoers/visudo.c:714 #, 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:656 +#: plugins/sudoers/visudo.c:724 #, c-format msgid "error renaming %s, %s unchanged" msgstr "błąd podczas zmiany nazwy %s, %s nie zmieniony" -#: plugins/sudoers/visudo.c:718 +#: plugins/sudoers/visudo.c:786 msgid "What now? " msgstr "Co teraz? " -#: plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:800 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1639,87 +1824,72 @@ " (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:780 +#: plugins/sudoers/visudo.c:848 #, c-format msgid "unable to run %s" msgstr "nie udało się uruchomić %s" -#: plugins/sudoers/visudo.c:806 +#: plugins/sudoers/visudo.c:878 #, 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:813 +#: plugins/sudoers/visudo.c:885 #, 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:838 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:910 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "failed to parse %s file, unknown error" msgstr "nie udało się przeanalizować pliku %s, nieznany błąd" -#: plugins/sudoers/visudo.c:854 plugins/sudoers/visudo_json.c:1054 +#: plugins/sudoers/visudo.c:926 plugins/sudoers/visudo_json.c:1041 #, c-format msgid "parse error in %s near line %d\n" msgstr "błąd składni w %s w okolicy linii %d\n" -#: plugins/sudoers/visudo.c:857 plugins/sudoers/visudo_json.c:1057 +#: plugins/sudoers/visudo.c:929 plugins/sudoers/visudo_json.c:1044 #, c-format msgid "parse error in %s\n" msgstr "błąd składni w %s\n" -#: plugins/sudoers/visudo.c:865 plugins/sudoers/visudo.c:872 +#: plugins/sudoers/visudo.c:937 plugins/sudoers/visudo.c:944 #, c-format msgid "%s: parsed OK\n" msgstr "%s: składnia poprawna\n" -#: plugins/sudoers/visudo.c:918 +#: plugins/sudoers/visudo.c:991 #, c-format msgid "%s busy, try again later" msgstr "%s zajęty, proszę spróbować później" -#: plugins/sudoers/visudo.c:962 -#, c-format -msgid "specified editor (%s) doesn't exist" -msgstr "podany edytor (%s) nie istnieje" - -#: plugins/sudoers/visudo.c:985 -#, c-format -msgid "unable to stat editor (%s)" -msgstr "nie udało się wykonać stat na edytorze (%s)" - -#: plugins/sudoers/visudo.c:1033 -#, c-format -msgid "no editor found (editor path = %s)" -msgstr "nie znaleziono edytora (ścieżka = %s)" - -#: plugins/sudoers/visudo.c:1136 +#: plugins/sudoers/visudo.c:1087 #, c-format msgid "Error: cycle in %s `%s'" msgstr "Błąd: cykl w %s `%s'" -#: plugins/sudoers/visudo.c:1137 +#: plugins/sudoers/visudo.c:1088 #, c-format msgid "Warning: cycle in %s `%s'" msgstr "Uwaga: cykl w %s `%s'" -#: plugins/sudoers/visudo.c:1141 +#: plugins/sudoers/visudo.c:1092 #, c-format msgid "Error: %s `%s' referenced but not defined" msgstr "Błąd: %s `%s' użyty, ale nie zdefiniowany" -#: plugins/sudoers/visudo.c:1142 +#: plugins/sudoers/visudo.c:1093 #, c-format msgid "Warning: %s `%s' referenced but not defined" msgstr "Uwaga: %s `%s' użyty, ale nie zdefiniowany" -#: plugins/sudoers/visudo.c:1281 +#: plugins/sudoers/visudo.c:1236 #, c-format msgid "Warning: unused %s `%s'" msgstr "Uwaga: nie użyty %s `%s'" -#: plugins/sudoers/visudo.c:1394 +#: plugins/sudoers/visudo.c:1349 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -1728,7 +1898,7 @@ "%s - bezpieczna edycja pliku sudoers\n" "\n" -#: plugins/sudoers/visudo.c:1396 +#: plugins/sudoers/visudo.c:1351 msgid "" "\n" "Options:\n" @@ -1750,11 +1920,11 @@ " -V, --version wyświetlenie informacji o wersji i zakończenie\n" " -x, --export=plik_wyjściowy zapis danych sudoers w formacie JSON do pliku" -#: plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo_json.c:1018 #, c-format msgid "%s: input and output files must be different" msgstr "%s: pliki wejściowy i wyjściowy muszą być różne" -#: toke.l:915 +#: toke.l:918 msgid "too many levels of includes" msgstr "za dużo poziomów include" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/plugins/sudoers/po/pt_BR.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/plugins/sudoers/po/pt_BR.mo differ diff -Nru sudo-1.8.12/plugins/sudoers/po/pt_BR.po sudo-1.8.16/plugins/sudoers/po/pt_BR.po --- sudo-1.8.12/plugins/sudoers/po/pt_BR.po 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/po/pt_BR.po 2016-03-17 16:13:10.000000000 +0000 @@ -1,21 +1,21 @@ # Brazilian Portuguese translation of sudoers. # This file is distributed under the same license as the sudo package. -# Copyright (C) 2014 Free Software Foundation, Inc. -# Rafael Ferreira , 2013, 2014. +# Copyright (C) 2016 Free Software Foundation, Inc. +# Rafael Fontenelle , 2013, 2014, 2015, 2016. # msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.12b3\n" -"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-11-20 13:33-0700\n" -"PO-Revision-Date: 2014-11-24 15:15-0300\n" -"Last-Translator: Rafael Ferreira \n" +"Project-Id-Version: sudoers 1.8.16b1\n" +"Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" +"POT-Creation-Date: 2016-02-19 15:48-0700\n" +"PO-Revision-Date: 2016-02-25 15:37-0200\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" -"X-Generator: Poedit 1.6.10\n" +"X-Generator: Poedit 1.8.7\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: confstr.sh:1 @@ -42,46 +42,172 @@ msgid "Sorry, try again." msgstr "Sinto muito, tente novamente." -#: gram.y:379 +#: gram.y:183 gram.y:201 gram.y:207 gram.y:213 gram.y:219 gram.y:225 +#: gram.y:241 gram.y:248 gram.y:255 gram.y:262 gram.y:269 gram.y:285 +#: gram.y:308 gram.y:315 gram.y:322 gram.y:329 gram.y:336 gram.y:391 +#: gram.y:399 gram.y:409 gram.y:439 gram.y:446 gram.y:453 gram.y:460 +#: gram.y:572 gram.y:579 gram.y:588 gram.y:597 gram.y:614 gram.y:670 +#: gram.y:677 gram.y:684 gram.y:692 gram.y:784 gram.y:791 gram.y:798 +#: gram.y:805 gram.y:812 gram.y:838 gram.y:845 gram.y:852 gram.y:1136 +#: gram.y:1143 plugins/sudoers/alias.c:123 plugins/sudoers/alias.c:136 +#: plugins/sudoers/auth/bsdauth.c:141 plugins/sudoers/auth/kerb5.c:119 +#: plugins/sudoers/auth/kerb5.c:145 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/auth/sia.c:59 +#: plugins/sudoers/defaults.c:518 plugins/sudoers/defaults.c:722 +#: plugins/sudoers/defaults.c:882 plugins/sudoers/editor.c:64 +#: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:92 +#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/iolog.c:586 +#: plugins/sudoers/iolog.c:618 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:446 plugins/sudoers/ldap.c:477 +#: plugins/sudoers/ldap.c:529 plugins/sudoers/ldap.c:562 +#: plugins/sudoers/ldap.c:917 plugins/sudoers/ldap.c:1064 +#: plugins/sudoers/ldap.c:1384 plugins/sudoers/ldap.c:1542 +#: plugins/sudoers/ldap.c:1620 plugins/sudoers/ldap.c:1756 +#: plugins/sudoers/ldap.c:1780 plugins/sudoers/ldap.c:1810 +#: plugins/sudoers/ldap.c:1863 plugins/sudoers/ldap.c:1878 +#: plugins/sudoers/ldap.c:1974 plugins/sudoers/ldap.c:2007 +#: plugins/sudoers/ldap.c:2160 plugins/sudoers/ldap.c:2257 +#: plugins/sudoers/ldap.c:3063 plugins/sudoers/ldap.c:3096 +#: plugins/sudoers/ldap.c:3407 plugins/sudoers/ldap.c:3435 +#: plugins/sudoers/ldap.c:3451 plugins/sudoers/ldap.c:3540 +#: plugins/sudoers/ldap.c:3556 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:666 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:508 +#: plugins/sudoers/match.c:544 plugins/sudoers/match.c:742 +#: plugins/sudoers/match.c:799 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:393 +#: plugins/sudoers/policy.c:602 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/sssd.c:160 plugins/sudoers/sssd.c:192 +#: plugins/sudoers/sssd.c:235 plugins/sudoers/sssd.c:242 +#: plugins/sudoers/sssd.c:278 plugins/sudoers/sssd.c:323 +#: plugins/sudoers/sssd.c:920 plugins/sudoers/sssd.c:1053 +#: plugins/sudoers/sudoers.c:159 plugins/sudoers/sudoers.c:294 +#: plugins/sudoers/sudoers.c:304 plugins/sudoers/sudoers.c:312 +#: plugins/sudoers/sudoers.c:365 plugins/sudoers/sudoers.c:663 +#: plugins/sudoers/sudoers.c:749 plugins/sudoers/sudoers.c:793 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:472 +#: plugins/sudoers/sudoreplay.c:668 plugins/sudoers/sudoreplay.c:780 +#: plugins/sudoers/sudoreplay.c:820 plugins/sudoers/sudoreplay.c:829 +#: plugins/sudoers/sudoreplay.c:839 plugins/sudoers/sudoreplay.c:847 +#: plugins/sudoers/sudoreplay.c:851 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1011 plugins/sudoers/testsudoers.c:130 +#: plugins/sudoers/testsudoers.c:188 plugins/sudoers/testsudoers.c:215 +#: plugins/sudoers/testsudoers.c:232 plugins/sudoers/timestamp.c:390 +#: plugins/sudoers/timestamp.c:426 plugins/sudoers/timestamp.c:838 +#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 +#: plugins/sudoers/toke_util.c:147 plugins/sudoers/visudo.c:152 +#: plugins/sudoers/visudo.c:213 plugins/sudoers/visudo.c:298 +#: plugins/sudoers/visudo.c:304 plugins/sudoers/visudo.c:434 +#: plugins/sudoers/visudo.c:980 plugins/sudoers/visudo.c:1024 +#: plugins/sudoers/visudo.c:1120 toke.l:785 toke.l:806 toke.l:816 toke.l:924 +#: toke.l:1082 +msgid "unable to allocate memory" +msgstr "não foi possível alocar memória" + +#: gram.y:471 msgid "a digest requires a path name" msgstr "um digest requer um nome de caminho" -#: plugins/sudoers/alias.c:136 +#: gram.y:1136 gram.y:1143 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/defaults.c:518 +#: plugins/sudoers/defaults.c:722 plugins/sudoers/defaults.c:882 +#: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 +#: plugins/sudoers/editor.c:92 plugins/sudoers/env.c:234 +#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 +#: plugins/sudoers/iolog.c:586 plugins/sudoers/iolog.c:618 +#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:446 +#: plugins/sudoers/ldap.c:477 plugins/sudoers/ldap.c:529 +#: plugins/sudoers/ldap.c:562 plugins/sudoers/ldap.c:917 +#: plugins/sudoers/ldap.c:1064 plugins/sudoers/ldap.c:1384 +#: plugins/sudoers/ldap.c:1542 plugins/sudoers/ldap.c:1620 +#: plugins/sudoers/ldap.c:1756 plugins/sudoers/ldap.c:1780 +#: plugins/sudoers/ldap.c:1810 plugins/sudoers/ldap.c:1863 +#: plugins/sudoers/ldap.c:1878 plugins/sudoers/ldap.c:1974 +#: plugins/sudoers/ldap.c:2007 plugins/sudoers/ldap.c:2160 +#: plugins/sudoers/ldap.c:2257 plugins/sudoers/ldap.c:3063 +#: plugins/sudoers/ldap.c:3096 plugins/sudoers/ldap.c:3407 +#: plugins/sudoers/ldap.c:3434 plugins/sudoers/ldap.c:3450 +#: plugins/sudoers/ldap.c:3540 plugins/sudoers/ldap.c:3556 +#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:508 +#: plugins/sudoers/match.c:544 plugins/sudoers/match.c:742 +#: plugins/sudoers/match.c:799 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:97 +#: plugins/sudoers/policy.c:106 plugins/sudoers/policy.c:115 +#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:250 +#: plugins/sudoers/policy.c:277 plugins/sudoers/policy.c:286 +#: plugins/sudoers/policy.c:325 plugins/sudoers/policy.c:335 +#: plugins/sudoers/policy.c:344 plugins/sudoers/policy.c:393 +#: plugins/sudoers/policy.c:602 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:160 +#: plugins/sudoers/sssd.c:192 plugins/sudoers/sssd.c:235 +#: plugins/sudoers/sssd.c:242 plugins/sudoers/sssd.c:278 +#: plugins/sudoers/sssd.c:323 plugins/sudoers/sssd.c:920 +#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sudoers.c:159 +#: plugins/sudoers/sudoers.c:294 plugins/sudoers/sudoers.c:304 +#: plugins/sudoers/sudoers.c:312 plugins/sudoers/sudoers.c:365 +#: plugins/sudoers/sudoers.c:663 plugins/sudoers/sudoers.c:749 +#: plugins/sudoers/sudoers.c:793 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sudoreplay.c:472 plugins/sudoers/sudoreplay.c:668 +#: plugins/sudoers/sudoreplay.c:780 plugins/sudoers/sudoreplay.c:820 +#: plugins/sudoers/sudoreplay.c:829 plugins/sudoers/sudoreplay.c:839 +#: plugins/sudoers/sudoreplay.c:847 plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:1007 plugins/sudoers/sudoreplay.c:1011 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:188 +#: plugins/sudoers/testsudoers.c:215 plugins/sudoers/testsudoers.c:232 +#: plugins/sudoers/timestamp.c:390 plugins/sudoers/timestamp.c:426 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:147 +#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:213 +#: plugins/sudoers/visudo.c:298 plugins/sudoers/visudo.c:304 +#: plugins/sudoers/visudo.c:434 plugins/sudoers/visudo.c:980 +#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1120 toke.l:785 +#: toke.l:806 toke.l:816 toke.l:924 toke.l:1082 +#, c-format +msgid "%s: %s" +msgstr "%s: %s" + +#: plugins/sudoers/alias.c:132 #, c-format msgid "Alias `%s' already defined" msgstr "Alias \"%s\" já definido" -#: plugins/sudoers/auth/bsdauth.c:75 +#: plugins/sudoers/auth/bsdauth.c:68 #, c-format msgid "unable to get login class for user %s" msgstr "não foi possível obter classe de login para o usuário %s" -#: plugins/sudoers/auth/bsdauth.c:80 +#: plugins/sudoers/auth/bsdauth.c:73 msgid "unable to begin bsd authentication" msgstr "não foi possível iniciar autenticação BSD" -#: plugins/sudoers/auth/bsdauth.c:88 +#: plugins/sudoers/auth/bsdauth.c:81 msgid "invalid authentication type" msgstr "tipo de autenticação inválida" -#: plugins/sudoers/auth/bsdauth.c:97 +#: plugins/sudoers/auth/bsdauth.c:90 msgid "unable to initialize BSD authentication" msgstr "não foi possível inicializar autenticação BSD" -#: plugins/sudoers/auth/fwtk.c:59 +#: plugins/sudoers/auth/fwtk.c:52 msgid "unable to read fwtk config" msgstr "não foi possível ler configuração de fwtk" -#: plugins/sudoers/auth/fwtk.c:64 +#: plugins/sudoers/auth/fwtk.c:57 msgid "unable to connect to authentication server" msgstr "não foi possível conectar ao servidor de autenticação" -#: plugins/sudoers/auth/fwtk.c:70 plugins/sudoers/auth/fwtk.c:94 -#: plugins/sudoers/auth/fwtk.c:127 +#: plugins/sudoers/auth/fwtk.c:63 plugins/sudoers/auth/fwtk.c:87 +#: plugins/sudoers/auth/fwtk.c:121 msgid "lost connection to authentication server" msgstr "conexão perdida com o servidor de autenticação" -#: plugins/sudoers/auth/fwtk.c:74 +#: plugins/sudoers/auth/fwtk.c:67 #, c-format msgid "" "authentication server error:\n" @@ -90,155 +216,155 @@ "erro no servidor de autenticação:\n" "%s" -#: plugins/sudoers/auth/kerb5.c:116 +#: plugins/sudoers/auth/kerb5.c:111 #, c-format msgid "%s: unable to convert principal to string ('%s'): %s" msgstr "%s: não foi possível converter principal para string (\"%s\"): %s" -#: plugins/sudoers/auth/kerb5.c:158 +#: plugins/sudoers/auth/kerb5.c:161 #, c-format msgid "%s: unable to parse '%s': %s" msgstr "%s: não foi possível analisar \"%s\": %s" -#: plugins/sudoers/auth/kerb5.c:167 +#: plugins/sudoers/auth/kerb5.c:170 #, c-format msgid "%s: unable to resolve credential cache: %s" msgstr "%s: não foi possível resolver cache de credenciais: %s" -#: plugins/sudoers/auth/kerb5.c:214 +#: plugins/sudoers/auth/kerb5.c:217 #, c-format msgid "%s: unable to allocate options: %s" msgstr "%s: não foi possível alocar opções: %s" -#: plugins/sudoers/auth/kerb5.c:229 +#: plugins/sudoers/auth/kerb5.c:232 #, c-format msgid "%s: unable to get credentials: %s" msgstr "%s: não foi possível obter credenciais: %s" -#: plugins/sudoers/auth/kerb5.c:242 +#: plugins/sudoers/auth/kerb5.c:245 #, c-format msgid "%s: unable to initialize credential cache: %s" msgstr "%s: não foi possível inicializar cache de credenciais: %s" -#: plugins/sudoers/auth/kerb5.c:245 +#: plugins/sudoers/auth/kerb5.c:248 #, c-format msgid "%s: unable to store credential in cache: %s" msgstr "%s: não foi possível armazenar credenciais no cache: %s" -#: plugins/sudoers/auth/kerb5.c:309 +#: plugins/sudoers/auth/kerb5.c:312 #, c-format msgid "%s: unable to get host principal: %s" msgstr "%s: não foi possível obter principal da máquina: %s" -#: plugins/sudoers/auth/kerb5.c:323 +#: plugins/sudoers/auth/kerb5.c:326 #, c-format msgid "%s: Cannot verify TGT! Possible attack!: %s" msgstr "%s: Não foi possível verificar TGT! Possivelmente um ataque!: %s" -#: plugins/sudoers/auth/pam.c:98 +#: plugins/sudoers/auth/pam.c:92 msgid "unable to initialize PAM" msgstr "não foi possível inicializar PAM" -#: plugins/sudoers/auth/pam.c:149 +#: plugins/sudoers/auth/pam.c:164 msgid "account validation failure, is your account locked?" msgstr "falha de verificação da conta; sua conta está travada?" -#: plugins/sudoers/auth/pam.c:153 +#: plugins/sudoers/auth/pam.c:168 msgid "Account or password is expired, reset your password and try again" msgstr "Conta ou senha expirou; redefina sua senha e tente novamente" -#: plugins/sudoers/auth/pam.c:161 +#: plugins/sudoers/auth/pam.c:176 #, c-format msgid "unable to change expired password: %s" msgstr "não foi possível alterar a senha expirada: %s" -#: plugins/sudoers/auth/pam.c:166 +#: plugins/sudoers/auth/pam.c:181 msgid "Password expired, contact your system administrator" msgstr "Senha expirou; entre em contato com o administrador do seu sistema" -#: plugins/sudoers/auth/pam.c:170 +#: plugins/sudoers/auth/pam.c:185 msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator" msgstr "Conta expirou ou a configuração do PAM não possui uma seção \"account\" para sudo; contate o administrador do seu sistema" -#: plugins/sudoers/auth/pam.c:187 +#: plugins/sudoers/auth/pam.c:199 #, c-format msgid "PAM authentication error: %s" msgstr "erro de autenticação PAM: %s" -#: plugins/sudoers/auth/rfc1938.c:103 plugins/sudoers/visudo.c:228 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:218 #, c-format msgid "you do not exist in the %s database" msgstr "você não existe no banco de dados de %s" -#: plugins/sudoers/auth/securid5.c:80 +#: plugins/sudoers/auth/securid5.c:73 msgid "failed to initialise the ACE API library" msgstr "falha ao inicializar a biblioteca API ACE" -#: plugins/sudoers/auth/securid5.c:106 +#: plugins/sudoers/auth/securid5.c:99 msgid "unable to contact the SecurID server" msgstr "não foi possível contatar o servidor de SecurID" -#: plugins/sudoers/auth/securid5.c:115 +#: plugins/sudoers/auth/securid5.c:108 msgid "User ID locked for SecurID Authentication" msgstr "ID de usuário travado pela autenticação SecurID" -#: plugins/sudoers/auth/securid5.c:119 plugins/sudoers/auth/securid5.c:170 +#: plugins/sudoers/auth/securid5.c:112 plugins/sudoers/auth/securid5.c:163 msgid "invalid username length for SecurID" msgstr "comprimento de nome de usuário inválido para SecurID" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:175 +#: plugins/sudoers/auth/securid5.c:116 plugins/sudoers/auth/securid5.c:168 msgid "invalid Authentication Handle for SecurID" msgstr "manipulação inválida de autenticação para SecurID" -#: plugins/sudoers/auth/securid5.c:127 +#: plugins/sudoers/auth/securid5.c:120 msgid "SecurID communication failed" msgstr "falha de comunicação de SecurID" -#: plugins/sudoers/auth/securid5.c:131 plugins/sudoers/auth/securid5.c:214 +#: plugins/sudoers/auth/securid5.c:124 plugins/sudoers/auth/securid5.c:211 msgid "unknown SecurID error" msgstr "erro de SecurID desconhecido" -#: plugins/sudoers/auth/securid5.c:165 +#: plugins/sudoers/auth/securid5.c:158 msgid "invalid passcode length for SecurID" msgstr "comprimento de senha inválida para SecurID" -#: plugins/sudoers/auth/sia.c:123 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:125 msgid "unable to initialize SIA session" msgstr "não foi possível inicializar a sessão SIA" -#: plugins/sudoers/auth/sudo_auth.c:115 +#: plugins/sudoers/auth/sudo_auth.c:126 msgid "invalid authentication methods" msgstr "métodos de autenticação inválidos" -#: plugins/sudoers/auth/sudo_auth.c:117 +#: plugins/sudoers/auth/sudo_auth.c:128 msgid "Invalid authentication methods compiled into sudo! You may not mix standalone and non-standalone authentication." msgstr "Métodos de autenticação inválidos compilado no sudo! Você não pode misturar autenticação autônoma com não-autônoma." -#: plugins/sudoers/auth/sudo_auth.c:203 plugins/sudoers/auth/sudo_auth.c:252 +#: plugins/sudoers/auth/sudo_auth.c:224 plugins/sudoers/auth/sudo_auth.c:274 msgid "no authentication methods" msgstr "nenhum método de autenticação" -#: plugins/sudoers/auth/sudo_auth.c:205 +#: plugins/sudoers/auth/sudo_auth.c:226 msgid "There are no authentication methods compiled into sudo! If you want to turn off authentication, use the --disable-authentication configure option." msgstr "Não há métodos de autenticação compilados no sudo! Se você quiser desligar a autenticação, use a opção de configuração --disable-authentication." -#: plugins/sudoers/auth/sudo_auth.c:254 +#: plugins/sudoers/auth/sudo_auth.c:276 msgid "Unable to initialize authentication methods." msgstr "Não foi possível inicializar métodos de autenticação." -#: plugins/sudoers/auth/sudo_auth.c:412 +#: plugins/sudoers/auth/sudo_auth.c:442 msgid "Authentication methods:" msgstr "Métodos de autenticação:" -#: plugins/sudoers/bsm_audit.c:95 plugins/sudoers/bsm_audit.c:184 +#: plugins/sudoers/bsm_audit.c:111 plugins/sudoers/bsm_audit.c:200 msgid "Could not determine audit condition" msgstr "Não foi possível determinar a condição de auditoria" -#: plugins/sudoers/bsm_audit.c:156 plugins/sudoers/bsm_audit.c:244 +#: plugins/sudoers/bsm_audit.c:172 plugins/sudoers/bsm_audit.c:260 msgid "unable to commit audit record" msgstr "não foi possível enviar o registro de auditoria" -#: plugins/sudoers/check.c:197 +#: plugins/sudoers/check.c:252 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -258,15 +384,15 @@ " #3) Com grandes poderes vêm grandes responsabilidades.\n" "\n" -#: plugins/sudoers/check.c:240 plugins/sudoers/check.c:250 -#: plugins/sudoers/sudoers.c:599 plugins/sudoers/sudoers.c:628 +#: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 +#: plugins/sudoers/sudoers.c:699 plugins/sudoers/sudoers.c:728 #, c-format msgid "unknown uid: %u" msgstr "uid desconhecido: %u" -#: plugins/sudoers/check.c:245 plugins/sudoers/policy.c:683 -#: plugins/sudoers/sudoers.c:955 plugins/sudoers/testsudoers.c:212 -#: plugins/sudoers/testsudoers.c:364 +#: plugins/sudoers/check.c:300 plugins/sudoers/policy.c:774 +#: plugins/sudoers/sudoers.c:1095 plugins/sudoers/testsudoers.c:206 +#: plugins/sudoers/testsudoers.c:361 #, c-format msgid "unknown user: %s" msgstr "usuário desconhecido: %s" @@ -315,539 +441,552 @@ msgstr "Envia correio se o usuário não tiver permissão para executar um comando" #: plugins/sudoers/def_data.c:67 +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:71 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:71 +#: plugins/sudoers/def_data.c:75 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:75 +#: plugins/sudoers/def_data.c:79 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Arquivo contendo as instruções do sudo: %s" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:83 msgid "Require users to authenticate by default" msgstr "Exige que os usuários se autentiquem, por padrão" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:87 msgid "Root may run sudo" msgstr "Root pode executar sudo" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:91 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:91 +#: plugins/sudoers/def_data.c:95 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:95 +#: plugins/sudoers/def_data.c:99 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:99 +#: plugins/sudoers/def_data.c:103 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:103 +#: plugins/sudoers/def_data.c:107 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:107 +#: plugins/sudoers/def_data.c:111 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:111 +#: plugins/sudoers/def_data.c:115 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:115 +#: plugins/sudoers/def_data.c:119 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:119 +#: plugins/sudoers/def_data.c:123 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:123 +#: plugins/sudoers/def_data.c:127 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo vai honrar a variável de ambiente EDITOR" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:131 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:131 +#: plugins/sudoers/def_data.c:135 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:135 +#: plugins/sudoers/def_data.c:139 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:139 +#: plugins/sudoers/def_data.c:143 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:143 +#: plugins/sudoers/def_data.c:147 msgid "Set the LOGNAME and USER environment variables" msgstr "Define as variáveis de ambiente LOGNAME e USER" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:151 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:151 +#: plugins/sudoers/def_data.c:155 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:155 +#: plugins/sudoers/def_data.c:159 #, 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:159 +#: plugins/sudoers/def_data.c:163 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Marca de tempo de autenticação expira em: %.1f minutos" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:167 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Pedido de senha expira em: %.1f minutos" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:171 #, 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:171 +#: plugins/sudoers/def_data.c:175 #, 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:175 +#: plugins/sudoers/def_data.c:179 #, c-format msgid "Path to log file: %s" msgstr "Caminho para o arquivo de log: %s" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:183 #, c-format msgid "Path to mail program: %s" msgstr "Caminho para o programa de correio: %s" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:187 #, c-format msgid "Flags for mail program: %s" msgstr "Opções para o programa de correio: %s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:191 #, c-format msgid "Address to send mail to: %s" msgstr "Endereço para onde enviar correio: %s" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:195 #, c-format msgid "Address to send mail from: %s" msgstr "Endereço de onde enviar correio: %s" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:199 #, c-format msgid "Subject line for mail messages: %s" msgstr "Linha do assunto para as mensagens de correio: %s" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:203 #, c-format msgid "Incorrect password message: %s" msgstr "Mensagem de senha incorreta: %s" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:207 #, 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:207 +#: plugins/sudoers/def_data.c:211 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Caminho para diretório de marca de tempo de autenticação: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:215 #, 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:215 +#: plugins/sudoers/def_data.c:219 #, 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:219 +#: plugins/sudoers/def_data.c:223 #, c-format msgid "Default password prompt: %s" msgstr "Pedido de senha padrão: %s" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:227 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:227 +#: plugins/sudoers/def_data.c:231 #, 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:231 +#: plugins/sudoers/def_data.c:235 #, 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:235 +#: plugins/sudoers/def_data.c:239 #, 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:239 +#: plugins/sudoers/def_data.c:243 #, 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:243 +#: plugins/sudoers/def_data.c:247 #, 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:247 +#: plugins/sudoers/def_data.c:251 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:251 +#: plugins/sudoers/def_data.c:255 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:255 +#: plugins/sudoers/def_data.c:259 #, 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:259 +#: plugins/sudoers/def_data.c:263 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:263 +#: plugins/sudoers/def_data.c:267 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:267 +#: plugins/sudoers/def_data.c:271 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:271 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to check for sanity:" msgstr "Variáveis de ambiente nas quais deve-se verificar sanidade:" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to remove:" msgstr "Variáveis de ambiente para remover:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:283 msgid "Environment variables to preserve:" msgstr "Variáveis de ambiente para preservar:" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:287 #, 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:287 +#: plugins/sudoers/def_data.c:291 #, 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:291 +#: plugins/sudoers/def_data.c:295 #, 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:295 +#: plugins/sudoers/def_data.c:299 #, 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:299 +#: plugins/sudoers/def_data.c:303 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:303 +#: plugins/sudoers/def_data.c:307 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:307 +#: plugins/sudoers/def_data.c:311 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:311 +#: plugins/sudoers/def_data.c:315 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:315 +#: plugins/sudoers/def_data.c:319 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:319 +#: plugins/sudoers/def_data.c:323 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:323 +#: plugins/sudoers/def_data.c:327 msgid "Compress I/O logs using zlib" msgstr "Comprime logs I/O usando zlib" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:331 msgid "Always run commands in a pseudo-tty" msgstr "Sempre executa comandos em um pseudo-tty" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:335 #, 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:335 +#: plugins/sudoers/def_data.c:339 #, 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:339 +#: plugins/sudoers/def_data.c:343 #, 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:343 +#: plugins/sudoers/def_data.c:347 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:347 +#: plugins/sudoers/def_data.c:351 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:351 +#: plugins/sudoers/def_data.c:355 msgid "Set of permitted privileges" msgstr "Conjunto de privilégios permitidos" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:359 msgid "Set of limit privileges" msgstr "Conjunto de privilégios limitados" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:363 msgid "Run commands on a pty in the background" msgstr "Executa comandos em um pty em plano de fundo" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:367 msgid "PAM service name to use" msgstr "Nome do serviço PAM para usar" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:371 msgid "PAM service name to use for login shells" msgstr "Nome do serviço PAM para usar para shells de login" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:375 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:375 +#: plugins/sudoers/def_data.c:379 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:379 +#: plugins/sudoers/def_data.c:383 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Número máximo de sequência de log de E/S: %u" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:387 msgid "Enable sudoers netgroup support" msgstr "Habilita suporte a netgroup no sudoers" -#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:601 -#: plugins/sudoers/visudo_json.c:642 plugins/sudoers/visudo_json.c:677 +#: plugins/sudoers/def_data.c:391 +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:395 +msgid "Follow symbolic links when editing files with sudoedit" +msgstr "Segue links simbólicos ao editar arquivos com sudoedit" + +#: plugins/sudoers/def_data.c:399 +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:403 +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/defaults.c:199 plugins/sudoers/defaults.c:610 +#: plugins/sudoers/visudo_json.c:633 plugins/sudoers/visudo_json.c:668 #, c-format msgid "unknown defaults entry `%s'" msgstr "entrada padrão \"%s\" desconhecido" -#: plugins/sudoers/defaults.c:218 plugins/sudoers/defaults.c:228 -#: plugins/sudoers/defaults.c:248 plugins/sudoers/defaults.c:261 -#: plugins/sudoers/defaults.c:274 plugins/sudoers/defaults.c:287 -#: plugins/sudoers/defaults.c:300 plugins/sudoers/defaults.c:320 -#: plugins/sudoers/defaults.c:330 +#: plugins/sudoers/defaults.c:207 plugins/sudoers/defaults.c:217 +#: plugins/sudoers/defaults.c:241 plugins/sudoers/defaults.c:256 +#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 +#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 +#: plugins/sudoers/defaults.c:325 #, c-format msgid "value `%s' is invalid for option `%s'" msgstr "valor \"%s\" é inválido para a opção \"%s\"" -#: plugins/sudoers/defaults.c:221 plugins/sudoers/defaults.c:231 -#: plugins/sudoers/defaults.c:239 plugins/sudoers/defaults.c:256 -#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 -#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 -#: plugins/sudoers/defaults.c:326 +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:220 +#: plugins/sudoers/defaults.c:228 plugins/sudoers/defaults.c:251 +#: plugins/sudoers/defaults.c:264 plugins/sudoers/defaults.c:277 +#: plugins/sudoers/defaults.c:290 plugins/sudoers/defaults.c:310 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "no value specified for `%s'" msgstr "nenhum valor especificado para \"%s\"" -#: plugins/sudoers/defaults.c:244 +#: plugins/sudoers/defaults.c:233 #, c-format msgid "values for `%s' must start with a '/'" msgstr "valores para \"%s\" devem iniciar com um \"/\"" -#: plugins/sudoers/defaults.c:306 +#: plugins/sudoers/defaults.c:301 #, c-format msgid "option `%s' does not take a value" msgstr "opção \"%s\" não leva um valor" -#: plugins/sudoers/env.c:276 plugins/sudoers/env.c:283 -#: plugins/sudoers/env.c:386 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:918 plugins/sudoers/policy.c:461 -#: plugins/sudoers/policy.c:470 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:708 plugins/sudoers/testsudoers.c:242 -#: plugins/sudoers/toke_util.c:174 +#: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 +#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:450 +#: plugins/sudoers/ldap.c:540 plugins/sudoers/ldap.c:1166 +#: plugins/sudoers/ldap.c:1388 plugins/sudoers/ldap.c:1704 +#: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:929 +#: plugins/sudoers/policy.c:511 plugins/sudoers/policy.c:520 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:815 +#: plugins/sudoers/testsudoers.c:236 plugins/sudoers/toke_util.c:162 #, c-format msgid "internal error, %s overflow" msgstr "erro interno, estouro de pilha de %s" -#: plugins/sudoers/env.c:359 +#: plugins/sudoers/env.c:377 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: envp corrupto, cumprimento não confere" -#: plugins/sudoers/env.c:1054 +#: plugins/sudoers/env.c:1083 +msgid "unable to rebuild the environment" +msgstr "não foi possível recompilar o ambiente" + +#: plugins/sudoers/env.c:1157 #, 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/group_plugin.c:94 +#: plugins/sudoers/group_plugin.c:86 #, c-format msgid "%s must be owned by uid %d" msgstr "%s deve ter como dono o uid %d" -#: plugins/sudoers/group_plugin.c:98 +#: plugins/sudoers/group_plugin.c:90 #, c-format msgid "%s must only be writable by owner" msgstr "%s deve ser gravável apenas pelo dono" -#: plugins/sudoers/group_plugin.c:105 plugins/sudoers/sssd.c:251 +#: plugins/sudoers/group_plugin.c:98 plugins/sudoers/sssd.c:331 #, c-format msgid "unable to load %s: %s" msgstr "não foi possível carregar %s: %s" -#: plugins/sudoers/group_plugin.c:110 +#: plugins/sudoers/group_plugin.c:104 #, c-format msgid "unable to find symbol \"group_plugin\" in %s" msgstr "não foi possível localizar um símbolo \"group_plugin\" %s" -#: plugins/sudoers/group_plugin.c:115 +#: plugins/sudoers/group_plugin.c:109 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: versão maior do plug-in de grupo %d incompatível, esperava %d" -#: plugins/sudoers/interfaces.c:116 +#: plugins/sudoers/interfaces.c:117 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:101 plugins/sudoers/iolog.c:119 -#: plugins/sudoers/timestamp.c:233 +#: plugins/sudoers/iolog.c:92 plugins/sudoers/iolog.c:110 +#: plugins/sudoers/timestamp.c:169 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s existe, mas não é um diretório (0%o)" -#: plugins/sudoers/iolog.c:112 plugins/sudoers/iolog.c:133 -#: plugins/sudoers/iolog.c:140 plugins/sudoers/timestamp.c:227 -#: plugins/sudoers/timestamp.c:248 +#: plugins/sudoers/iolog.c:103 plugins/sudoers/iolog.c:124 +#: plugins/sudoers/iolog.c:131 plugins/sudoers/timestamp.c:163 +#: plugins/sudoers/timestamp.c:184 #, c-format msgid "unable to mkdir %s" msgstr "não foi possível fazer mkdir %s" -#: plugins/sudoers/iolog.c:209 plugins/sudoers/sudoers.c:764 -#: plugins/sudoers/sudoreplay.c:348 plugins/sudoers/sudoreplay.c:819 -#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/timestamp.c:357 -#: plugins/sudoers/visudo.c:832 plugins/sudoers/visudo_json.c:1025 -#: plugins/sudoers/visudo_json.c:1038 +#: plugins/sudoers/iolog.c:200 plugins/sudoers/sudoers.c:871 +#: plugins/sudoers/sudoreplay.c:300 plugins/sudoers/sudoreplay.c:769 +#: plugins/sudoers/sudoreplay.c:973 plugins/sudoers/timestamp.c:399 +#: plugins/sudoers/visudo.c:904 plugins/sudoers/visudo_json.c:1012 +#: plugins/sudoers/visudo_json.c:1025 #, c-format msgid "unable to open %s" msgstr "não foi possível abrir %s" -#: plugins/sudoers/iolog.c:250 plugins/sudoers/sudoers.c:768 -#: plugins/sudoers/sudoreplay.c:1123 +#: plugins/sudoers/iolog.c:241 plugins/sudoers/sudoers.c:875 +#: plugins/sudoers/sudoreplay.c:1084 #, c-format msgid "unable to read %s" msgstr "não foi possível ler %s" -#: plugins/sudoers/iolog.c:282 plugins/sudoers/sudoreplay.c:588 -#: plugins/sudoers/timestamp.c:186 plugins/sudoers/timestamp.c:189 +#: plugins/sudoers/iolog.c:277 plugins/sudoers/sudoreplay.c:550 +#: plugins/sudoers/timestamp.c:298 plugins/sudoers/timestamp.c:301 #, c-format msgid "unable to write to %s" msgstr "não foi possível gravar em %s" -#: plugins/sudoers/iolog.c:347 plugins/sudoers/iolog.c:545 +#: plugins/sudoers/iolog.c:342 plugins/sudoers/iolog.c:540 #, c-format msgid "unable to create %s" msgstr "não foi possível criar %s" -#: plugins/sudoers/ldap.c:406 +#: plugins/sudoers/iolog.c:723 +#, c-format +msgid "%s: internal error, file index %d not open" +msgstr "%s: erro interno, o índice de arquivo %d não está aberto" + +#: plugins/sudoers/ldap.c:428 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: porta muito grande" -# Mantive, pois hostbuf é uma variável do plugins/sudoers/ldap.c -#: plugins/sudoers/ldap.c:431 -msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" -msgstr "sudo_ldap_conf_add_ports: sem espaço para expansão de hostbuf" - -#: plugins/sudoers/ldap.c:464 +#: plugins/sudoers/ldap.c:488 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "tipo de uri LDAP sem suporte: %s" -#: plugins/sudoers/ldap.c:495 +#: plugins/sudoers/ldap.c:515 msgid "unable to mix ldap and ldaps URIs" msgstr "não foi possível misturar ldap e ldaps URIs" -#: plugins/sudoers/ldap.c:499 plugins/sudoers/ldap.c:532 +#: plugins/sudoers/ldap.c:519 plugins/sudoers/ldap.c:555 msgid "starttls not supported when using ldaps" msgstr "Sem suporte a starttls ao usar ldaps" -# Mantive, pois hostbuf é uma variável do plugins/sudoers/ldap.c -#: plugins/sudoers/ldap.c:517 -msgid "sudo_ldap_parse_uri: out of space building hostbuf" -msgstr "sudo_ldap_parse_uri: sem espaço na construção de hostbuf" - -#: plugins/sudoers/ldap.c:599 +#: plugins/sudoers/ldap.c:626 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "não foi possível inicializar bando de dados de chaves e certificados SSL: %s" -#: plugins/sudoers/ldap.c:602 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "você deve definir TLS_CERT em %s para usar SSL" -#: plugins/sudoers/ldap.c:1093 +#: plugins/sudoers/ldap.c:1152 msgid "unable to get GMT time" msgstr "não foi possível obter o horário GMT" -#: plugins/sudoers/ldap.c:1099 +#: plugins/sudoers/ldap.c:1158 msgid "unable to format timestamp" msgstr "não é possível formatar marca de tempo" -#: plugins/sudoers/ldap.c:1107 -msgid "unable to build time filter" -msgstr "não foi possível compilar filtro de tempo" - -#: plugins/sudoers/ldap.c:1326 -msgid "sudo_ldap_build_pass1 allocation mismatch" -msgstr "alocação de sudo_ldap_build_pass1 não confere" - -#: plugins/sudoers/ldap.c:1469 +#: plugins/sudoers/ldap.c:1853 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:1963 +#: plugins/sudoers/ldap.c:2394 #, c-format msgid "" "\n" @@ -856,7 +995,7 @@ "\n" "Papel LDAP: %s\n" -#: plugins/sudoers/ldap.c:1965 +#: plugins/sudoers/ldap.c:2396 #, c-format msgid "" "\n" @@ -865,108 +1004,108 @@ "\n" "Papel LDAP: DESCONHECIDO\n" -#: plugins/sudoers/ldap.c:2012 +#: plugins/sudoers/ldap.c:2443 #, c-format msgid " Order: %s\n" msgstr " Ordem: %s\n" -#: plugins/sudoers/ldap.c:2020 plugins/sudoers/parse.c:512 -#: plugins/sudoers/sssd.c:1297 +#: plugins/sudoers/ldap.c:2451 plugins/sudoers/parse.c:555 +#: plugins/sudoers/sssd.c:1429 #, c-format msgid " Commands:\n" msgstr " Comandos:\n" -#: plugins/sudoers/ldap.c:2570 +#: plugins/sudoers/ldap.c:3015 #, c-format msgid "unable to initialize LDAP: %s" msgstr "não foi possível inicializar LDAP: %s" -#: plugins/sudoers/ldap.c:2612 +#: plugins/sudoers/ldap.c:3051 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:2845 +#: plugins/sudoers/ldap.c:3305 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "atributo sudoOrder inválido: %s" -#: plugins/sudoers/linux_audit.c:57 +#: plugins/sudoers/linux_audit.c:52 msgid "unable to open audit system" msgstr "não foi possível abrir o sistema de auditoria" -#: plugins/sudoers/linux_audit.c:94 +#: plugins/sudoers/linux_audit.c:93 msgid "unable to send audit message" msgstr "não foi possível enviar mensagem de auditoria" -#: plugins/sudoers/logging.c:134 +#: plugins/sudoers/logging.c:106 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: plugins/sudoers/logging.c:162 +#: plugins/sudoers/logging.c:134 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s : (comando continuado) %s" -#: plugins/sudoers/logging.c:187 +#: plugins/sudoers/logging.c:159 #, c-format msgid "unable to open log file: %s: %s" msgstr "não foi possível abrir o arquivo de log: %s: %s" -#: plugins/sudoers/logging.c:190 +#: plugins/sudoers/logging.c:162 #, c-format msgid "unable to lock log file: %s: %s" msgstr "não foi possível travar o arquivo de log: %s: %s" -#: plugins/sudoers/logging.c:242 +#: plugins/sudoers/logging.c:211 msgid "No user or host" msgstr "nenhum usuário ou máquina" -#: plugins/sudoers/logging.c:244 +#: plugins/sudoers/logging.c:213 msgid "validation failure" msgstr "falha de validação" -#: plugins/sudoers/logging.c:251 +#: plugins/sudoers/logging.c:220 msgid "user NOT in sudoers" msgstr "usuário NÃO ESTÁ no sudoers" -#: plugins/sudoers/logging.c:253 +#: plugins/sudoers/logging.c:222 msgid "user NOT authorized on host" msgstr "usuário NÃO ESTÁ autorizado na máquina" -#: plugins/sudoers/logging.c:255 +#: plugins/sudoers/logging.c:224 msgid "command not allowed" msgstr "comando não permitido" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:259 #, 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:262 #, 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:266 #, 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:269 #, 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:407 -#: plugins/sudoers/sudoers.c:409 plugins/sudoers/sudoers.c:411 -#: plugins/sudoers/sudoers.c:413 plugins/sudoers/sudoers.c:1128 -#: plugins/sudoers/sudoers.c:1129 +#: plugins/sudoers/logging.c:306 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1222 +#: plugins/sudoers/sudoers.c:1224 #, c-format msgid "%s: command not found" msgstr "%s: comando não encontrado" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:403 +#: plugins/sudoers/logging.c:308 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring `%s' found in '.'\n" @@ -975,71 +1114,71 @@ "ignorando \"%s\" encontrado em \".\"\n" "Use \"sudo ./%s\" se isto é o \"%s\" que você deseja executar." -#: plugins/sudoers/logging.c:353 +#: plugins/sudoers/logging.c:325 msgid "authentication failure" msgstr "falha de autenticação" -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:351 msgid "a password is required" msgstr "uma senha é necessária" -#: plugins/sudoers/logging.c:446 plugins/sudoers/logging.c:501 +#: plugins/sudoers/logging.c:422 plugins/sudoers/logging.c:484 #, 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:584 +#: plugins/sudoers/logging.c:572 msgid "unable to fork" msgstr "não foi possível fazer fork" -#: plugins/sudoers/logging.c:592 plugins/sudoers/logging.c:648 +#: plugins/sudoers/logging.c:580 plugins/sudoers/logging.c:640 #, c-format msgid "unable to fork: %m" msgstr "não foi possível fazer fork: %m" -#: plugins/sudoers/logging.c:638 +#: plugins/sudoers/logging.c:630 #, c-format msgid "unable to open pipe: %m" msgstr "não foi possível abrir um redirecionamento (pipe): %m" -#: plugins/sudoers/logging.c:663 +#: plugins/sudoers/logging.c:655 #, 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:698 +#: plugins/sudoers/logging.c:693 #, c-format msgid "unable to execute %s: %m" msgstr "não foi possível executar %s: %m" -#: plugins/sudoers/match.c:627 +#: plugins/sudoers/match.c:616 #, c-format msgid "unsupported digest type %d for %s" msgstr "tipo de digest %d sem suporte para %s" -#: plugins/sudoers/match.c:656 +#: plugins/sudoers/match.c:657 #, c-format msgid "%s: read error" msgstr "%s: erro de leitura" -#: plugins/sudoers/match.c:670 +#: plugins/sudoers/match.c:692 #, c-format 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:123 +#: plugins/sudoers/parse.c:114 #, c-format msgid "parse error in %s near line %d" msgstr "erro de análise em %s próximo à linha %d" -#: plugins/sudoers/parse.c:126 +#: plugins/sudoers/parse.c:117 #, c-format msgid "parse error in %s" msgstr "erro de análise em %s" -#: plugins/sudoers/parse.c:459 +#: plugins/sudoers/parse.c:502 #, c-format msgid "" "\n" @@ -1048,49 +1187,41 @@ "\n" "Entradas no sudoers:\n" -#: plugins/sudoers/parse.c:460 +#: plugins/sudoers/parse.c:503 #, c-format msgid " RunAsUsers: " msgstr " UsuáriosRunAs: " -#: plugins/sudoers/parse.c:474 +#: plugins/sudoers/parse.c:517 #, c-format msgid " RunAsGroups: " msgstr " GruposRunAs: " -#: plugins/sudoers/parse.c:483 +#: plugins/sudoers/parse.c:526 #, c-format msgid " Options: " msgstr " Opções: " -#: plugins/sudoers/policy.c:109 plugins/sudoers/policy.c:118 -#: plugins/sudoers/policy.c:127 plugins/sudoers/policy.c:151 -#: plugins/sudoers/policy.c:263 plugins/sudoers/policy.c:283 -#: plugins/sudoers/policy.c:292 plugins/sudoers/policy.c:322 -#: plugins/sudoers/policy.c:332 plugins/sudoers/policy.c:341 -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" +#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:253 +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:569 plugins/sudoers/visudo.c:773 +#: plugins/sudoers/policy.c:659 plugins/sudoers/visudo.c:841 #, c-format msgid "unable to execute %s" msgstr "não foi possível executar %s" -#: plugins/sudoers/policy.c:701 +#: plugins/sudoers/policy.c:792 #, 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:703 +#: plugins/sudoers/policy.c:794 #, 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:707 +#: plugins/sudoers/policy.c:798 #, c-format msgid "" "\n" @@ -1099,377 +1230,414 @@ "\n" "Caminho do sudoers: %s\n" -#: plugins/sudoers/policy.c:710 +#: plugins/sudoers/policy.c:801 #, c-format msgid "nsswitch path: %s\n" msgstr "caminho do nsswitch: %s\n" -#: plugins/sudoers/policy.c:712 +#: plugins/sudoers/policy.c:803 #, c-format msgid "ldap.conf path: %s\n" msgstr "caminho do ldap.conf: %s\n" -#: plugins/sudoers/policy.c:713 +#: plugins/sudoers/policy.c:804 #, c-format msgid "ldap.secret path: %s\n" msgstr "caminho do ldap.secret: %s\n" -#: plugins/sudoers/pwutil.c:149 +#: plugins/sudoers/policy.c:837 +#, c-format +msgid "unable to register hook of type %d (version %d.%d)" +msgstr "não foi possível registrar hook do tipo %d (verssão %d.%d)" + +#: plugins/sudoers/pwutil.c:158 plugins/sudoers/pwutil.c:176 +#, c-format +msgid "unable to cache uid %u, out of memory" +msgstr "não foi possível fazer cache de uid %u, memória insuficiente" + +#: plugins/sudoers/pwutil.c:170 #, 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:194 +#: plugins/sudoers/pwutil.c:222 plugins/sudoers/pwutil.c:239 +#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:334 +#, c-format +msgid "unable to cache user %s, out of memory" +msgstr "não foi possível fazer cache de usuário %s, memória insuficiente" + +#: plugins/sudoers/pwutil.c:234 #, 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:400 +#: plugins/sudoers/pwutil.c:474 plugins/sudoers/pwutil.c:492 +#, c-format +msgid "unable to cache gid %u, out of memory" +msgstr "não foi possível fazer cache de gid %u, memória insuficiente" + +#: plugins/sudoers/pwutil.c:486 #, 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:439 +#: plugins/sudoers/pwutil.c:532 plugins/sudoers/pwutil.c:549 +#: plugins/sudoers/pwutil.c:584 plugins/sudoers/pwutil.c:626 +#, c-format +msgid "unable to cache group %s, out of memory" +msgstr "não foi possível fazer cache de grupo %s, memória insuficiente" + +#: plugins/sudoers/pwutil.c:544 #, 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:605 plugins/sudoers/pwutil.c:631 +#: plugins/sudoers/pwutil.c:739 plugins/sudoers/pwutil.c:783 #, 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:627 +#: plugins/sudoers/pwutil.c:745 plugins/sudoers/pwutil.c:788 +#, c-format +msgid "unable to cache group list for %s, out of memory" +msgstr "não foi possível fazer cache da lista de grupos de %s, memória insuficiente" + +#: plugins/sudoers/pwutil.c:777 #, c-format msgid "unable to parse groups for %s" msgstr "Não foi possível analisar grupos de %s" -#: plugins/sudoers/set_perms.c:122 plugins/sudoers/set_perms.c:447 -#: plugins/sudoers/set_perms.c:850 plugins/sudoers/set_perms.c:1147 -#: plugins/sudoers/set_perms.c:1439 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 +#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 +#: plugins/sudoers/set_perms.c:1430 msgid "perm stack overflow" msgstr "estouro da pilha de permissões" -#: plugins/sudoers/set_perms.c:130 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:1076 -#: plugins/sudoers/set_perms.c:1155 plugins/sudoers/set_perms.c:1372 -#: plugins/sudoers/set_perms.c:1447 plugins/sudoers/set_perms.c:1536 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 +#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 +#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 +#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 +#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 msgid "perm stack underflow" msgstr "esvaziamento da pilha de permissões" -#: plugins/sudoers/set_perms.c:189 plugins/sudoers/set_perms.c:502 -#: plugins/sudoers/set_perms.c:1206 plugins/sudoers/set_perms.c:1479 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:493 +#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 msgid "unable to change to root gid" msgstr "não foi possível alterar gid de root" -#: plugins/sudoers/set_perms.c:278 plugins/sudoers/set_perms.c:599 -#: plugins/sudoers/set_perms.c:987 plugins/sudoers/set_perms.c:1283 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:590 +#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 msgid "unable to change to runas gid" msgstr "não foi possível alterar para gid de \"runas\"" -#: plugins/sudoers/set_perms.c:283 plugins/sudoers/set_perms.c:604 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:595 +#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 msgid "unable to set runas group vector" msgstr "não foi possível definir vetor de grupo de \"runas\"" -#: plugins/sudoers/set_perms.c:294 plugins/sudoers/set_perms.c:615 -#: plugins/sudoers/set_perms.c:1001 plugins/sudoers/set_perms.c:1297 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:606 +#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 msgid "unable to change to runas uid" msgstr "não foi possível alterar para uid de \"runas\"" -#: plugins/sudoers/set_perms.c:312 plugins/sudoers/set_perms.c:633 -#: plugins/sudoers/set_perms.c:1017 plugins/sudoers/set_perms.c:1313 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:624 +#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 msgid "unable to change to sudoers gid" msgstr "não foi possível alterar para gid de sudoers" -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 msgid "too many processes" msgstr "processos demais" -#: plugins/sudoers/solaris_audit.c:47 +#: plugins/sudoers/solaris_audit.c:51 msgid "unable to get current working directory" msgstr "não foi possível definir diretório de trabalho atual" -#: plugins/sudoers/solaris_audit.c:55 +#: plugins/sudoers/solaris_audit.c:59 #, c-format msgid "truncated audit path user_cmnd: %s" msgstr "caminho de audit truncado user_cmnd: %s" -#: plugins/sudoers/solaris_audit.c:62 +#: plugins/sudoers/solaris_audit.c:66 #, c-format msgid "truncated audit path argv[0]: %s" msgstr "caminho de audit truncado argv[0]: %s" -#: plugins/sudoers/solaris_audit.c:111 +#: plugins/sudoers/solaris_audit.c:115 msgid "audit_failure message too long" msgstr "mensagem de audit_failure muito grande" -#: plugins/sudoers/sssd.c:252 +#: plugins/sudoers/sssd.c:333 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:259 plugins/sudoers/sssd.c:267 -#: plugins/sudoers/sssd.c:275 plugins/sudoers/sssd.c:283 -#: plugins/sudoers/sssd.c:291 +#: plugins/sudoers/sssd.c:341 plugins/sudoers/sssd.c:350 +#: plugins/sudoers/sssd.c:359 plugins/sudoers/sssd.c:368 +#: plugins/sudoers/sssd.c:377 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "não foi possível localizar símbolo \"%s\" em %s" -#: plugins/sudoers/sudo_nss.c:296 +#: plugins/sudoers/sudo_nss.c:290 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Entradas padrões correspondentes a %s em %s:\n" -#: plugins/sudoers/sudo_nss.c:309 +#: plugins/sudoers/sudo_nss.c:308 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Padrões específicos de comandos e \"runas\" de %s:\n" -#: plugins/sudoers/sudo_nss.c:322 +#: plugins/sudoers/sudo_nss.c:326 #, 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/sudo_nss.c:331 +#: plugins/sudoers/sudo_nss.c:339 #, 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" -#: plugins/sudoers/sudoers.c:160 plugins/sudoers/sudoers.c:201 -#: plugins/sudoers/sudoers.c:726 +#: plugins/sudoers/sudoers.c:172 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/visudo.c:223 plugins/sudoers/visudo.c:567 +msgid "unable to initialize sudoers default values" +msgstr "não foi possível inicializar valoers padrões do sudoers" + +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:239 +#: plugins/sudoers/sudoers.c:833 msgid "problem with defaults entries" msgstr "problema com o entradas padrão" -#: plugins/sudoers/sudoers.c:167 +#: plugins/sudoers/sudoers.c:205 msgid "no valid sudoers sources found, quitting" msgstr "nenhuma fonte de sudoers válida encontrada; saindo" -#: plugins/sudoers/sudoers.c:233 +#: plugins/sudoers/sudoers.c:275 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:278 +#: plugins/sudoers/sudoers.c:332 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:336 +#: plugins/sudoers/sudoers.c:396 #, c-format msgid "timestamp owner (%s): No such user" msgstr "dono da marca de tempo (%s): usuário inexistente" -#: plugins/sudoers/sudoers.c:350 +#: plugins/sudoers/sudoers.c:410 msgid "no tty" msgstr "nenhum tty" -#: plugins/sudoers/sudoers.c:351 +#: plugins/sudoers/sudoers.c:411 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:402 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "comando no diretório atual" -#: plugins/sudoers/sudoers.c:422 +#: plugins/sudoers/sudoers.c:486 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:674 +#: plugins/sudoers/sudoers.c:778 msgid "command too long" msgstr "comando muito grande" -#: plugins/sudoers/sudoers.c:779 plugins/sudoers/visudo.c:333 -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/sudoers.c:886 plugins/sudoers/visudo.c:427 +#: plugins/sudoers/visudo.c:667 #, c-format msgid "unable to stat %s" msgstr "não foi possível obter o estado de %s" -#: plugins/sudoers/sudoers.c:783 +#: plugins/sudoers/sudoers.c:890 #, c-format msgid "%s is not a regular file" msgstr "%s não é um arquivo comum" -#: plugins/sudoers/sudoers.c:787 plugins/sudoers/timestamp.c:289 toke.l:945 +#: plugins/sudoers/sudoers.c:894 plugins/sudoers/timestamp.c:225 toke.l:947 #, 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:791 toke.l:952 +#: plugins/sudoers/sudoers.c:898 toke.l:954 #, c-format msgid "%s is world writable" msgstr "%s é gravável globalmente" -#: plugins/sudoers/sudoers.c:795 toke.l:957 +#: plugins/sudoers/sudoers.c:902 toke.l:959 #, 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:826 +#: plugins/sudoers/sudoers.c:933 #, c-format msgid "only root can use `-c %s'" msgstr "apenas o root pode usar \"-c %s\"" -#: plugins/sudoers/sudoers.c:845 +#: plugins/sudoers/sudoers.c:952 #, c-format msgid "unknown login class: %s" msgstr "classe de login desconhecida: %s" -#: plugins/sudoers/sudoers.c:889 plugins/sudoers/sudoers.c:904 +#: plugins/sudoers/sudoers.c:1031 plugins/sudoers/sudoers.c:1059 #, c-format msgid "unable to resolve host %s" msgstr "não foi possível resolver máquina %s" -#: plugins/sudoers/sudoers.c:986 plugins/sudoers/testsudoers.c:388 +#: plugins/sudoers/sudoers.c:1126 plugins/sudoers/testsudoers.c:385 #, c-format msgid "unknown group: %s" msgstr "grupo desconhecido %s" -#: plugins/sudoers/sudoreplay.c:280 +#: plugins/sudoers/sudoreplay.c:232 #, c-format msgid "invalid filter option: %s" msgstr "opção de filtro inválida: %s" -#: plugins/sudoers/sudoreplay.c:293 +#: plugins/sudoers/sudoreplay.c:245 #, c-format msgid "invalid max wait: %s" msgstr "espera máxima inválida: %s" -#: plugins/sudoers/sudoreplay.c:299 +#: plugins/sudoers/sudoreplay.c:251 #, c-format msgid "invalid speed factor: %s" msgstr "fator de velocidade inválido: %s" -#: plugins/sudoers/sudoreplay.c:302 plugins/sudoers/visudo.c:190 +#: plugins/sudoers/sudoreplay.c:254 plugins/sudoers/visudo.c:180 #, c-format msgid "%s version %s\n" msgstr "%s versão %s\n" # timing é o nome do arquivo gerado pelo sudo; não traduzir. -#: plugins/sudoers/sudoreplay.c:334 +#: plugins/sudoers/sudoreplay.c:286 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/timing: %s" # timing é o nome do arquivo gerado pelo sudo; não traduzir. -#: plugins/sudoers/sudoreplay.c:340 +#: plugins/sudoers/sudoreplay.c:292 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/timing: %s" -#: plugins/sudoers/sudoreplay.c:356 +#: plugins/sudoers/sudoreplay.c:308 #, c-format msgid "Replaying sudo session: %s\n" msgstr "Reproduzindo sessão de sudo: %s\n" -#: plugins/sudoers/sudoreplay.c:362 +#: plugins/sudoers/sudoreplay.c:314 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Aviso: seu terminal é muito pequeno para reproduzir adequadamente o log.\n" -#: plugins/sudoers/sudoreplay.c:363 +#: plugins/sudoers/sudoreplay.c:315 #, 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:418 +#: plugins/sudoers/sudoreplay.c:368 msgid "unable to set tty to raw mode" msgstr "não foi possível definir o tty para modo raw" # timing é o nome do arquivo gerado pelo sudo; não traduzir. -#: plugins/sudoers/sudoreplay.c:449 +#: plugins/sudoers/sudoreplay.c:401 #, c-format msgid "invalid timing file line: %s" msgstr "linha inválida no arquivo timing: %s" -#: plugins/sudoers/sudoreplay.c:655 plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:611 plugins/sudoers/sudoreplay.c:636 #, c-format msgid "ambiguous expression \"%s\"" msgstr "expressão ambígua \"%s\"" -#: plugins/sudoers/sudoreplay.c:702 +#: plugins/sudoers/sudoreplay.c:658 msgid "unmatched ')' in expression" msgstr "\")\" não coincidente na expressão" -#: plugins/sudoers/sudoreplay.c:706 +#: plugins/sudoers/sudoreplay.c:662 #, c-format msgid "unknown search term \"%s\"" msgstr "termo de pesquisa desconhecido \"%s\"" -#: plugins/sudoers/sudoreplay.c:720 +#: plugins/sudoers/sudoreplay.c:677 #, c-format msgid "%s requires an argument" msgstr "%s requer um argumento" -#: plugins/sudoers/sudoreplay.c:724 plugins/sudoers/sudoreplay.c:1096 +#: plugins/sudoers/sudoreplay.c:680 plugins/sudoers/sudoreplay.c:1060 #, c-format msgid "invalid regular expression: %s" msgstr "expressão regular inválida: %s" -#: plugins/sudoers/sudoreplay.c:730 +#: plugins/sudoers/sudoreplay.c:684 #, c-format msgid "could not parse date \"%s\"" msgstr "não foi possível analisar a data \"%s\"" -#: plugins/sudoers/sudoreplay.c:739 +#: plugins/sudoers/sudoreplay.c:693 msgid "unmatched '(' in expression" msgstr "\"(\" sem correspondente na expressão" -#: plugins/sudoers/sudoreplay.c:741 +#: plugins/sudoers/sudoreplay.c:695 msgid "illegal trailing \"or\"" msgstr "fim de linha ilegal com \"or\"" -#: plugins/sudoers/sudoreplay.c:743 +#: plugins/sudoers/sudoreplay.c:697 msgid "illegal trailing \"!\"" msgstr "fim de linha ilegal com \"!\"" -#: plugins/sudoers/sudoreplay.c:796 +#: plugins/sudoers/sudoreplay.c:746 #, c-format msgid "unknown search type %d" msgstr "tipo de pesquisa desconhecido %d" -#: plugins/sudoers/sudoreplay.c:833 +#: plugins/sudoers/sudoreplay.c:784 #, c-format msgid "%s: invalid log file" msgstr "%s: arquivo de log inválido" -#: plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:802 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: campo de marca de tempo está faltando" -#: plugins/sudoers/sudoreplay.c:858 +#: plugins/sudoers/sudoreplay.c:809 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: marca de tempo %s: %s" -#: plugins/sudoers/sudoreplay.c:865 +#: plugins/sudoers/sudoreplay.c:816 #, c-format msgid "%s: user field is missing" msgstr "%s: campo de usuário está faltando" -#: plugins/sudoers/sudoreplay.c:873 +#: plugins/sudoers/sudoreplay.c:825 #, c-format msgid "%s: runas user field is missing" msgstr "%s: campo de usuário, a ser executado como, está faltando" -#: plugins/sudoers/sudoreplay.c:881 +#: plugins/sudoers/sudoreplay.c:834 #, c-format msgid "%s: runas group field is missing" msgstr "%s: campo de grupo, a ser executado como, está faltando" -#: plugins/sudoers/sudoreplay.c:1236 +#: plugins/sudoers/sudoreplay.c:1197 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "uso: %s [-h] [-d diretório] [-m número] [-s número] ID\n" -#: plugins/sudoers/sudoreplay.c:1239 +#: plugins/sudoers/sudoreplay.c:1200 #, 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:1248 +#: plugins/sudoers/sudoreplay.c:1209 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1478,7 +1646,7 @@ "%s - reproduz logs de sessão do sudo\n" "\n" -#: plugins/sudoers/sudoreplay.c:1250 +#: plugins/sudoers/sudoreplay.c:1211 msgid "" "\n" "Options:\n" @@ -1500,11 +1668,11 @@ " -s, --speed=número aumenta ou diminui a velocidade da saída\n" " -V, --version exibe a informação da versão e sai" -#: plugins/sudoers/testsudoers.c:327 +#: plugins/sudoers/testsudoers.c:324 msgid "\thost unmatched" msgstr "\tmáquina sem correspondente" -#: plugins/sudoers/testsudoers.c:330 +#: plugins/sudoers/testsudoers.c:327 msgid "" "\n" "Command allowed" @@ -1512,7 +1680,7 @@ "\n" "Comando permitido" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command denied" @@ -1520,7 +1688,7 @@ "\n" "Comando negado" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command unmatched" @@ -1528,114 +1696,129 @@ "\n" "Comando sem correspondente" -#: plugins/sudoers/timestamp.c:197 -#, c-format -msgid "unable to truncate time stamp file to %lld bytes" -msgstr "não foi possível truncar o arquivo de marca de tempo para %lld bytes" - -#: plugins/sudoers/timestamp.c:297 +#: plugins/sudoers/timestamp.c:233 #, c-format msgid "%s is group writable" msgstr "%s é gravável pelo grupo" -#: plugins/sudoers/timestamp.c:318 +#: plugins/sudoers/timestamp.c:309 #, c-format -msgid "timestamp path too long: %s/%s" -msgstr "caminho de marca de tempo muito longo: %s/%s" +msgid "unable to truncate time stamp file to %lld bytes" +msgstr "não foi possível truncar o arquivo de marca de tempo para %lld bytes" + +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:488 plugins/sudoers/visudo.c:494 +msgid "unable to read the clock" +msgstr "não foi possível ler do relógio" -#: plugins/sudoers/timestamp.c:498 +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "ignorado marca de tempo no futuro" -#: plugins/sudoers/timestamp.c:510 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "marca de tempo muito a frente no futuro: %20.20s" -#: plugins/sudoers/timestamp.c:613 plugins/sudoers/timestamp.c:634 +#: plugins/sudoers/timestamp.c:863 +#, c-format +msgid "unable to lock time stamp file %s" +msgstr "não foi possível travar o arquivo de marca de tempo %s" + +#: plugins/sudoers/timestamp.c:906 plugins/sudoers/timestamp.c:926 #, c-format msgid "lecture status path too long: %s/%s" msgstr "caminho de status de instruções muito longo: %s/%s" -#: plugins/sudoers/visudo.c:192 +#: plugins/sudoers/visudo.c:182 #, c-format msgid "%s grammar version %d\n" msgstr "gramática de %s versão %d\n" -#: plugins/sudoers/visudo.c:263 plugins/sudoers/visudo.c:552 +#: plugins/sudoers/visudo.c:254 plugins/sudoers/visudo.c:619 #, c-format msgid "press return to edit %s: " msgstr "pressione enter para editar %s: " -#: plugins/sudoers/visudo.c:349 plugins/sudoers/visudo.c:355 +#: plugins/sudoers/visudo.c:320 +#, c-format +msgid "specified editor (%s) doesn't exist" +msgstr "editor especificado (%s) não existe" + +#: plugins/sudoers/visudo.c:338 +#, c-format +msgid "no editor found (editor path = %s)" +msgstr "nenhum editor encontrado (caminho do editor = %s)" + +#: plugins/sudoers/visudo.c:447 plugins/sudoers/visudo.c:455 msgid "write error" msgstr "erro de escrita" -#: plugins/sudoers/visudo.c:439 +#: plugins/sudoers/visudo.c:501 #, 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:444 +#: plugins/sudoers/visudo.c:508 #, 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:450 +#: plugins/sudoers/visudo.c:514 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "editor (%s) falhou, %s sem alteração" -#: plugins/sudoers/visudo.c:472 +#: plugins/sudoers/visudo.c:536 #, c-format msgid "%s unchanged" msgstr "%s sem alteração" -#: plugins/sudoers/visudo.c:497 +#: plugins/sudoers/visudo.c:562 #, 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:507 +#: plugins/sudoers/visudo.c:573 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "não foi possível analisar arquivo temporário (%s), erro desconhecido" -#: plugins/sudoers/visudo.c:543 +#: plugins/sudoers/visudo.c:610 #, 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:601 plugins/sudoers/visudo.c:610 +#: plugins/sudoers/visudo.c:669 plugins/sudoers/visudo.c:678 #, 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:605 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:673 plugins/sudoers/visudo.c:683 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "não foi possível alterar modo de %s para 0%o" -#: plugins/sudoers/visudo.c:632 +#: plugins/sudoers/visudo.c:700 #, 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:646 +#: plugins/sudoers/visudo.c:714 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "comando \"%s %s %s\" falhou, %s sem alteração" -#: plugins/sudoers/visudo.c:656 +#: plugins/sudoers/visudo.c:724 #, c-format msgid "error renaming %s, %s unchanged" msgstr "erro ao renomear %s, %s sem alteração" -#: plugins/sudoers/visudo.c:718 +#: plugins/sudoers/visudo.c:786 msgid "What now? " msgstr "Agora o que? " -#: plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:800 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1647,87 +1830,72 @@ " 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:780 +#: plugins/sudoers/visudo.c:848 #, c-format msgid "unable to run %s" msgstr "não foi possível executar %s" -#: plugins/sudoers/visudo.c:806 +#: plugins/sudoers/visudo.c:878 #, 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:813 +#: plugins/sudoers/visudo.c:885 #, 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:838 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:910 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "failed to parse %s file, unknown error" msgstr "falha em analisar o arquivo %s, erro desconhecido" -#: plugins/sudoers/visudo.c:854 plugins/sudoers/visudo_json.c:1054 +#: plugins/sudoers/visudo.c:926 plugins/sudoers/visudo_json.c:1041 #, c-format msgid "parse error in %s near line %d\n" msgstr "erro de análise em %s perto da linha %d\n" -#: plugins/sudoers/visudo.c:857 plugins/sudoers/visudo_json.c:1057 +#: plugins/sudoers/visudo.c:929 plugins/sudoers/visudo_json.c:1044 #, c-format msgid "parse error in %s\n" msgstr "erro de análise em \"%s\"\n" -#: plugins/sudoers/visudo.c:865 plugins/sudoers/visudo.c:872 +#: plugins/sudoers/visudo.c:937 plugins/sudoers/visudo.c:944 #, c-format msgid "%s: parsed OK\n" msgstr "%s: análise OK\n" -#: plugins/sudoers/visudo.c:918 +#: plugins/sudoers/visudo.c:991 #, c-format msgid "%s busy, try again later" msgstr "%s ocupado, tente novamente" -#: plugins/sudoers/visudo.c:962 -#, c-format -msgid "specified editor (%s) doesn't exist" -msgstr "editor especificado (%s) não existe" - -#: plugins/sudoers/visudo.c:985 -#, c-format -msgid "unable to stat editor (%s)" -msgstr "não foi possível obter estado do editor (%s)" - -#: plugins/sudoers/visudo.c:1033 -#, c-format -msgid "no editor found (editor path = %s)" -msgstr "nenhum editor encontrado (caminho do editor = %s)" - -#: plugins/sudoers/visudo.c:1136 +#: plugins/sudoers/visudo.c:1087 #, c-format msgid "Error: cycle in %s `%s'" msgstr "Erro: ciclo em %s \"%s\"" -#: plugins/sudoers/visudo.c:1137 +#: plugins/sudoers/visudo.c:1088 #, c-format msgid "Warning: cycle in %s `%s'" msgstr "Aviso: ciclo em %s \"%s\"" -#: plugins/sudoers/visudo.c:1141 +#: plugins/sudoers/visudo.c:1092 #, c-format msgid "Error: %s `%s' referenced but not defined" msgstr "Erro: %s \"%s\" referenciado, mas não definido" -#: plugins/sudoers/visudo.c:1142 +#: plugins/sudoers/visudo.c:1093 #, c-format msgid "Warning: %s `%s' referenced but not defined" msgstr "Aviso: %s \"%s\" referenciado, mas não definido" -#: plugins/sudoers/visudo.c:1281 +#: plugins/sudoers/visudo.c:1236 #, c-format msgid "Warning: unused %s `%s'" msgstr "Aviso: %s não usado \"%s\"" -#: plugins/sudoers/visudo.c:1394 +#: plugins/sudoers/visudo.c:1349 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -1736,7 +1904,7 @@ "%s - edita o arquivo sudoers com segurança\n" "\n" -#: plugins/sudoers/visudo.c:1396 +#: plugins/sudoers/visudo.c:1351 msgid "" "\n" "Options:\n" @@ -1758,15 +1926,32 @@ " -V, --version exibe a informação da versão e sai\n" " -x, --export=arq_saída exporta o sudoers no formato JSON para arq_saída" -#: plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo_json.c:1018 #, c-format msgid "%s: input and output files must be different" msgstr "%s: arquivos de entrada e saída devem ser diferentes" -#: toke.l:915 +#: toke.l:918 msgid "too many levels of includes" msgstr "níveis de inclusões demais" +#~ msgid "timestamp path too long: %s/%s" +#~ msgstr "caminho de marca de tempo muito longo: %s/%s" + +#~ msgid "unable to stat editor (%s)" +#~ msgstr "não foi possível obter estado do editor (%s)" + +# Mantive, pois hostbuf é uma variável do plugins/sudoers/ldap.c +#~ msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" +#~ msgstr "sudo_ldap_conf_add_ports: sem espaço para expansão de hostbuf" + +# Mantive, pois hostbuf é uma variável do plugins/sudoers/ldap.c +#~ msgid "sudo_ldap_parse_uri: out of space building hostbuf" +#~ msgstr "sudo_ldap_parse_uri: sem espaço na construção de hostbuf" + +#~ msgid "sudo_ldap_build_pass1 allocation mismatch" +#~ msgstr "alocação de sudo_ldap_build_pass1 não confere" + #~ msgid "Password:" #~ msgstr "Senha:" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/plugins/sudoers/po/ru.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/plugins/sudoers/po/ru.mo differ diff -Nru sudo-1.8.12/plugins/sudoers/po/ru.po sudo-1.8.16/plugins/sudoers/po/ru.po --- sudo-1.8.12/plugins/sudoers/po/ru.po 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/po/ru.po 2015-10-31 23:35:24.000000000 +0000 @@ -6,18 +6,18 @@ # Pavel Maryanov , 2015. msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.12b3\n" +"Project-Id-Version: sudoers 1.8.14b2\n" "Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-11-20 13:33-0700\n" -"PO-Revision-Date: 2015-02-07 15:54+0200\n" +"POT-Creation-Date: 2015-07-03 07:09-0600\n" +"PO-Revision-Date: 2015-09-10 19:15+0300\n" "Last-Translator: Pavel Maryanov \n" -"Language-Team: Russian \n" +"Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Poedit 1.6.5\n" +"X-Generator: Poedit 1.8.4\n" #: confstr.sh:1 msgid "syntax error" @@ -43,46 +43,164 @@ msgid "Sorry, try again." msgstr "Попробуйте ещё раз." -#: gram.y:379 +#: gram.y:181 gram.y:199 gram.y:205 gram.y:211 gram.y:217 gram.y:223 +#: gram.y:239 gram.y:246 gram.y:253 gram.y:260 gram.y:267 gram.y:283 +#: gram.y:306 gram.y:313 gram.y:320 gram.y:327 gram.y:334 gram.y:387 +#: gram.y:395 gram.y:405 gram.y:435 gram.y:442 gram.y:449 gram.y:456 +#: gram.y:568 gram.y:575 gram.y:584 gram.y:593 gram.y:610 gram.y:661 +#: gram.y:668 gram.y:675 gram.y:683 gram.y:775 gram.y:782 gram.y:789 +#: gram.y:796 gram.y:803 gram.y:829 gram.y:836 gram.y:843 gram.y:1110 +#: gram.y:1117 plugins/sudoers/alias.c:123 plugins/sudoers/alias.c:136 +#: plugins/sudoers/auth/bsdauth.c:141 plugins/sudoers/auth/kerb5.c:119 +#: plugins/sudoers/auth/kerb5.c:145 plugins/sudoers/auth/pam.c:371 +#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/auth/sia.c:110 +#: plugins/sudoers/defaults.c:516 plugins/sudoers/defaults.c:720 +#: plugins/sudoers/defaults.c:880 plugins/sudoers/editor.c:64 +#: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:92 +#: plugins/sudoers/env.c:233 plugins/sudoers/group_plugin.c:131 +#: plugins/sudoers/iolog.c:582 plugins/sudoers/iolog.c:614 +#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:446 +#: plugins/sudoers/ldap.c:477 plugins/sudoers/ldap.c:529 +#: plugins/sudoers/ldap.c:562 plugins/sudoers/ldap.c:914 +#: plugins/sudoers/ldap.c:1060 plugins/sudoers/ldap.c:1339 +#: plugins/sudoers/ldap.c:1512 plugins/sudoers/ldap.c:1588 +#: plugins/sudoers/ldap.c:1724 plugins/sudoers/ldap.c:1748 +#: plugins/sudoers/ldap.c:1778 plugins/sudoers/ldap.c:1831 +#: plugins/sudoers/ldap.c:1846 plugins/sudoers/ldap.c:1942 +#: plugins/sudoers/ldap.c:1975 plugins/sudoers/ldap.c:2128 +#: plugins/sudoers/ldap.c:2225 plugins/sudoers/ldap.c:3028 +#: plugins/sudoers/ldap.c:3061 plugins/sudoers/ldap.c:3375 +#: plugins/sudoers/ldap.c:3403 plugins/sudoers/ldap.c:3414 +#: plugins/sudoers/ldap.c:3504 plugins/sudoers/ldap.c:3520 +#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 +#: plugins/sudoers/logging.c:662 plugins/sudoers/logging.c:916 +#: plugins/sudoers/match.c:501 plugins/sudoers/match.c:537 +#: plugins/sudoers/match.c:695 plugins/sudoers/match.c:752 +#: plugins/sudoers/parse.c:235 plugins/sudoers/parse.c:247 +#: plugins/sudoers/parse.c:262 plugins/sudoers/parse.c:274 +#: plugins/sudoers/policy.c:384 plugins/sudoers/policy.c:575 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/sssd.c:160 +#: plugins/sudoers/sssd.c:192 plugins/sudoers/sssd.c:198 +#: plugins/sudoers/sssd.c:236 plugins/sudoers/sssd.c:243 +#: plugins/sudoers/sssd.c:279 plugins/sudoers/sssd.c:324 +#: plugins/sudoers/sssd.c:916 plugins/sudoers/sssd.c:1049 +#: plugins/sudoers/sudoers.c:159 plugins/sudoers/sudoers.c:294 +#: plugins/sudoers/sudoers.c:304 plugins/sudoers/sudoers.c:312 +#: plugins/sudoers/sudoers.c:365 plugins/sudoers/sudoers.c:663 +#: plugins/sudoers/sudoers.c:749 plugins/sudoers/sudoers.c:793 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:471 +#: plugins/sudoers/sudoreplay.c:667 plugins/sudoers/sudoreplay.c:779 +#: plugins/sudoers/sudoreplay.c:819 plugins/sudoers/sudoreplay.c:828 +#: plugins/sudoers/sudoreplay.c:838 plugins/sudoers/sudoreplay.c:846 +#: plugins/sudoers/sudoreplay.c:850 plugins/sudoers/sudoreplay.c:1006 +#: plugins/sudoers/sudoreplay.c:1010 plugins/sudoers/testsudoers.c:130 +#: plugins/sudoers/testsudoers.c:187 plugins/sudoers/testsudoers.c:214 +#: plugins/sudoers/testsudoers.c:231 plugins/sudoers/visudo.c:155 +#: plugins/sudoers/visudo.c:215 plugins/sudoers/visudo.c:299 +#: plugins/sudoers/visudo.c:305 plugins/sudoers/visudo.c:435 +#: plugins/sudoers/visudo.c:971 plugins/sudoers/visudo.c:1015 +#: plugins/sudoers/visudo.c:1111 +msgid "unable to allocate memory" +msgstr "не удаётся выделить память" + +#: gram.y:467 msgid "a digest requires a path name" -msgstr "" +msgstr "для дайджеста нужно указать полный путь" + +#: gram.y:1110 gram.y:1117 plugins/sudoers/auth/pam.c:371 +#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/defaults.c:516 +#: plugins/sudoers/defaults.c:720 plugins/sudoers/defaults.c:880 +#: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 +#: plugins/sudoers/editor.c:92 plugins/sudoers/env.c:233 +#: plugins/sudoers/group_plugin.c:131 plugins/sudoers/iolog.c:582 +#: plugins/sudoers/iolog.c:614 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:446 plugins/sudoers/ldap.c:477 +#: plugins/sudoers/ldap.c:529 plugins/sudoers/ldap.c:562 +#: plugins/sudoers/ldap.c:914 plugins/sudoers/ldap.c:1060 +#: plugins/sudoers/ldap.c:1339 plugins/sudoers/ldap.c:1512 +#: plugins/sudoers/ldap.c:1588 plugins/sudoers/ldap.c:1724 +#: plugins/sudoers/ldap.c:1748 plugins/sudoers/ldap.c:1778 +#: plugins/sudoers/ldap.c:1831 plugins/sudoers/ldap.c:1846 +#: plugins/sudoers/ldap.c:1942 plugins/sudoers/ldap.c:1975 +#: plugins/sudoers/ldap.c:2128 plugins/sudoers/ldap.c:2225 +#: plugins/sudoers/ldap.c:3028 plugins/sudoers/ldap.c:3061 +#: plugins/sudoers/ldap.c:3375 plugins/sudoers/ldap.c:3403 +#: plugins/sudoers/ldap.c:3414 plugins/sudoers/ldap.c:3504 +#: plugins/sudoers/ldap.c:3520 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:916 +#: plugins/sudoers/match.c:501 plugins/sudoers/match.c:537 +#: plugins/sudoers/match.c:695 plugins/sudoers/match.c:752 +#: plugins/sudoers/parse.c:235 plugins/sudoers/parse.c:247 +#: plugins/sudoers/parse.c:262 plugins/sudoers/parse.c:274 +#: plugins/sudoers/policy.c:97 plugins/sudoers/policy.c:106 +#: plugins/sudoers/policy.c:115 plugins/sudoers/policy.c:139 +#: plugins/sudoers/policy.c:250 plugins/sudoers/policy.c:271 +#: plugins/sudoers/policy.c:280 plugins/sudoers/policy.c:319 +#: plugins/sudoers/policy.c:329 plugins/sudoers/policy.c:338 +#: plugins/sudoers/policy.c:384 plugins/sudoers/policy.c:575 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/set_perms.c:356 +#: plugins/sudoers/set_perms.c:695 plugins/sudoers/set_perms.c:1054 +#: plugins/sudoers/set_perms.c:1350 plugins/sudoers/set_perms.c:1514 +#: plugins/sudoers/sssd.c:160 plugins/sudoers/sssd.c:192 +#: plugins/sudoers/sssd.c:198 plugins/sudoers/sssd.c:236 +#: plugins/sudoers/sssd.c:243 plugins/sudoers/sssd.c:279 +#: plugins/sudoers/sssd.c:324 plugins/sudoers/sssd.c:916 +#: plugins/sudoers/sssd.c:1049 plugins/sudoers/sudoers.c:159 +#: plugins/sudoers/sudoers.c:294 plugins/sudoers/sudoers.c:304 +#: plugins/sudoers/sudoers.c:312 plugins/sudoers/sudoers.c:365 +#: plugins/sudoers/sudoers.c:663 plugins/sudoers/sudoers.c:749 +#: plugins/sudoers/sudoers.c:793 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sudoreplay.c:471 plugins/sudoers/sudoreplay.c:667 +#: plugins/sudoers/sudoreplay.c:779 plugins/sudoers/sudoreplay.c:819 +#: plugins/sudoers/sudoreplay.c:828 plugins/sudoers/sudoreplay.c:838 +#: plugins/sudoers/sudoreplay.c:846 plugins/sudoers/sudoreplay.c:850 +#: plugins/sudoers/sudoreplay.c:1006 plugins/sudoers/sudoreplay.c:1010 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:187 +#: plugins/sudoers/testsudoers.c:214 plugins/sudoers/testsudoers.c:231 +#: plugins/sudoers/visudo.c:155 plugins/sudoers/visudo.c:215 +#: plugins/sudoers/visudo.c:299 plugins/sudoers/visudo.c:305 +#: plugins/sudoers/visudo.c:435 plugins/sudoers/visudo.c:971 +#: plugins/sudoers/visudo.c:1015 plugins/sudoers/visudo.c:1111 +#, c-format +msgid "%s: %s" +msgstr "%s: %s" -#: plugins/sudoers/alias.c:136 +#: plugins/sudoers/alias.c:132 #, c-format msgid "Alias `%s' already defined" msgstr "Псевдоним «%s» уже определён" -#: plugins/sudoers/auth/bsdauth.c:75 +#: plugins/sudoers/auth/bsdauth.c:68 #, c-format msgid "unable to get login class for user %s" msgstr "не удаётся получить класс логина для пользователя %s" -#: plugins/sudoers/auth/bsdauth.c:80 +#: plugins/sudoers/auth/bsdauth.c:73 msgid "unable to begin bsd authentication" msgstr "не удаётся начать BSD-аутентификацию" -#: plugins/sudoers/auth/bsdauth.c:88 +#: plugins/sudoers/auth/bsdauth.c:81 msgid "invalid authentication type" msgstr "некорректный тип аутентификации" -#: plugins/sudoers/auth/bsdauth.c:97 +#: plugins/sudoers/auth/bsdauth.c:90 msgid "unable to initialize BSD authentication" msgstr "не удаётся запустить BSD-аутентификацию" -#: plugins/sudoers/auth/fwtk.c:59 +#: plugins/sudoers/auth/fwtk.c:52 msgid "unable to read fwtk config" msgstr "не удаётся прочитать конфигурацию ftwk" -#: plugins/sudoers/auth/fwtk.c:64 +#: plugins/sudoers/auth/fwtk.c:57 msgid "unable to connect to authentication server" msgstr "не удаётся связаться с сервером аутентификации" -#: plugins/sudoers/auth/fwtk.c:70 plugins/sudoers/auth/fwtk.c:94 -#: plugins/sudoers/auth/fwtk.c:127 +#: plugins/sudoers/auth/fwtk.c:63 plugins/sudoers/auth/fwtk.c:87 +#: plugins/sudoers/auth/fwtk.c:120 msgid "lost connection to authentication server" msgstr "потеряно соединение с сервером аутентификации" -#: plugins/sudoers/auth/fwtk.c:74 +#: plugins/sudoers/auth/fwtk.c:67 #, c-format msgid "" "authentication server error:\n" @@ -91,155 +209,155 @@ "ошибка сервера аутентификации:\n" "%s" -#: plugins/sudoers/auth/kerb5.c:116 +#: plugins/sudoers/auth/kerb5.c:111 #, c-format msgid "%s: unable to convert principal to string ('%s'): %s" msgstr "%s: не удаётся преобразовать принципал в строку ('%s'): %s" -#: plugins/sudoers/auth/kerb5.c:158 +#: plugins/sudoers/auth/kerb5.c:161 #, c-format msgid "%s: unable to parse '%s': %s" msgstr "%s: не удаётся прочитать '%s': %s" -#: plugins/sudoers/auth/kerb5.c:167 +#: plugins/sudoers/auth/kerb5.c:170 #, c-format msgid "%s: unable to resolve credential cache: %s" msgstr "%s: не удаётся разрешить кэш учётных данных: %s" -#: plugins/sudoers/auth/kerb5.c:214 +#: plugins/sudoers/auth/kerb5.c:217 #, c-format msgid "%s: unable to allocate options: %s" msgstr "%s: не удаётся выделить параметры: %s" -#: plugins/sudoers/auth/kerb5.c:229 +#: plugins/sudoers/auth/kerb5.c:232 #, c-format msgid "%s: unable to get credentials: %s" msgstr "%s: не удаётся получить учётные данные: %s" -#: plugins/sudoers/auth/kerb5.c:242 +#: plugins/sudoers/auth/kerb5.c:245 #, c-format msgid "%s: unable to initialize credential cache: %s" msgstr "%s: не удаётся инициализировать кэш учётных данных: %s" -#: plugins/sudoers/auth/kerb5.c:245 +#: plugins/sudoers/auth/kerb5.c:248 #, c-format msgid "%s: unable to store credential in cache: %s" msgstr "%s: не удаётся сохранить учётные данные в кэше: %s" -#: plugins/sudoers/auth/kerb5.c:309 +#: plugins/sudoers/auth/kerb5.c:312 #, c-format msgid "%s: unable to get host principal: %s" msgstr "%s: не удаётся получить принципал хоста: %s" -#: plugins/sudoers/auth/kerb5.c:323 +#: plugins/sudoers/auth/kerb5.c:326 #, c-format msgid "%s: Cannot verify TGT! Possible attack!: %s" msgstr "%s: Не удаётся проверить TGT. Нас атакуют?!: %s" -#: plugins/sudoers/auth/pam.c:98 +#: plugins/sudoers/auth/pam.c:90 msgid "unable to initialize PAM" msgstr "не удаётся инициализировать PAM" -#: plugins/sudoers/auth/pam.c:149 +#: plugins/sudoers/auth/pam.c:146 msgid "account validation failure, is your account locked?" msgstr "ошибка проверки учётной записи. Она заблокирована?" -#: plugins/sudoers/auth/pam.c:153 +#: plugins/sudoers/auth/pam.c:150 msgid "Account or password is expired, reset your password and try again" msgstr "Учётные данные устарели. Сбросьте пароль и попробуйте ещё раз" -#: plugins/sudoers/auth/pam.c:161 +#: plugins/sudoers/auth/pam.c:158 #, c-format msgid "unable to change expired password: %s" msgstr "не удаётся сменить устаревший пароль: %s" -#: plugins/sudoers/auth/pam.c:166 +#: plugins/sudoers/auth/pam.c:163 msgid "Password expired, contact your system administrator" msgstr "Пароль устарел. Обратитесь к системному администратору" -#: plugins/sudoers/auth/pam.c:170 +#: plugins/sudoers/auth/pam.c:167 msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator" msgstr "Срок действия учётной записи истёк или в настройках PAM нет раздела «account» для sudo. Обратитесь к системному администратору" -#: plugins/sudoers/auth/pam.c:187 +#: plugins/sudoers/auth/pam.c:179 #, c-format msgid "PAM authentication error: %s" -msgstr "" +msgstr "Ошибка PAM-аутентификации: %s" -#: plugins/sudoers/auth/rfc1938.c:103 plugins/sudoers/visudo.c:228 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:220 #, c-format msgid "you do not exist in the %s database" -msgstr "" +msgstr "Вы не существуете в базе данных %s" -#: plugins/sudoers/auth/securid5.c:80 +#: plugins/sudoers/auth/securid5.c:73 msgid "failed to initialise the ACE API library" -msgstr "" +msgstr "не удалось инициализировать библиотеку API для ACE" -#: plugins/sudoers/auth/securid5.c:106 +#: plugins/sudoers/auth/securid5.c:99 msgid "unable to contact the SecurID server" -msgstr "" +msgstr "не удалось связаться с сервером SecurID" -#: plugins/sudoers/auth/securid5.c:115 +#: plugins/sudoers/auth/securid5.c:108 msgid "User ID locked for SecurID Authentication" -msgstr "" +msgstr "ID пользователя заблокирован для аутентификации SecurID" -#: plugins/sudoers/auth/securid5.c:119 plugins/sudoers/auth/securid5.c:170 +#: plugins/sudoers/auth/securid5.c:112 plugins/sudoers/auth/securid5.c:163 msgid "invalid username length for SecurID" -msgstr "" +msgstr "недопустимая длина имени пользователя для SecurID" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:175 +#: plugins/sudoers/auth/securid5.c:116 plugins/sudoers/auth/securid5.c:168 msgid "invalid Authentication Handle for SecurID" -msgstr "" +msgstr "недопустимый обработчик аутентификации для SecurID" -#: plugins/sudoers/auth/securid5.c:127 +#: plugins/sudoers/auth/securid5.c:120 msgid "SecurID communication failed" -msgstr "" +msgstr "ошибка связи с SecurID" -#: plugins/sudoers/auth/securid5.c:131 plugins/sudoers/auth/securid5.c:214 +#: plugins/sudoers/auth/securid5.c:124 plugins/sudoers/auth/securid5.c:207 msgid "unknown SecurID error" -msgstr "" +msgstr "неизвестная ошибка SecurID" -#: plugins/sudoers/auth/securid5.c:165 +#: plugins/sudoers/auth/securid5.c:158 msgid "invalid passcode length for SecurID" -msgstr "" +msgstr "недопустимая длина пароля для SecurID" -#: plugins/sudoers/auth/sia.c:123 +#: plugins/sudoers/auth/sia.c:120 msgid "unable to initialize SIA session" -msgstr "" +msgstr "не удаётся инициализировать сеанс SIA" -#: plugins/sudoers/auth/sudo_auth.c:115 +#: plugins/sudoers/auth/sudo_auth.c:126 msgid "invalid authentication methods" -msgstr "" +msgstr "недопустимые методы аутентификации" -#: plugins/sudoers/auth/sudo_auth.c:117 +#: plugins/sudoers/auth/sudo_auth.c:128 msgid "Invalid authentication methods compiled into sudo! You may not mix standalone and non-standalone authentication." -msgstr "" +msgstr "sudo скомпилирован с неверными методами аутентификации! Нельзя смешивать зависимую и независимую аутентификацию." -#: plugins/sudoers/auth/sudo_auth.c:203 plugins/sudoers/auth/sudo_auth.c:252 +#: plugins/sudoers/auth/sudo_auth.c:224 plugins/sudoers/auth/sudo_auth.c:273 msgid "no authentication methods" -msgstr "" +msgstr "методы аутентификации отсутствуют" -#: plugins/sudoers/auth/sudo_auth.c:205 +#: plugins/sudoers/auth/sudo_auth.c:226 msgid "There are no authentication methods compiled into sudo! If you want to turn off authentication, use the --disable-authentication configure option." -msgstr "" +msgstr "sudo скомпилирован без методов аутентификации! Если нужно отключить аутентификацию, используйте параметр --disable-authentication." -#: plugins/sudoers/auth/sudo_auth.c:254 +#: plugins/sudoers/auth/sudo_auth.c:275 msgid "Unable to initialize authentication methods." -msgstr "" +msgstr "Не удаётся инициализировать методы аутентификации." -#: plugins/sudoers/auth/sudo_auth.c:412 +#: plugins/sudoers/auth/sudo_auth.c:433 msgid "Authentication methods:" -msgstr "" +msgstr "Методы аутентификации:" -#: plugins/sudoers/bsm_audit.c:95 plugins/sudoers/bsm_audit.c:184 +#: plugins/sudoers/bsm_audit.c:111 plugins/sudoers/bsm_audit.c:200 msgid "Could not determine audit condition" -msgstr "" +msgstr "Не удалось определить состояние аудита" -#: plugins/sudoers/bsm_audit.c:156 plugins/sudoers/bsm_audit.c:244 +#: plugins/sudoers/bsm_audit.c:172 plugins/sudoers/bsm_audit.c:260 msgid "unable to commit audit record" -msgstr "" +msgstr "не удаётся отправить запись аудита" -#: plugins/sudoers/check.c:197 +#: plugins/sudoers/check.c:200 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -250,19 +368,27 @@ " #3) With great power comes great responsibility.\n" "\n" msgstr "" +"\n" +"Мы полагаем, что ваш системный администратор изложил вам основы\n" +"безопасности. Как правило, всё сводится к трём следующим правилам:\n" +"\n" +" №1) Уважайте частную жизнь других.\n" +" №2) Думайте, прежде что-то вводить.\n" +" №3) С большой властью приходит большая ответственность.\n" +"\n" -#: plugins/sudoers/check.c:240 plugins/sudoers/check.c:250 -#: plugins/sudoers/sudoers.c:599 plugins/sudoers/sudoers.c:628 +#: plugins/sudoers/check.c:243 plugins/sudoers/check.c:253 +#: plugins/sudoers/sudoers.c:699 plugins/sudoers/sudoers.c:728 #, c-format msgid "unknown uid: %u" -msgstr "" +msgstr "неизвестный uid: %u" -#: plugins/sudoers/check.c:245 plugins/sudoers/policy.c:683 -#: plugins/sudoers/sudoers.c:955 plugins/sudoers/testsudoers.c:212 -#: plugins/sudoers/testsudoers.c:364 +#: plugins/sudoers/check.c:248 plugins/sudoers/policy.c:747 +#: plugins/sudoers/sudoers.c:1095 plugins/sudoers/testsudoers.c:205 +#: plugins/sudoers/testsudoers.c:360 #, c-format msgid "unknown user: %s" -msgstr "" +msgstr "неизвестный пользователь: %s" #: plugins/sudoers/def_data.c:27 #, c-format @@ -285,1174 +411,1203 @@ #: plugins/sudoers/def_data.c:43 msgid "Ignore '.' in $PATH" -msgstr "" +msgstr "Игнорировать '.' в переменной $PATH" #: plugins/sudoers/def_data.c:47 msgid "Always send mail when sudo is run" -msgstr "" +msgstr "Отправлять письмо при каждом запуске sudo" #: plugins/sudoers/def_data.c:51 msgid "Send mail if user authentication fails" -msgstr "" +msgstr "Отправлять письмо при ошибке аутентификации" #: plugins/sudoers/def_data.c:55 msgid "Send mail if the user is not in sudoers" -msgstr "" +msgstr "Отправлять письмо, если пользователя нет в группе sudoers" #: plugins/sudoers/def_data.c:59 msgid "Send mail if the user is not in sudoers for this host" -msgstr "" +msgstr "Отправлять письмо, если пользователя нет в группе sudoers для данного компьютера" #: plugins/sudoers/def_data.c:63 msgid "Send mail if the user is not allowed to run a command" -msgstr "" +msgstr "Отправлять письмо, если пользователю не разрешено выполнять команду" #: plugins/sudoers/def_data.c:67 +msgid "Send mail if the user tries to run a command" +msgstr "Отправлять письмо, если пользователь пытается выполнить команду" + +#: plugins/sudoers/def_data.c:71 msgid "Use a separate timestamp for each user/tty combo" msgstr "" -#: plugins/sudoers/def_data.c:71 +#: plugins/sudoers/def_data.c:75 msgid "Lecture user the first time they run sudo" msgstr "" -#: plugins/sudoers/def_data.c:75 +#: plugins/sudoers/def_data.c:79 #, c-format msgid "File containing the sudo lecture: %s" msgstr "" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:83 msgid "Require users to authenticate by default" msgstr "" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:87 msgid "Root may run sudo" msgstr "" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:91 msgid "Log the hostname in the (non-syslog) log file" msgstr "" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:95 msgid "Log the year in the (non-syslog) log file" msgstr "" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:99 msgid "If sudo is invoked with no arguments, start a shell" msgstr "" -#: plugins/sudoers/def_data.c:99 +#: plugins/sudoers/def_data.c:103 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "" -#: plugins/sudoers/def_data.c:103 +#: plugins/sudoers/def_data.c:107 msgid "Always set $HOME to the target user's home directory" msgstr "" -#: plugins/sudoers/def_data.c:107 +#: plugins/sudoers/def_data.c:111 msgid "Allow some information gathering to give useful error messages" msgstr "" -#: plugins/sudoers/def_data.c:111 +#: plugins/sudoers/def_data.c:115 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:119 msgid "Insult the user when they enter an incorrect password" msgstr "" -#: plugins/sudoers/def_data.c:119 +#: plugins/sudoers/def_data.c:123 msgid "Only allow the user to run sudo if they have a tty" msgstr "" -#: plugins/sudoers/def_data.c:123 +#: plugins/sudoers/def_data.c:127 msgid "Visudo will honor the EDITOR environment variable" msgstr "" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:131 msgid "Prompt for root's password, not the users's" msgstr "" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:135 msgid "Prompt for the runas_default user's password, not the users's" msgstr "" -#: plugins/sudoers/def_data.c:135 +#: plugins/sudoers/def_data.c:139 msgid "Prompt for the target user's password, not the users's" msgstr "" -#: plugins/sudoers/def_data.c:139 +#: plugins/sudoers/def_data.c:143 msgid "Apply defaults in the target user's login class if there is one" msgstr "" -#: plugins/sudoers/def_data.c:143 +#: plugins/sudoers/def_data.c:147 msgid "Set the LOGNAME and USER environment variables" msgstr "" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:151 msgid "Only set the effective uid to the target user, not the real uid" msgstr "" -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:155 msgid "Don't initialize the group vector to that of the target user" msgstr "" -#: plugins/sudoers/def_data.c:155 +#: plugins/sudoers/def_data.c:159 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "" -#: plugins/sudoers/def_data.c:159 +#: plugins/sudoers/def_data.c:163 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:167 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:171 #, c-format msgid "Number of tries to enter a password: %u" msgstr "" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:175 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "" -#: plugins/sudoers/def_data.c:175 +#: plugins/sudoers/def_data.c:179 #, c-format msgid "Path to log file: %s" msgstr "" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:183 #, c-format msgid "Path to mail program: %s" msgstr "" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:187 #, c-format msgid "Flags for mail program: %s" msgstr "" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:191 #, c-format msgid "Address to send mail to: %s" msgstr "" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:195 #, c-format msgid "Address to send mail from: %s" msgstr "" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:199 #, c-format msgid "Subject line for mail messages: %s" msgstr "" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:203 #, c-format msgid "Incorrect password message: %s" msgstr "" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:207 #, c-format msgid "Path to lecture status dir: %s" msgstr "" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:211 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:215 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:219 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:223 #, c-format msgid "Default password prompt: %s" msgstr "" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:227 msgid "If set, passprompt will override system prompt in all cases." msgstr "" -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:231 #, c-format msgid "Default user to run commands as: %s" msgstr "" -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:235 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:239 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:243 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:247 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:251 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:255 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:259 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:263 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:267 msgid "Allow users to set arbitrary environment variables" msgstr "" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:271 msgid "Reset the environment to a default set of variables" msgstr "" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to check for sanity:" msgstr "" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to remove:" msgstr "" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:283 msgid "Environment variables to preserve:" msgstr "" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:287 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:291 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:295 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:299 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:303 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:307 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:311 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:315 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:319 msgid "Log user's input for the command being run" msgstr "" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:323 msgid "Log the output of the command being run" msgstr "" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:327 msgid "Compress I/O logs using zlib" msgstr "" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:331 msgid "Always run commands in a pseudo-tty" msgstr "" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:335 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:339 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:343 #, c-format msgid "File in which to store the input/output log: %s" msgstr "" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:347 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:351 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:355 msgid "Set of permitted privileges" msgstr "" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:359 msgid "Set of limit privileges" msgstr "" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:363 msgid "Run commands on a pty in the background" msgstr "" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:367 msgid "PAM service name to use" msgstr "" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:371 msgid "PAM service name to use for login shells" msgstr "" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:375 msgid "Attempt to establish PAM credentials for the target user" msgstr "" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:379 msgid "Create a new PAM session for the command to run in" msgstr "" -#: plugins/sudoers/def_data.c:379 +#: plugins/sudoers/def_data.c:383 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:387 msgid "Enable sudoers netgroup support" msgstr "" -#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:601 -#: plugins/sudoers/visudo_json.c:642 plugins/sudoers/visudo_json.c:677 +#: plugins/sudoers/defaults.c:199 plugins/sudoers/defaults.c:608 +#: plugins/sudoers/visudo_json.c:633 plugins/sudoers/visudo_json.c:668 #, c-format msgid "unknown defaults entry `%s'" msgstr "" -#: plugins/sudoers/defaults.c:218 plugins/sudoers/defaults.c:228 -#: plugins/sudoers/defaults.c:248 plugins/sudoers/defaults.c:261 -#: plugins/sudoers/defaults.c:274 plugins/sudoers/defaults.c:287 -#: plugins/sudoers/defaults.c:300 plugins/sudoers/defaults.c:320 -#: plugins/sudoers/defaults.c:330 +#: plugins/sudoers/defaults.c:207 plugins/sudoers/defaults.c:217 +#: plugins/sudoers/defaults.c:241 plugins/sudoers/defaults.c:256 +#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 +#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 +#: plugins/sudoers/defaults.c:325 #, c-format msgid "value `%s' is invalid for option `%s'" msgstr "" -#: plugins/sudoers/defaults.c:221 plugins/sudoers/defaults.c:231 -#: plugins/sudoers/defaults.c:239 plugins/sudoers/defaults.c:256 -#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 -#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 -#: plugins/sudoers/defaults.c:326 +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:220 +#: plugins/sudoers/defaults.c:228 plugins/sudoers/defaults.c:251 +#: plugins/sudoers/defaults.c:264 plugins/sudoers/defaults.c:277 +#: plugins/sudoers/defaults.c:290 plugins/sudoers/defaults.c:310 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "no value specified for `%s'" msgstr "" -#: plugins/sudoers/defaults.c:244 +#: plugins/sudoers/defaults.c:233 #, c-format msgid "values for `%s' must start with a '/'" msgstr "" -#: plugins/sudoers/defaults.c:306 +#: plugins/sudoers/defaults.c:301 #, c-format msgid "option `%s' does not take a value" msgstr "" -#: plugins/sudoers/env.c:276 plugins/sudoers/env.c:283 -#: plugins/sudoers/env.c:386 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:918 plugins/sudoers/policy.c:461 -#: plugins/sudoers/policy.c:470 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:708 plugins/sudoers/testsudoers.c:242 -#: plugins/sudoers/toke_util.c:174 +#: plugins/sudoers/env.c:295 plugins/sudoers/env.c:302 +#: plugins/sudoers/env.c:404 plugins/sudoers/ldap.c:450 +#: plugins/sudoers/ldap.c:540 plugins/sudoers/ldap.c:1143 +#: plugins/sudoers/ldap.c:1345 plugins/sudoers/ldap.c:1517 +#: plugins/sudoers/ldap.c:1673 plugins/sudoers/linux_audit.c:82 +#: plugins/sudoers/logging.c:921 plugins/sudoers/policy.c:494 +#: plugins/sudoers/policy.c:503 plugins/sudoers/prompt.c:161 +#: plugins/sudoers/sudoers.c:815 plugins/sudoers/testsudoers.c:235 +#: plugins/sudoers/toke_util.c:160 #, c-format msgid "internal error, %s overflow" msgstr "" -#: plugins/sudoers/env.c:359 +#: plugins/sudoers/env.c:376 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "" -#: plugins/sudoers/env.c:1054 +#: plugins/sudoers/env.c:1047 +msgid "unable to rebuild the environment" +msgstr "не удаётся перестроить среду" + +#: plugins/sudoers/env.c:1121 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "" -#: plugins/sudoers/group_plugin.c:94 +#: plugins/sudoers/group_plugin.c:85 #, c-format msgid "%s must be owned by uid %d" msgstr "" -#: plugins/sudoers/group_plugin.c:98 +#: plugins/sudoers/group_plugin.c:89 #, c-format msgid "%s must only be writable by owner" msgstr "" -#: plugins/sudoers/group_plugin.c:105 plugins/sudoers/sssd.c:251 +#: plugins/sudoers/group_plugin.c:96 plugins/sudoers/sssd.c:331 #, c-format msgid "unable to load %s: %s" msgstr "" -#: plugins/sudoers/group_plugin.c:110 +#: plugins/sudoers/group_plugin.c:101 #, c-format msgid "unable to find symbol \"group_plugin\" in %s" msgstr "" -#: plugins/sudoers/group_plugin.c:115 +#: plugins/sudoers/group_plugin.c:106 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "" -#: plugins/sudoers/interfaces.c:116 +#: plugins/sudoers/interfaces.c:110 msgid "Local IP address and netmask pairs:\n" msgstr "" -#: plugins/sudoers/iolog.c:101 plugins/sudoers/iolog.c:119 -#: plugins/sudoers/timestamp.c:233 +#: plugins/sudoers/iolog.c:92 plugins/sudoers/iolog.c:110 +#: plugins/sudoers/timestamp.c:218 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "" -#: plugins/sudoers/iolog.c:112 plugins/sudoers/iolog.c:133 -#: plugins/sudoers/iolog.c:140 plugins/sudoers/timestamp.c:227 -#: plugins/sudoers/timestamp.c:248 +#: plugins/sudoers/iolog.c:103 plugins/sudoers/iolog.c:124 +#: plugins/sudoers/iolog.c:131 plugins/sudoers/timestamp.c:212 +#: plugins/sudoers/timestamp.c:233 #, c-format msgid "unable to mkdir %s" msgstr "" -#: plugins/sudoers/iolog.c:209 plugins/sudoers/sudoers.c:764 -#: plugins/sudoers/sudoreplay.c:348 plugins/sudoers/sudoreplay.c:819 -#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/timestamp.c:357 -#: plugins/sudoers/visudo.c:832 plugins/sudoers/visudo_json.c:1025 -#: plugins/sudoers/visudo_json.c:1038 +#: plugins/sudoers/iolog.c:200 plugins/sudoers/sudoers.c:871 +#: plugins/sudoers/sudoreplay.c:302 plugins/sudoers/sudoreplay.c:768 +#: plugins/sudoers/sudoreplay.c:972 plugins/sudoers/timestamp.c:370 +#: plugins/sudoers/visudo.c:895 plugins/sudoers/visudo_json.c:1026 +#: plugins/sudoers/visudo_json.c:1039 #, c-format msgid "unable to open %s" msgstr "" -#: plugins/sudoers/iolog.c:250 plugins/sudoers/sudoers.c:768 -#: plugins/sudoers/sudoreplay.c:1123 +#: plugins/sudoers/iolog.c:241 plugins/sudoers/sudoers.c:875 +#: plugins/sudoers/sudoreplay.c:1083 #, c-format msgid "unable to read %s" msgstr "" -#: plugins/sudoers/iolog.c:282 plugins/sudoers/sudoreplay.c:588 -#: plugins/sudoers/timestamp.c:186 plugins/sudoers/timestamp.c:189 +#: plugins/sudoers/iolog.c:273 plugins/sudoers/sudoreplay.c:549 +#: plugins/sudoers/timestamp.c:171 plugins/sudoers/timestamp.c:174 #, c-format msgid "unable to write to %s" msgstr "" -#: plugins/sudoers/iolog.c:347 plugins/sudoers/iolog.c:545 +#: plugins/sudoers/iolog.c:338 plugins/sudoers/iolog.c:536 #, c-format msgid "unable to create %s" msgstr "" -#: plugins/sudoers/ldap.c:406 +#: plugins/sudoers/ldap.c:428 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "" -#: plugins/sudoers/ldap.c:431 -msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" -msgstr "" - -#: plugins/sudoers/ldap.c:464 +#: plugins/sudoers/ldap.c:488 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "" -#: plugins/sudoers/ldap.c:495 +#: plugins/sudoers/ldap.c:515 msgid "unable to mix ldap and ldaps URIs" msgstr "" -#: plugins/sudoers/ldap.c:499 plugins/sudoers/ldap.c:532 +#: plugins/sudoers/ldap.c:519 plugins/sudoers/ldap.c:555 msgid "starttls not supported when using ldaps" msgstr "" -#: plugins/sudoers/ldap.c:517 -msgid "sudo_ldap_parse_uri: out of space building hostbuf" -msgstr "" - -#: plugins/sudoers/ldap.c:599 +#: plugins/sudoers/ldap.c:626 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "" -#: plugins/sudoers/ldap.c:602 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "" -#: plugins/sudoers/ldap.c:1093 +#: plugins/sudoers/ldap.c:1129 msgid "unable to get GMT time" msgstr "" -#: plugins/sudoers/ldap.c:1099 +#: plugins/sudoers/ldap.c:1135 msgid "unable to format timestamp" msgstr "" -#: plugins/sudoers/ldap.c:1107 -msgid "unable to build time filter" -msgstr "" - -#: plugins/sudoers/ldap.c:1326 -msgid "sudo_ldap_build_pass1 allocation mismatch" -msgstr "" - -#: plugins/sudoers/ldap.c:1469 +#: plugins/sudoers/ldap.c:1821 #, c-format msgid "%s: %s: %s: %s" msgstr "" -#: plugins/sudoers/ldap.c:1963 +#: plugins/sudoers/ldap.c:2360 #, c-format msgid "" "\n" "LDAP Role: %s\n" msgstr "" +"\n" +"Роль LDAP: %s\n" -#: plugins/sudoers/ldap.c:1965 +#: plugins/sudoers/ldap.c:2362 #, c-format msgid "" "\n" "LDAP Role: UNKNOWN\n" msgstr "" +"\n" +"Роль LDAP: НЕИЗВЕСТНО\n" -#: plugins/sudoers/ldap.c:2012 +#: plugins/sudoers/ldap.c:2409 #, c-format msgid " Order: %s\n" -msgstr "" +msgstr " Порядок: %s\n" -#: plugins/sudoers/ldap.c:2020 plugins/sudoers/parse.c:512 -#: plugins/sudoers/sssd.c:1297 +#: plugins/sudoers/ldap.c:2417 plugins/sudoers/parse.c:573 +#: plugins/sudoers/sssd.c:1408 #, c-format msgid " Commands:\n" -msgstr "" +msgstr " Команды:\n" -#: plugins/sudoers/ldap.c:2570 +#: plugins/sudoers/ldap.c:2980 #, c-format msgid "unable to initialize LDAP: %s" -msgstr "" +msgstr "не удаётся инициализировать LDAP: %s" -#: plugins/sudoers/ldap.c:2612 +#: plugins/sudoers/ldap.c:3016 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" -msgstr "" +msgstr "указано start_tls, но библиотеки LDAP не поддерживают ldap_start_tls_s() или ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:2845 +#: plugins/sudoers/ldap.c:3273 #, c-format msgid "invalid sudoOrder attribute: %s" -msgstr "" +msgstr "недопустимый атрибут sudoOrder: %s" -#: plugins/sudoers/linux_audit.c:57 +#: plugins/sudoers/linux_audit.c:52 msgid "unable to open audit system" -msgstr "" +msgstr "не удаётся открыть систему аудита" -#: plugins/sudoers/linux_audit.c:94 +#: plugins/sudoers/linux_audit.c:93 msgid "unable to send audit message" -msgstr "" +msgstr "не удаётся отправить сообщение аудита" -#: plugins/sudoers/logging.c:134 +#: plugins/sudoers/logging.c:106 #, c-format msgid "%8s : %s" -msgstr "" +msgstr "%8s : %s" -#: plugins/sudoers/logging.c:162 +#: plugins/sudoers/logging.c:134 #, c-format msgid "%8s : (command continued) %s" -msgstr "" +msgstr "%8s : (выполнение команды продолжено) %s" -#: plugins/sudoers/logging.c:187 +#: plugins/sudoers/logging.c:159 #, c-format msgid "unable to open log file: %s: %s" -msgstr "" +msgstr "не удаётся открыть файл журнала: %s: %s" -#: plugins/sudoers/logging.c:190 +#: plugins/sudoers/logging.c:162 #, c-format msgid "unable to lock log file: %s: %s" -msgstr "" +msgstr "не удаётся заблокировать файл журнала: %s: %s" -#: plugins/sudoers/logging.c:242 +#: plugins/sudoers/logging.c:211 msgid "No user or host" msgstr "" -#: plugins/sudoers/logging.c:244 +#: plugins/sudoers/logging.c:213 msgid "validation failure" msgstr "" -#: plugins/sudoers/logging.c:251 +#: plugins/sudoers/logging.c:220 msgid "user NOT in sudoers" msgstr "" -#: plugins/sudoers/logging.c:253 +#: plugins/sudoers/logging.c:222 msgid "user NOT authorized on host" msgstr "" -#: plugins/sudoers/logging.c:255 +#: plugins/sudoers/logging.c:224 msgid "command not allowed" msgstr "" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:259 #, 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:262 #, 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:266 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:269 #, 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:407 -#: plugins/sudoers/sudoers.c:409 plugins/sudoers/sudoers.c:411 -#: plugins/sudoers/sudoers.c:413 plugins/sudoers/sudoers.c:1128 -#: plugins/sudoers/sudoers.c:1129 +#: plugins/sudoers/logging.c:306 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1220 +#: plugins/sudoers/sudoers.c:1222 #, c-format msgid "%s: command not found" msgstr "" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:403 +#: plugins/sudoers/logging.c:308 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring `%s' found in '.'\n" "Use `sudo ./%s' if this is the `%s' you wish to run." msgstr "" -#: plugins/sudoers/logging.c:353 +#: plugins/sudoers/logging.c:325 msgid "authentication failure" msgstr "" -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:351 msgid "a password is required" msgstr "" -#: plugins/sudoers/logging.c:446 plugins/sudoers/logging.c:501 +#: plugins/sudoers/logging.c:422 plugins/sudoers/logging.c:484 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "" msgstr[1] "" +msgstr[2] "" -#: plugins/sudoers/logging.c:584 +#: plugins/sudoers/logging.c:572 msgid "unable to fork" msgstr "" -#: plugins/sudoers/logging.c:592 plugins/sudoers/logging.c:648 +#: plugins/sudoers/logging.c:580 plugins/sudoers/logging.c:636 #, c-format msgid "unable to fork: %m" msgstr "" -#: plugins/sudoers/logging.c:638 +#: plugins/sudoers/logging.c:626 #, c-format msgid "unable to open pipe: %m" msgstr "" -#: plugins/sudoers/logging.c:663 +#: plugins/sudoers/logging.c:651 #, c-format msgid "unable to dup stdin: %m" msgstr "" -#: plugins/sudoers/logging.c:698 +#: plugins/sudoers/logging.c:689 #, c-format msgid "unable to execute %s: %m" msgstr "" -#: plugins/sudoers/match.c:627 +#: plugins/sudoers/match.c:606 #, c-format msgid "unsupported digest type %d for %s" msgstr "" -#: plugins/sudoers/match.c:656 +#: plugins/sudoers/match.c:635 #, c-format msgid "%s: read error" msgstr "" -#: plugins/sudoers/match.c:670 +#: plugins/sudoers/match.c:649 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "" -#: plugins/sudoers/parse.c:123 +#: plugins/sudoers/parse.c:114 #, c-format msgid "parse error in %s near line %d" msgstr "" -#: plugins/sudoers/parse.c:126 +#: plugins/sudoers/parse.c:117 #, c-format msgid "parse error in %s" msgstr "" -#: plugins/sudoers/parse.c:459 +#: plugins/sudoers/parse.c:520 #, c-format msgid "" "\n" "Sudoers entry:\n" msgstr "" -#: plugins/sudoers/parse.c:460 +#: plugins/sudoers/parse.c:521 #, c-format msgid " RunAsUsers: " msgstr "" -#: plugins/sudoers/parse.c:474 +#: plugins/sudoers/parse.c:535 #, c-format msgid " RunAsGroups: " msgstr "" -#: plugins/sudoers/parse.c:483 +#: plugins/sudoers/parse.c:544 #, c-format msgid " Options: " msgstr "" -#: plugins/sudoers/policy.c:109 plugins/sudoers/policy.c:118 -#: plugins/sudoers/policy.c:127 plugins/sudoers/policy.c:151 -#: plugins/sudoers/policy.c:263 plugins/sudoers/policy.c:283 -#: plugins/sudoers/policy.c:292 plugins/sudoers/policy.c:322 -#: plugins/sudoers/policy.c:332 plugins/sudoers/policy.c:341 -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 -#, c-format -msgid "%s: %s" +#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:252 +msgid "unable to parse network address list" msgstr "" -#: plugins/sudoers/policy.c:569 plugins/sudoers/visudo.c:773 +#: plugins/sudoers/policy.c:632 plugins/sudoers/visudo.c:836 #, c-format msgid "unable to execute %s" msgstr "" -#: plugins/sudoers/policy.c:701 +#: plugins/sudoers/policy.c:765 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "" -#: plugins/sudoers/policy.c:703 +#: plugins/sudoers/policy.c:767 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "" -#: plugins/sudoers/policy.c:707 +#: plugins/sudoers/policy.c:771 #, c-format msgid "" "\n" "Sudoers path: %s\n" msgstr "" -#: plugins/sudoers/policy.c:710 +#: plugins/sudoers/policy.c:774 #, c-format msgid "nsswitch path: %s\n" msgstr "" -#: plugins/sudoers/policy.c:712 +#: plugins/sudoers/policy.c:776 #, c-format msgid "ldap.conf path: %s\n" msgstr "" -#: plugins/sudoers/policy.c:713 +#: plugins/sudoers/policy.c:777 #, c-format msgid "ldap.secret path: %s\n" msgstr "" -#: plugins/sudoers/pwutil.c:149 +#: plugins/sudoers/policy.c:810 +#, c-format +msgid "unable to register hook of type %d (version %d.%d)" +msgstr "" + +#: plugins/sudoers/pwutil.c:136 plugins/sudoers/pwutil.c:153 +#, c-format +msgid "unable to cache uid %u, out of memory" +msgstr "" + +#: plugins/sudoers/pwutil.c:147 #, c-format msgid "unable to cache uid %u, already exists" msgstr "" -#: plugins/sudoers/pwutil.c:194 +#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:207 +#: plugins/sudoers/pwutil.c:250 plugins/sudoers/pwutil.c:294 +#, c-format +msgid "unable to cache user %s, out of memory" +msgstr "" + +#: plugins/sudoers/pwutil.c:202 #, c-format msgid "unable to cache user %s, already exists" msgstr "" -#: plugins/sudoers/pwutil.c:400 +#: plugins/sudoers/pwutil.c:427 plugins/sudoers/pwutil.c:444 +#, c-format +msgid "unable to cache gid %u, out of memory" +msgstr "" + +#: plugins/sudoers/pwutil.c:438 #, c-format msgid "unable to cache gid %u, already exists" msgstr "" -#: plugins/sudoers/pwutil.c:439 +#: plugins/sudoers/pwutil.c:476 plugins/sudoers/pwutil.c:492 +#: plugins/sudoers/pwutil.c:524 plugins/sudoers/pwutil.c:565 +#, c-format +msgid "unable to cache group %s, out of memory" +msgstr "" + +#: plugins/sudoers/pwutil.c:487 #, c-format msgid "unable to cache group %s, already exists" msgstr "" -#: plugins/sudoers/pwutil.c:605 plugins/sudoers/pwutil.c:631 +#: plugins/sudoers/pwutil.c:676 plugins/sudoers/pwutil.c:710 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "" -#: plugins/sudoers/pwutil.c:627 +#: plugins/sudoers/pwutil.c:682 plugins/sudoers/pwutil.c:715 +#, c-format +msgid "unable to cache group list for %s, out of memory" +msgstr "" + +#: plugins/sudoers/pwutil.c:705 #, c-format msgid "unable to parse groups for %s" msgstr "" -#: plugins/sudoers/set_perms.c:122 plugins/sudoers/set_perms.c:447 -#: plugins/sudoers/set_perms.c:850 plugins/sudoers/set_perms.c:1147 -#: plugins/sudoers/set_perms.c:1439 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 +#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 +#: plugins/sudoers/set_perms.c:1430 msgid "perm stack overflow" msgstr "" -#: plugins/sudoers/set_perms.c:130 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:1076 -#: plugins/sudoers/set_perms.c:1155 plugins/sudoers/set_perms.c:1372 -#: plugins/sudoers/set_perms.c:1447 plugins/sudoers/set_perms.c:1536 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 +#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 +#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 +#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 +#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 msgid "perm stack underflow" msgstr "" -#: plugins/sudoers/set_perms.c:189 plugins/sudoers/set_perms.c:502 -#: plugins/sudoers/set_perms.c:1206 plugins/sudoers/set_perms.c:1479 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:493 +#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 msgid "unable to change to root gid" msgstr "" -#: plugins/sudoers/set_perms.c:278 plugins/sudoers/set_perms.c:599 -#: plugins/sudoers/set_perms.c:987 plugins/sudoers/set_perms.c:1283 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:590 +#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 msgid "unable to change to runas gid" msgstr "" -#: plugins/sudoers/set_perms.c:283 plugins/sudoers/set_perms.c:604 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:595 +#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 msgid "unable to set runas group vector" msgstr "" -#: plugins/sudoers/set_perms.c:294 plugins/sudoers/set_perms.c:615 -#: plugins/sudoers/set_perms.c:1001 plugins/sudoers/set_perms.c:1297 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:606 +#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 msgid "unable to change to runas uid" msgstr "" -#: plugins/sudoers/set_perms.c:312 plugins/sudoers/set_perms.c:633 -#: plugins/sudoers/set_perms.c:1017 plugins/sudoers/set_perms.c:1313 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:624 +#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 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:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 msgid "too many processes" msgstr "" -#: plugins/sudoers/solaris_audit.c:47 +#: plugins/sudoers/solaris_audit.c:51 msgid "unable to get current working directory" msgstr "" -#: plugins/sudoers/solaris_audit.c:55 +#: plugins/sudoers/solaris_audit.c:59 #, c-format msgid "truncated audit path user_cmnd: %s" msgstr "" -#: plugins/sudoers/solaris_audit.c:62 +#: plugins/sudoers/solaris_audit.c:66 #, c-format msgid "truncated audit path argv[0]: %s" msgstr "" -#: plugins/sudoers/solaris_audit.c:111 +#: plugins/sudoers/solaris_audit.c:115 msgid "audit_failure message too long" msgstr "" -#: plugins/sudoers/sssd.c:252 +#: plugins/sudoers/sssd.c:332 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "" -#: plugins/sudoers/sssd.c:259 plugins/sudoers/sssd.c:267 -#: plugins/sudoers/sssd.c:275 plugins/sudoers/sssd.c:283 -#: plugins/sudoers/sssd.c:291 +#: plugins/sudoers/sssd.c:340 plugins/sudoers/sssd.c:349 +#: plugins/sudoers/sssd.c:358 plugins/sudoers/sssd.c:367 +#: plugins/sudoers/sssd.c:376 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "" -#: plugins/sudoers/sudo_nss.c:296 +#: plugins/sudoers/sudo_nss.c:290 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "" -#: plugins/sudoers/sudo_nss.c:309 +#: plugins/sudoers/sudo_nss.c:308 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "" -#: plugins/sudoers/sudo_nss.c:322 +#: plugins/sudoers/sudo_nss.c:326 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "" -#: plugins/sudoers/sudo_nss.c:331 +#: plugins/sudoers/sudo_nss.c:339 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "" -#: plugins/sudoers/sudoers.c:160 plugins/sudoers/sudoers.c:201 -#: plugins/sudoers/sudoers.c:726 +#: plugins/sudoers/sudoers.c:172 plugins/sudoers/testsudoers.c:244 +#: plugins/sudoers/visudo.c:225 plugins/sudoers/visudo.c:562 +msgid "unable to initialize sudoers default values" +msgstr "не удаётся инициализировать значения по умолчанию для sudoers" + +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:239 +#: plugins/sudoers/sudoers.c:833 msgid "problem with defaults entries" msgstr "" -#: plugins/sudoers/sudoers.c:167 +#: plugins/sudoers/sudoers.c:205 msgid "no valid sudoers sources found, quitting" msgstr "" -#: plugins/sudoers/sudoers.c:233 +#: plugins/sudoers/sudoers.c:275 msgid "sudoers specifies that root is not allowed to sudo" msgstr "" -#: plugins/sudoers/sudoers.c:278 +#: plugins/sudoers/sudoers.c:332 msgid "you are not permitted to use the -C option" msgstr "" -#: plugins/sudoers/sudoers.c:336 +#: plugins/sudoers/sudoers.c:396 #, c-format msgid "timestamp owner (%s): No such user" msgstr "" -#: plugins/sudoers/sudoers.c:350 +#: plugins/sudoers/sudoers.c:410 msgid "no tty" msgstr "" -#: plugins/sudoers/sudoers.c:351 +#: plugins/sudoers/sudoers.c:411 msgid "sorry, you must have a tty to run sudo" msgstr "" -#: plugins/sudoers/sudoers.c:402 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "" -#: plugins/sudoers/sudoers.c:422 +#: plugins/sudoers/sudoers.c:486 msgid "sorry, you are not allowed to preserve the environment" msgstr "" -#: plugins/sudoers/sudoers.c:674 +#: plugins/sudoers/sudoers.c:778 msgid "command too long" msgstr "" -#: plugins/sudoers/sudoers.c:779 plugins/sudoers/visudo.c:333 -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/sudoers.c:886 plugins/sudoers/visudo.c:428 +#: plugins/sudoers/visudo.c:662 #, c-format msgid "unable to stat %s" msgstr "" -#: plugins/sudoers/sudoers.c:783 +#: plugins/sudoers/sudoers.c:890 #, c-format msgid "%s is not a regular file" msgstr "" -#: plugins/sudoers/sudoers.c:787 plugins/sudoers/timestamp.c:289 toke.l:945 +#: plugins/sudoers/sudoers.c:894 plugins/sudoers/timestamp.c:274 toke.l:933 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "" -#: plugins/sudoers/sudoers.c:791 toke.l:952 +#: plugins/sudoers/sudoers.c:898 toke.l:940 #, c-format msgid "%s is world writable" msgstr "" -#: plugins/sudoers/sudoers.c:795 toke.l:957 +#: plugins/sudoers/sudoers.c:902 toke.l:945 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "" -#: plugins/sudoers/sudoers.c:826 +#: plugins/sudoers/sudoers.c:933 #, c-format msgid "only root can use `-c %s'" msgstr "" -#: plugins/sudoers/sudoers.c:845 +#: plugins/sudoers/sudoers.c:952 #, c-format msgid "unknown login class: %s" msgstr "" -#: plugins/sudoers/sudoers.c:889 plugins/sudoers/sudoers.c:904 +#: plugins/sudoers/sudoers.c:1031 plugins/sudoers/sudoers.c:1059 #, c-format msgid "unable to resolve host %s" msgstr "" -#: plugins/sudoers/sudoers.c:986 plugins/sudoers/testsudoers.c:388 +#: plugins/sudoers/sudoers.c:1126 plugins/sudoers/testsudoers.c:384 #, c-format msgid "unknown group: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:280 +#: plugins/sudoers/sudoreplay.c:234 #, c-format msgid "invalid filter option: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:293 +#: plugins/sudoers/sudoreplay.c:247 #, c-format msgid "invalid max wait: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:299 +#: plugins/sudoers/sudoreplay.c:253 #, c-format msgid "invalid speed factor: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:302 plugins/sudoers/visudo.c:190 +#: plugins/sudoers/sudoreplay.c:256 plugins/sudoers/visudo.c:182 #, c-format msgid "%s version %s\n" msgstr "" -#: plugins/sudoers/sudoreplay.c:334 +#: plugins/sudoers/sudoreplay.c:288 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:340 +#: plugins/sudoers/sudoreplay.c:294 #, c-format msgid "%s/%s/timing: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:356 +#: plugins/sudoers/sudoreplay.c:310 #, c-format msgid "Replaying sudo session: %s\n" msgstr "" -#: plugins/sudoers/sudoreplay.c:362 +#: plugins/sudoers/sudoreplay.c:316 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "" -#: plugins/sudoers/sudoreplay.c:363 +#: plugins/sudoers/sudoreplay.c:317 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "" -#: plugins/sudoers/sudoreplay.c:418 +#: plugins/sudoers/sudoreplay.c:369 msgid "unable to set tty to raw mode" msgstr "" -#: plugins/sudoers/sudoreplay.c:449 +#: plugins/sudoers/sudoreplay.c:400 #, c-format msgid "invalid timing file line: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:655 plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:610 plugins/sudoers/sudoreplay.c:635 #, c-format msgid "ambiguous expression \"%s\"" msgstr "" -#: plugins/sudoers/sudoreplay.c:702 +#: plugins/sudoers/sudoreplay.c:657 msgid "unmatched ')' in expression" msgstr "" -#: plugins/sudoers/sudoreplay.c:706 +#: plugins/sudoers/sudoreplay.c:661 #, c-format msgid "unknown search term \"%s\"" msgstr "" -#: plugins/sudoers/sudoreplay.c:720 +#: plugins/sudoers/sudoreplay.c:676 #, c-format msgid "%s requires an argument" msgstr "" -#: plugins/sudoers/sudoreplay.c:724 plugins/sudoers/sudoreplay.c:1096 +#: plugins/sudoers/sudoreplay.c:679 plugins/sudoers/sudoreplay.c:1059 #, c-format msgid "invalid regular expression: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:730 +#: plugins/sudoers/sudoreplay.c:683 #, c-format msgid "could not parse date \"%s\"" msgstr "" -#: plugins/sudoers/sudoreplay.c:739 +#: plugins/sudoers/sudoreplay.c:692 msgid "unmatched '(' in expression" msgstr "" -#: plugins/sudoers/sudoreplay.c:741 +#: plugins/sudoers/sudoreplay.c:694 msgid "illegal trailing \"or\"" msgstr "" -#: plugins/sudoers/sudoreplay.c:743 +#: plugins/sudoers/sudoreplay.c:696 msgid "illegal trailing \"!\"" msgstr "" -#: plugins/sudoers/sudoreplay.c:796 +#: plugins/sudoers/sudoreplay.c:745 #, c-format msgid "unknown search type %d" msgstr "" -#: plugins/sudoers/sudoreplay.c:833 +#: plugins/sudoers/sudoreplay.c:783 #, c-format msgid "%s: invalid log file" msgstr "" -#: plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:801 #, c-format msgid "%s: time stamp field is missing" msgstr "" -#: plugins/sudoers/sudoreplay.c:858 +#: plugins/sudoers/sudoreplay.c:808 #, c-format msgid "%s: time stamp %s: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:865 +#: plugins/sudoers/sudoreplay.c:815 #, c-format msgid "%s: user field is missing" msgstr "" -#: plugins/sudoers/sudoreplay.c:873 +#: plugins/sudoers/sudoreplay.c:824 #, c-format msgid "%s: runas user field is missing" msgstr "" -#: plugins/sudoers/sudoreplay.c:881 +#: plugins/sudoers/sudoreplay.c:833 #, c-format msgid "%s: runas group field is missing" msgstr "" -#: plugins/sudoers/sudoreplay.c:1236 +#: plugins/sudoers/sudoreplay.c:1196 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "" -#: plugins/sudoers/sudoreplay.c:1239 +#: plugins/sudoers/sudoreplay.c:1199 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "" -#: plugins/sudoers/sudoreplay.c:1248 +#: plugins/sudoers/sudoreplay.c:1208 #, c-format msgid "" "%s - replay sudo session logs\n" "\n" msgstr "" -#: plugins/sudoers/sudoreplay.c:1250 +#: plugins/sudoers/sudoreplay.c:1210 msgid "" "\n" "Options:\n" @@ -1465,136 +1620,151 @@ " -V, --version display version information and exit" msgstr "" -#: plugins/sudoers/testsudoers.c:327 +#: plugins/sudoers/testsudoers.c:323 msgid "\thost unmatched" msgstr "" -#: plugins/sudoers/testsudoers.c:330 +#: plugins/sudoers/testsudoers.c:326 msgid "" "\n" "Command allowed" msgstr "" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:327 msgid "" "\n" "Command denied" msgstr "" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:327 msgid "" "\n" "Command unmatched" msgstr "" -#: plugins/sudoers/timestamp.c:197 +#: plugins/sudoers/timestamp.c:182 #, c-format msgid "unable to truncate time stamp file to %lld bytes" msgstr "" -#: plugins/sudoers/timestamp.c:297 +#: plugins/sudoers/timestamp.c:282 #, c-format msgid "%s is group writable" msgstr "" -#: plugins/sudoers/timestamp.c:318 +#: plugins/sudoers/timestamp.c:303 #, c-format msgid "timestamp path too long: %s/%s" msgstr "" -#: plugins/sudoers/timestamp.c:498 +#: plugins/sudoers/timestamp.c:362 plugins/sudoers/timestamp.c:446 +#: plugins/sudoers/visudo.c:483 plugins/sudoers/visudo.c:489 +msgid "unable to read the clock" +msgstr "не удаётся прочитать часы" + +#: plugins/sudoers/timestamp.c:516 msgid "ignoring time stamp from the future" msgstr "" -#: plugins/sudoers/timestamp.c:510 +#: plugins/sudoers/timestamp.c:528 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "" -#: plugins/sudoers/timestamp.c:613 plugins/sudoers/timestamp.c:634 +#: plugins/sudoers/timestamp.c:638 plugins/sudoers/timestamp.c:658 #, c-format msgid "lecture status path too long: %s/%s" msgstr "" -#: plugins/sudoers/visudo.c:192 +#: plugins/sudoers/visudo.c:184 #, c-format msgid "%s grammar version %d\n" msgstr "" -#: plugins/sudoers/visudo.c:263 plugins/sudoers/visudo.c:552 +#: plugins/sudoers/visudo.c:256 plugins/sudoers/visudo.c:614 #, c-format msgid "press return to edit %s: " msgstr "" -#: plugins/sudoers/visudo.c:349 plugins/sudoers/visudo.c:355 +#: plugins/sudoers/visudo.c:321 +#, c-format +msgid "specified editor (%s) doesn't exist" +msgstr "" + +#: plugins/sudoers/visudo.c:337 +#, c-format +msgid "no editor found (editor path = %s)" +msgstr "" + +#: plugins/sudoers/visudo.c:445 plugins/sudoers/visudo.c:451 msgid "write error" msgstr "" -#: plugins/sudoers/visudo.c:439 +#: plugins/sudoers/visudo.c:496 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:444 +#: plugins/sudoers/visudo.c:503 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:450 +#: plugins/sudoers/visudo.c:509 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:472 +#: plugins/sudoers/visudo.c:531 #, c-format msgid "%s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:497 +#: plugins/sudoers/visudo.c:557 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "" -#: plugins/sudoers/visudo.c:507 +#: plugins/sudoers/visudo.c:568 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "" -#: plugins/sudoers/visudo.c:543 +#: plugins/sudoers/visudo.c:605 #, c-format msgid "internal error, unable to find %s in list!" msgstr "" -#: plugins/sudoers/visudo.c:601 plugins/sudoers/visudo.c:610 +#: plugins/sudoers/visudo.c:664 plugins/sudoers/visudo.c:673 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "" -#: plugins/sudoers/visudo.c:605 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:668 plugins/sudoers/visudo.c:678 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "" -#: plugins/sudoers/visudo.c:632 +#: plugins/sudoers/visudo.c:695 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "" -#: plugins/sudoers/visudo.c:646 +#: plugins/sudoers/visudo.c:709 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:656 +#: plugins/sudoers/visudo.c:719 #, c-format msgid "error renaming %s, %s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:718 +#: plugins/sudoers/visudo.c:781 msgid "What now? " msgstr "" -#: plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:795 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1602,94 +1772,79 @@ " (Q)uit and save changes to sudoers file (DANGER!)\n" msgstr "" -#: plugins/sudoers/visudo.c:780 +#: plugins/sudoers/visudo.c:843 #, c-format msgid "unable to run %s" msgstr "" -#: plugins/sudoers/visudo.c:806 +#: plugins/sudoers/visudo.c:869 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "" -#: plugins/sudoers/visudo.c:813 +#: plugins/sudoers/visudo.c:876 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "" -#: plugins/sudoers/visudo.c:838 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:901 plugins/sudoers/visudo_json.c:1046 #, c-format msgid "failed to parse %s file, unknown error" msgstr "" -#: plugins/sudoers/visudo.c:854 plugins/sudoers/visudo_json.c:1054 +#: plugins/sudoers/visudo.c:917 plugins/sudoers/visudo_json.c:1055 #, c-format msgid "parse error in %s near line %d\n" msgstr "" -#: plugins/sudoers/visudo.c:857 plugins/sudoers/visudo_json.c:1057 +#: plugins/sudoers/visudo.c:920 plugins/sudoers/visudo_json.c:1058 #, c-format msgid "parse error in %s\n" msgstr "" -#: plugins/sudoers/visudo.c:865 plugins/sudoers/visudo.c:872 +#: plugins/sudoers/visudo.c:928 plugins/sudoers/visudo.c:935 #, c-format msgid "%s: parsed OK\n" msgstr "" -#: plugins/sudoers/visudo.c:918 +#: plugins/sudoers/visudo.c:982 #, c-format msgid "%s busy, try again later" msgstr "" -#: plugins/sudoers/visudo.c:962 -#, c-format -msgid "specified editor (%s) doesn't exist" -msgstr "" - -#: plugins/sudoers/visudo.c:985 -#, c-format -msgid "unable to stat editor (%s)" -msgstr "" - -#: plugins/sudoers/visudo.c:1033 -#, c-format -msgid "no editor found (editor path = %s)" -msgstr "" - -#: plugins/sudoers/visudo.c:1136 +#: plugins/sudoers/visudo.c:1078 #, c-format msgid "Error: cycle in %s `%s'" msgstr "" -#: plugins/sudoers/visudo.c:1137 +#: plugins/sudoers/visudo.c:1079 #, c-format msgid "Warning: cycle in %s `%s'" msgstr "" -#: plugins/sudoers/visudo.c:1141 +#: plugins/sudoers/visudo.c:1083 #, c-format msgid "Error: %s `%s' referenced but not defined" msgstr "" -#: plugins/sudoers/visudo.c:1142 +#: plugins/sudoers/visudo.c:1084 #, c-format msgid "Warning: %s `%s' referenced but not defined" msgstr "" -#: plugins/sudoers/visudo.c:1281 +#: plugins/sudoers/visudo.c:1227 #, c-format msgid "Warning: unused %s `%s'" msgstr "" -#: plugins/sudoers/visudo.c:1394 +#: plugins/sudoers/visudo.c:1340 #, c-format msgid "" "%s - safely edit the sudoers file\n" "\n" msgstr "" -#: plugins/sudoers/visudo.c:1396 +#: plugins/sudoers/visudo.c:1342 msgid "" "\n" "Options:\n" @@ -1702,11 +1857,11 @@ " -x, --export=output_file write sudoers in JSON format to output_file" msgstr "" -#: plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo_json.c:1032 #, c-format msgid "%s: input and output files must be different" msgstr "" -#: toke.l:915 +#: toke.l:904 msgid "too many levels of includes" -msgstr "" +msgstr "слишком много уровней включения" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/plugins/sudoers/po/sk.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/plugins/sudoers/po/sk.mo differ diff -Nru sudo-1.8.12/plugins/sudoers/po/sk.po sudo-1.8.16/plugins/sudoers/po/sk.po --- sudo-1.8.12/plugins/sudoers/po/sk.po 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/po/sk.po 2015-10-31 23:35:24.000000000 +0000 @@ -0,0 +1,1891 @@ +# Portable object template file for the sudoers plugin +# This file is put in the public domain. +# Todd C. Miller , 2011-2015 +# Dušan Kazik , 2015 +# +msgid "" +msgstr "" +"Project-Id-Version: sudoers 1.8.15b1\n" +"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" +"POT-Creation-Date: 2015-09-10 14:28-0600\n" +"PO-Revision-Date: 2015-10-05 13:26+0200\n" +"Last-Translator: Dušan Kazik \n" +"Language-Team: Slovak \n" +"Language: sk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Generator: Poedit 1.8.5\n" +"X-Poedit-Basepath: .\n" +"X-Poedit-SearchPath-0: .\n" + +#: confstr.sh:1 +msgid "syntax error" +msgstr "chyba syntaxe" + +#: confstr.sh:2 +msgid "%p's password: " +msgstr "Heslo používateľa %p: " + +#: confstr.sh:3 +msgid "[sudo] password for %p: " +msgstr "[sudo] heslo pre používateľa %p: " + +#: confstr.sh:4 +msgid "Password: " +msgstr "Heslo: " + +#: confstr.sh:5 +msgid "*** SECURITY information for %h ***" +msgstr "*** BEZPEČNOSTNÉ informácie pre %h ***" + +#: confstr.sh:6 +msgid "Sorry, try again." +msgstr "Prepáčte, skúste to znovu." + +#: gram.y:183 gram.y:201 gram.y:207 gram.y:213 gram.y:219 gram.y:225 +#: gram.y:241 gram.y:248 gram.y:255 gram.y:262 gram.y:269 gram.y:285 +#: gram.y:308 gram.y:315 gram.y:322 gram.y:329 gram.y:336 gram.y:391 +#: gram.y:399 gram.y:409 gram.y:439 gram.y:446 gram.y:453 gram.y:460 +#: gram.y:572 gram.y:579 gram.y:588 gram.y:597 gram.y:614 gram.y:670 +#: gram.y:677 gram.y:684 gram.y:692 gram.y:784 gram.y:791 gram.y:798 +#: gram.y:805 gram.y:812 gram.y:838 gram.y:845 gram.y:852 gram.y:1136 +#: gram.y:1143 plugins/sudoers/alias.c:123 plugins/sudoers/alias.c:136 +#: plugins/sudoers/auth/bsdauth.c:141 plugins/sudoers/auth/kerb5.c:119 +#: plugins/sudoers/auth/kerb5.c:145 plugins/sudoers/auth/pam.c:397 +#: plugins/sudoers/auth/pam.c:445 plugins/sudoers/auth/rfc1938.c:109 +#: plugins/sudoers/auth/sia.c:110 plugins/sudoers/defaults.c:516 +#: plugins/sudoers/defaults.c:720 plugins/sudoers/defaults.c:880 +#: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 +#: plugins/sudoers/editor.c:92 plugins/sudoers/env.c:233 +#: plugins/sudoers/group_plugin.c:133 plugins/sudoers/iolog.c:586 +#: plugins/sudoers/iolog.c:618 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:446 plugins/sudoers/ldap.c:477 +#: plugins/sudoers/ldap.c:529 plugins/sudoers/ldap.c:562 +#: plugins/sudoers/ldap.c:914 plugins/sudoers/ldap.c:1061 +#: plugins/sudoers/ldap.c:1348 plugins/sudoers/ldap.c:1521 +#: plugins/sudoers/ldap.c:1597 plugins/sudoers/ldap.c:1733 +#: plugins/sudoers/ldap.c:1757 plugins/sudoers/ldap.c:1787 +#: plugins/sudoers/ldap.c:1840 plugins/sudoers/ldap.c:1855 +#: plugins/sudoers/ldap.c:1951 plugins/sudoers/ldap.c:1984 +#: plugins/sudoers/ldap.c:2137 plugins/sudoers/ldap.c:2234 +#: plugins/sudoers/ldap.c:3041 plugins/sudoers/ldap.c:3074 +#: plugins/sudoers/ldap.c:3388 plugins/sudoers/ldap.c:3416 +#: plugins/sudoers/ldap.c:3427 plugins/sudoers/ldap.c:3517 +#: plugins/sudoers/ldap.c:3533 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:662 +#: plugins/sudoers/logging.c:916 plugins/sudoers/match.c:501 +#: plugins/sudoers/match.c:537 plugins/sudoers/match.c:699 +#: plugins/sudoers/match.c:756 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:384 +#: plugins/sudoers/policy.c:579 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/sssd.c:160 plugins/sudoers/sssd.c:192 +#: plugins/sudoers/sssd.c:235 plugins/sudoers/sssd.c:242 +#: plugins/sudoers/sssd.c:278 plugins/sudoers/sssd.c:323 +#: plugins/sudoers/sssd.c:917 plugins/sudoers/sssd.c:1050 +#: plugins/sudoers/sudoers.c:159 plugins/sudoers/sudoers.c:294 +#: plugins/sudoers/sudoers.c:304 plugins/sudoers/sudoers.c:312 +#: plugins/sudoers/sudoers.c:365 plugins/sudoers/sudoers.c:663 +#: plugins/sudoers/sudoers.c:749 plugins/sudoers/sudoers.c:793 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:472 +#: plugins/sudoers/sudoreplay.c:668 plugins/sudoers/sudoreplay.c:780 +#: plugins/sudoers/sudoreplay.c:820 plugins/sudoers/sudoreplay.c:829 +#: plugins/sudoers/sudoreplay.c:839 plugins/sudoers/sudoreplay.c:847 +#: plugins/sudoers/sudoreplay.c:851 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1011 plugins/sudoers/testsudoers.c:130 +#: plugins/sudoers/testsudoers.c:188 plugins/sudoers/testsudoers.c:215 +#: plugins/sudoers/testsudoers.c:232 plugins/sudoers/timestamp.c:390 +#: plugins/sudoers/timestamp.c:426 plugins/sudoers/timestamp.c:838 +#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 +#: plugins/sudoers/toke_util.c:147 plugins/sudoers/visudo.c:152 +#: plugins/sudoers/visudo.c:213 plugins/sudoers/visudo.c:297 +#: plugins/sudoers/visudo.c:303 plugins/sudoers/visudo.c:433 +#: plugins/sudoers/visudo.c:974 plugins/sudoers/visudo.c:1018 +#: plugins/sudoers/visudo.c:1114 toke.l:785 toke.l:806 toke.l:816 toke.l:924 +#: toke.l:1082 +msgid "unable to allocate memory" +msgstr "nie je možné alokovať pamäť" + +#: gram.y:471 +msgid "a digest requires a path name" +msgstr "" + +#: gram.y:1136 gram.y:1143 plugins/sudoers/auth/pam.c:397 +#: plugins/sudoers/auth/pam.c:445 plugins/sudoers/auth/rfc1938.c:109 +#: plugins/sudoers/defaults.c:516 plugins/sudoers/defaults.c:720 +#: plugins/sudoers/defaults.c:880 plugins/sudoers/editor.c:64 +#: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:92 +#: plugins/sudoers/env.c:233 plugins/sudoers/group_plugin.c:133 +#: plugins/sudoers/iolog.c:586 plugins/sudoers/iolog.c:618 +#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:446 +#: plugins/sudoers/ldap.c:477 plugins/sudoers/ldap.c:529 +#: plugins/sudoers/ldap.c:562 plugins/sudoers/ldap.c:914 +#: plugins/sudoers/ldap.c:1061 plugins/sudoers/ldap.c:1348 +#: plugins/sudoers/ldap.c:1521 plugins/sudoers/ldap.c:1597 +#: plugins/sudoers/ldap.c:1733 plugins/sudoers/ldap.c:1757 +#: plugins/sudoers/ldap.c:1787 plugins/sudoers/ldap.c:1840 +#: plugins/sudoers/ldap.c:1855 plugins/sudoers/ldap.c:1951 +#: plugins/sudoers/ldap.c:1984 plugins/sudoers/ldap.c:2137 +#: plugins/sudoers/ldap.c:2234 plugins/sudoers/ldap.c:3041 +#: plugins/sudoers/ldap.c:3074 plugins/sudoers/ldap.c:3388 +#: plugins/sudoers/ldap.c:3416 plugins/sudoers/ldap.c:3427 +#: plugins/sudoers/ldap.c:3517 plugins/sudoers/ldap.c:3533 +#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 +#: plugins/sudoers/logging.c:916 plugins/sudoers/match.c:501 +#: plugins/sudoers/match.c:537 plugins/sudoers/match.c:699 +#: plugins/sudoers/match.c:756 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:97 +#: plugins/sudoers/policy.c:106 plugins/sudoers/policy.c:115 +#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:250 +#: plugins/sudoers/policy.c:271 plugins/sudoers/policy.c:280 +#: plugins/sudoers/policy.c:319 plugins/sudoers/policy.c:329 +#: plugins/sudoers/policy.c:338 plugins/sudoers/policy.c:384 +#: plugins/sudoers/policy.c:579 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:160 +#: plugins/sudoers/sssd.c:192 plugins/sudoers/sssd.c:235 +#: plugins/sudoers/sssd.c:242 plugins/sudoers/sssd.c:278 +#: plugins/sudoers/sssd.c:323 plugins/sudoers/sssd.c:917 +#: plugins/sudoers/sssd.c:1050 plugins/sudoers/sudoers.c:159 +#: plugins/sudoers/sudoers.c:294 plugins/sudoers/sudoers.c:304 +#: plugins/sudoers/sudoers.c:312 plugins/sudoers/sudoers.c:365 +#: plugins/sudoers/sudoers.c:663 plugins/sudoers/sudoers.c:749 +#: plugins/sudoers/sudoers.c:793 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sudoreplay.c:472 plugins/sudoers/sudoreplay.c:668 +#: plugins/sudoers/sudoreplay.c:780 plugins/sudoers/sudoreplay.c:820 +#: plugins/sudoers/sudoreplay.c:829 plugins/sudoers/sudoreplay.c:839 +#: plugins/sudoers/sudoreplay.c:847 plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:1007 plugins/sudoers/sudoreplay.c:1011 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:188 +#: plugins/sudoers/testsudoers.c:215 plugins/sudoers/testsudoers.c:232 +#: plugins/sudoers/timestamp.c:390 plugins/sudoers/timestamp.c:426 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:147 +#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:213 +#: plugins/sudoers/visudo.c:297 plugins/sudoers/visudo.c:303 +#: plugins/sudoers/visudo.c:433 plugins/sudoers/visudo.c:974 +#: plugins/sudoers/visudo.c:1018 plugins/sudoers/visudo.c:1114 toke.l:785 +#: toke.l:806 toke.l:816 toke.l:924 toke.l:1082 +#, c-format +msgid "%s: %s" +msgstr "%s: %s" + +#: plugins/sudoers/alias.c:132 +#, c-format +msgid "Alias `%s' already defined" +msgstr "Alias „%s“ už je definovaný" + +#: plugins/sudoers/auth/bsdauth.c:68 +#, c-format +msgid "unable to get login class for user %s" +msgstr "" + +#: plugins/sudoers/auth/bsdauth.c:73 +msgid "unable to begin bsd authentication" +msgstr "" + +#: plugins/sudoers/auth/bsdauth.c:81 +msgid "invalid authentication type" +msgstr "" + +#: plugins/sudoers/auth/bsdauth.c:90 +msgid "unable to initialize BSD authentication" +msgstr "" + +#: plugins/sudoers/auth/fwtk.c:52 +msgid "unable to read fwtk config" +msgstr "" + +#: plugins/sudoers/auth/fwtk.c:57 +msgid "unable to connect to authentication server" +msgstr "" + +#: plugins/sudoers/auth/fwtk.c:63 plugins/sudoers/auth/fwtk.c:87 +#: plugins/sudoers/auth/fwtk.c:120 +msgid "lost connection to authentication server" +msgstr "" + +#: plugins/sudoers/auth/fwtk.c:67 +#, c-format +msgid "" +"authentication server error:\n" +"%s" +msgstr "" + +#: plugins/sudoers/auth/kerb5.c:111 +#, c-format +msgid "%s: unable to convert principal to string ('%s'): %s" +msgstr "" + +#: plugins/sudoers/auth/kerb5.c:161 +#, c-format +msgid "%s: unable to parse '%s': %s" +msgstr "" + +#: plugins/sudoers/auth/kerb5.c:170 +#, c-format +msgid "%s: unable to resolve credential cache: %s" +msgstr "" + +#: plugins/sudoers/auth/kerb5.c:217 +#, c-format +msgid "%s: unable to allocate options: %s" +msgstr "" + +#: plugins/sudoers/auth/kerb5.c:232 +#, c-format +msgid "%s: unable to get credentials: %s" +msgstr "" + +#: plugins/sudoers/auth/kerb5.c:245 +#, c-format +msgid "%s: unable to initialize credential cache: %s" +msgstr "" + +#: plugins/sudoers/auth/kerb5.c:248 +#, c-format +msgid "%s: unable to store credential in cache: %s" +msgstr "" + +#: plugins/sudoers/auth/kerb5.c:312 +#, c-format +msgid "%s: unable to get host principal: %s" +msgstr "" + +#: plugins/sudoers/auth/kerb5.c:326 +#, c-format +msgid "%s: Cannot verify TGT! Possible attack!: %s" +msgstr "" + +#: plugins/sudoers/auth/pam.c:92 +msgid "unable to initialize PAM" +msgstr "" + +#: plugins/sudoers/auth/pam.c:164 +msgid "account validation failure, is your account locked?" +msgstr "" + +#: plugins/sudoers/auth/pam.c:168 +msgid "Account or password is expired, reset your password and try again" +msgstr "" + +#: plugins/sudoers/auth/pam.c:176 +#, c-format +msgid "unable to change expired password: %s" +msgstr "" + +#: plugins/sudoers/auth/pam.c:181 +msgid "Password expired, contact your system administrator" +msgstr "" + +#: plugins/sudoers/auth/pam.c:185 +msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator" +msgstr "" + +#: plugins/sudoers/auth/pam.c:199 +#, c-format +msgid "PAM authentication error: %s" +msgstr "" + +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:218 +#, c-format +msgid "you do not exist in the %s database" +msgstr "" + +#: plugins/sudoers/auth/securid5.c:73 +msgid "failed to initialise the ACE API library" +msgstr "" + +#: plugins/sudoers/auth/securid5.c:99 +msgid "unable to contact the SecurID server" +msgstr "" + +#: plugins/sudoers/auth/securid5.c:108 +msgid "User ID locked for SecurID Authentication" +msgstr "" + +#: plugins/sudoers/auth/securid5.c:112 plugins/sudoers/auth/securid5.c:163 +msgid "invalid username length for SecurID" +msgstr "" + +#: plugins/sudoers/auth/securid5.c:116 plugins/sudoers/auth/securid5.c:168 +msgid "invalid Authentication Handle for SecurID" +msgstr "" + +#: plugins/sudoers/auth/securid5.c:120 +msgid "SecurID communication failed" +msgstr "" + +#: plugins/sudoers/auth/securid5.c:124 plugins/sudoers/auth/securid5.c:207 +msgid "unknown SecurID error" +msgstr "" + +#: plugins/sudoers/auth/securid5.c:158 +msgid "invalid passcode length for SecurID" +msgstr "" + +#: plugins/sudoers/auth/sia.c:120 +msgid "unable to initialize SIA session" +msgstr "" + +#: plugins/sudoers/auth/sudo_auth.c:126 +msgid "invalid authentication methods" +msgstr "" + +#: plugins/sudoers/auth/sudo_auth.c:128 +msgid "Invalid authentication methods compiled into sudo! You may not mix standalone and non-standalone authentication." +msgstr "" + +#: plugins/sudoers/auth/sudo_auth.c:225 plugins/sudoers/auth/sudo_auth.c:274 +msgid "no authentication methods" +msgstr "" + +#: plugins/sudoers/auth/sudo_auth.c:227 +msgid "There are no authentication methods compiled into sudo! If you want to turn off authentication, use the --disable-authentication configure option." +msgstr "" + +#: plugins/sudoers/auth/sudo_auth.c:276 +msgid "Unable to initialize authentication methods." +msgstr "Nie je možné inicializovať spôsoby overenia totožnosti." + +#: plugins/sudoers/auth/sudo_auth.c:435 +msgid "Authentication methods:" +msgstr "Spôsoby overenia totožnosti:" + +#: plugins/sudoers/bsm_audit.c:111 plugins/sudoers/bsm_audit.c:200 +msgid "Could not determine audit condition" +msgstr "" + +#: plugins/sudoers/bsm_audit.c:172 plugins/sudoers/bsm_audit.c:260 +msgid "unable to commit audit record" +msgstr "" + +#: plugins/sudoers/check.c:250 +msgid "" +"\n" +"We trust you have received the usual lecture from the local System\n" +"Administrator. It usually boils down to these three things:\n" +"\n" +" #1) Respect the privacy of others.\n" +" #2) Think before you type.\n" +" #3) With great power comes great responsibility.\n" +"\n" +msgstr "" +"\n" +"Veríme, že ste boli poučený miestnym správcom systému.\n" +"Dodržiavajte tieto tri zásady:\n" +"\n" +" 1.) Rešpektujte súkromie iných.\n" +" 2.) Premýšľajte pred tým, než niečo napíšete.\n" +" 3.) S veľkou mocou prichádza veľká zodpovednosť.\n" +"\n" + +#: plugins/sudoers/check.c:293 plugins/sudoers/check.c:303 +#: plugins/sudoers/sudoers.c:699 plugins/sudoers/sudoers.c:728 +#, c-format +msgid "unknown uid: %u" +msgstr "" + +#: plugins/sudoers/check.c:298 plugins/sudoers/policy.c:751 +#: plugins/sudoers/sudoers.c:1095 plugins/sudoers/testsudoers.c:206 +#: plugins/sudoers/testsudoers.c:361 +#, c-format +msgid "unknown user: %s" +msgstr "neznámy používateľ: %s" + +#: plugins/sudoers/def_data.c:27 +#, c-format +msgid "Syslog facility if syslog is being used for logging: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:31 +#, c-format +msgid "Syslog priority to use when user authenticates successfully: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:35 +#, c-format +msgid "Syslog priority to use when user authenticates unsuccessfully: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:39 +msgid "Put OTP prompt on its own line" +msgstr "" + +#: plugins/sudoers/def_data.c:43 +msgid "Ignore '.' in $PATH" +msgstr "" + +#: plugins/sudoers/def_data.c:47 +msgid "Always send mail when sudo is run" +msgstr "" + +#: plugins/sudoers/def_data.c:51 +msgid "Send mail if user authentication fails" +msgstr "" + +#: plugins/sudoers/def_data.c:55 +msgid "Send mail if the user is not in sudoers" +msgstr "" + +#: plugins/sudoers/def_data.c:59 +msgid "Send mail if the user is not in sudoers for this host" +msgstr "" + +#: plugins/sudoers/def_data.c:63 +msgid "Send mail if the user is not allowed to run a command" +msgstr "" + +#: plugins/sudoers/def_data.c:67 +msgid "Send mail if the user tries to run a command" +msgstr "" + +#: plugins/sudoers/def_data.c:71 +msgid "Use a separate timestamp for each user/tty combo" +msgstr "" + +#: plugins/sudoers/def_data.c:75 +msgid "Lecture user the first time they run sudo" +msgstr "" + +#: plugins/sudoers/def_data.c:79 +#, c-format +msgid "File containing the sudo lecture: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:83 +msgid "Require users to authenticate by default" +msgstr "" + +#: plugins/sudoers/def_data.c:87 +msgid "Root may run sudo" +msgstr "" + +#: plugins/sudoers/def_data.c:91 +msgid "Log the hostname in the (non-syslog) log file" +msgstr "" + +#: plugins/sudoers/def_data.c:95 +msgid "Log the year in the (non-syslog) log file" +msgstr "" + +#: plugins/sudoers/def_data.c:99 +msgid "If sudo is invoked with no arguments, start a shell" +msgstr "" + +#: plugins/sudoers/def_data.c:103 +msgid "Set $HOME to the target user when starting a shell with -s" +msgstr "" + +#: plugins/sudoers/def_data.c:107 +msgid "Always set $HOME to the target user's home directory" +msgstr "" + +#: plugins/sudoers/def_data.c:111 +msgid "Allow some information gathering to give useful error messages" +msgstr "" + +#: plugins/sudoers/def_data.c:115 +msgid "Require fully-qualified hostnames in the sudoers file" +msgstr "" + +#: plugins/sudoers/def_data.c:119 +msgid "Insult the user when they enter an incorrect password" +msgstr "" + +#: plugins/sudoers/def_data.c:123 +msgid "Only allow the user to run sudo if they have a tty" +msgstr "" + +#: plugins/sudoers/def_data.c:127 +msgid "Visudo will honor the EDITOR environment variable" +msgstr "" + +#: plugins/sudoers/def_data.c:131 +msgid "Prompt for root's password, not the users's" +msgstr "" + +#: plugins/sudoers/def_data.c:135 +msgid "Prompt for the runas_default user's password, not the users's" +msgstr "" + +#: plugins/sudoers/def_data.c:139 +msgid "Prompt for the target user's password, not the users's" +msgstr "" + +#: plugins/sudoers/def_data.c:143 +msgid "Apply defaults in the target user's login class if there is one" +msgstr "" + +#: plugins/sudoers/def_data.c:147 +msgid "Set the LOGNAME and USER environment variables" +msgstr "" + +#: plugins/sudoers/def_data.c:151 +msgid "Only set the effective uid to the target user, not the real uid" +msgstr "" + +#: plugins/sudoers/def_data.c:155 +msgid "Don't initialize the group vector to that of the target user" +msgstr "" + +#: plugins/sudoers/def_data.c:159 +#, c-format +msgid "Length at which to wrap log file lines (0 for no wrap): %u" +msgstr "" + +#: plugins/sudoers/def_data.c:163 +#, c-format +msgid "Authentication timestamp timeout: %.1f minutes" +msgstr "" + +#: plugins/sudoers/def_data.c:167 +#, c-format +msgid "Password prompt timeout: %.1f minutes" +msgstr "" + +#: plugins/sudoers/def_data.c:171 +#, c-format +msgid "Number of tries to enter a password: %u" +msgstr "" + +#: plugins/sudoers/def_data.c:175 +#, c-format +msgid "Umask to use or 0777 to use user's: 0%o" +msgstr "" + +#: plugins/sudoers/def_data.c:179 +#, c-format +msgid "Path to log file: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:183 +#, c-format +msgid "Path to mail program: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:187 +#, c-format +msgid "Flags for mail program: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:191 +#, c-format +msgid "Address to send mail to: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:195 +#, c-format +msgid "Address to send mail from: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:199 +#, c-format +msgid "Subject line for mail messages: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:203 +#, c-format +msgid "Incorrect password message: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:207 +#, c-format +msgid "Path to lecture status dir: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:211 +#, c-format +msgid "Path to authentication timestamp dir: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:215 +#, c-format +msgid "Owner of the authentication timestamp dir: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:219 +#, c-format +msgid "Users in this group are exempt from password and PATH requirements: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:223 +#, c-format +msgid "Default password prompt: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:227 +msgid "If set, passprompt will override system prompt in all cases." +msgstr "" + +#: plugins/sudoers/def_data.c:231 +#, c-format +msgid "Default user to run commands as: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:235 +#, c-format +msgid "Value to override user's $PATH with: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:239 +#, c-format +msgid "Path to the editor for use by visudo: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:243 +#, c-format +msgid "When to require a password for 'list' pseudocommand: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:247 +#, c-format +msgid "When to require a password for 'verify' pseudocommand: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:251 +msgid "Preload the dummy exec functions contained in the sudo_noexec library" +msgstr "" + +#: plugins/sudoers/def_data.c:255 +msgid "If LDAP directory is up, do we ignore local sudoers file" +msgstr "" + +#: plugins/sudoers/def_data.c:259 +#, c-format +msgid "File descriptors >= %d will be closed before executing a command" +msgstr "" + +#: plugins/sudoers/def_data.c:263 +msgid "If set, users may override the value of `closefrom' with the -C option" +msgstr "" + +#: plugins/sudoers/def_data.c:267 +msgid "Allow users to set arbitrary environment variables" +msgstr "" + +#: plugins/sudoers/def_data.c:271 +msgid "Reset the environment to a default set of variables" +msgstr "" + +#: plugins/sudoers/def_data.c:275 +msgid "Environment variables to check for sanity:" +msgstr "" + +#: plugins/sudoers/def_data.c:279 +msgid "Environment variables to remove:" +msgstr "" + +#: plugins/sudoers/def_data.c:283 +msgid "Environment variables to preserve:" +msgstr "" + +#: plugins/sudoers/def_data.c:287 +#, c-format +msgid "SELinux role to use in the new security context: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:291 +#, c-format +msgid "SELinux type to use in the new security context: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:295 +#, c-format +msgid "Path to the sudo-specific environment file: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:299 +#, c-format +msgid "Locale to use while parsing sudoers: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:303 +msgid "Allow sudo to prompt for a password even if it would be visible" +msgstr "" + +#: plugins/sudoers/def_data.c:307 +msgid "Provide visual feedback at the password prompt when there is user input" +msgstr "" + +#: plugins/sudoers/def_data.c:311 +msgid "Use faster globbing that is less accurate but does not access the filesystem" +msgstr "" + +#: plugins/sudoers/def_data.c:315 +msgid "The umask specified in sudoers will override the user's, even if it is more permissive" +msgstr "" + +#: plugins/sudoers/def_data.c:319 +msgid "Log user's input for the command being run" +msgstr "" + +#: plugins/sudoers/def_data.c:323 +msgid "Log the output of the command being run" +msgstr "" + +#: plugins/sudoers/def_data.c:327 +msgid "Compress I/O logs using zlib" +msgstr "" + +#: plugins/sudoers/def_data.c:331 +msgid "Always run commands in a pseudo-tty" +msgstr "" + +#: plugins/sudoers/def_data.c:335 +#, c-format +msgid "Plugin for non-Unix group support: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:339 +#, c-format +msgid "Directory in which to store input/output logs: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:343 +#, c-format +msgid "File in which to store the input/output log: %s" +msgstr "" + +#: plugins/sudoers/def_data.c:347 +msgid "Add an entry to the utmp/utmpx file when allocating a pty" +msgstr "" + +#: plugins/sudoers/def_data.c:351 +msgid "Set the user in utmp to the runas user, not the invoking user" +msgstr "" + +#: plugins/sudoers/def_data.c:355 +msgid "Set of permitted privileges" +msgstr "" + +#: plugins/sudoers/def_data.c:359 +msgid "Set of limit privileges" +msgstr "" + +#: plugins/sudoers/def_data.c:363 +msgid "Run commands on a pty in the background" +msgstr "" + +#: plugins/sudoers/def_data.c:367 +msgid "PAM service name to use" +msgstr "" + +#: plugins/sudoers/def_data.c:371 +msgid "PAM service name to use for login shells" +msgstr "" + +#: plugins/sudoers/def_data.c:375 +msgid "Attempt to establish PAM credentials for the target user" +msgstr "" + +#: plugins/sudoers/def_data.c:379 +msgid "Create a new PAM session for the command to run in" +msgstr "" + +#: plugins/sudoers/def_data.c:383 +#, c-format +msgid "Maximum I/O log sequence number: %u" +msgstr "" + +#: plugins/sudoers/def_data.c:387 +msgid "Enable sudoers netgroup support" +msgstr "" + +#: plugins/sudoers/def_data.c:391 +msgid "Follow symbolic links when editing files with sudoedit" +msgstr "" + +#: plugins/sudoers/defaults.c:199 plugins/sudoers/defaults.c:608 +#: plugins/sudoers/visudo_json.c:633 plugins/sudoers/visudo_json.c:668 +#, c-format +msgid "unknown defaults entry `%s'" +msgstr "" + +#: plugins/sudoers/defaults.c:207 plugins/sudoers/defaults.c:217 +#: plugins/sudoers/defaults.c:241 plugins/sudoers/defaults.c:256 +#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 +#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 +#: plugins/sudoers/defaults.c:325 +#, c-format +msgid "value `%s' is invalid for option `%s'" +msgstr "" + +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:220 +#: plugins/sudoers/defaults.c:228 plugins/sudoers/defaults.c:251 +#: plugins/sudoers/defaults.c:264 plugins/sudoers/defaults.c:277 +#: plugins/sudoers/defaults.c:290 plugins/sudoers/defaults.c:310 +#: plugins/sudoers/defaults.c:321 +#, c-format +msgid "no value specified for `%s'" +msgstr "" + +#: plugins/sudoers/defaults.c:233 +#, c-format +msgid "values for `%s' must start with a '/'" +msgstr "" + +#: plugins/sudoers/defaults.c:301 +#, c-format +msgid "option `%s' does not take a value" +msgstr "" + +#: plugins/sudoers/env.c:295 plugins/sudoers/env.c:302 +#: plugins/sudoers/env.c:407 plugins/sudoers/ldap.c:450 +#: plugins/sudoers/ldap.c:540 plugins/sudoers/ldap.c:1152 +#: plugins/sudoers/ldap.c:1354 plugins/sudoers/ldap.c:1526 +#: plugins/sudoers/ldap.c:1682 plugins/sudoers/linux_audit.c:82 +#: plugins/sudoers/logging.c:921 plugins/sudoers/policy.c:498 +#: plugins/sudoers/policy.c:507 plugins/sudoers/prompt.c:161 +#: plugins/sudoers/sudoers.c:815 plugins/sudoers/testsudoers.c:236 +#: plugins/sudoers/toke_util.c:160 +#, c-format +msgid "internal error, %s overflow" +msgstr "vnútorná chyba, %s pretečenie" + +#: plugins/sudoers/env.c:376 +msgid "sudo_putenv: corrupted envp, length mismatch" +msgstr "" + +#: plugins/sudoers/env.c:1052 +msgid "unable to rebuild the environment" +msgstr "" + +#: plugins/sudoers/env.c:1126 +#, c-format +msgid "sorry, you are not allowed to set the following environment variables: %s" +msgstr "" + +#: plugins/sudoers/group_plugin.c:85 +#, c-format +msgid "%s must be owned by uid %d" +msgstr "%s musí byť vlastnený identifikátorom uid %d" + +#: plugins/sudoers/group_plugin.c:89 +#, c-format +msgid "%s must only be writable by owner" +msgstr "" + +#: plugins/sudoers/group_plugin.c:97 plugins/sudoers/sssd.c:331 +#, c-format +msgid "unable to load %s: %s" +msgstr "nie je možné načítať %s:%s" + +#: plugins/sudoers/group_plugin.c:103 +#, c-format +msgid "unable to find symbol \"group_plugin\" in %s" +msgstr "" + +#: plugins/sudoers/group_plugin.c:108 +#, c-format +msgid "%s: incompatible group plugin major version %d, expected %d" +msgstr "" + +#: plugins/sudoers/interfaces.c:117 +msgid "Local IP address and netmask pairs:\n" +msgstr "" + +#: plugins/sudoers/iolog.c:92 plugins/sudoers/iolog.c:110 +#: plugins/sudoers/timestamp.c:169 +#, c-format +msgid "%s exists but is not a directory (0%o)" +msgstr "" + +#: plugins/sudoers/iolog.c:103 plugins/sudoers/iolog.c:124 +#: plugins/sudoers/iolog.c:131 plugins/sudoers/timestamp.c:163 +#: plugins/sudoers/timestamp.c:184 +#, c-format +msgid "unable to mkdir %s" +msgstr "" + +#: plugins/sudoers/iolog.c:200 plugins/sudoers/sudoers.c:871 +#: plugins/sudoers/sudoreplay.c:300 plugins/sudoers/sudoreplay.c:769 +#: plugins/sudoers/sudoreplay.c:973 plugins/sudoers/timestamp.c:399 +#: plugins/sudoers/visudo.c:898 plugins/sudoers/visudo_json.c:1012 +#: plugins/sudoers/visudo_json.c:1025 +#, c-format +msgid "unable to open %s" +msgstr "nie je možné otvoriť %s" + +#: plugins/sudoers/iolog.c:241 plugins/sudoers/sudoers.c:875 +#: plugins/sudoers/sudoreplay.c:1084 +#, c-format +msgid "unable to read %s" +msgstr "" + +#: plugins/sudoers/iolog.c:277 plugins/sudoers/sudoreplay.c:550 +#: plugins/sudoers/timestamp.c:298 plugins/sudoers/timestamp.c:301 +#, c-format +msgid "unable to write to %s" +msgstr "nie je možné zapísať do %s" + +#: plugins/sudoers/iolog.c:342 plugins/sudoers/iolog.c:540 +#, c-format +msgid "unable to create %s" +msgstr "" + +#: plugins/sudoers/ldap.c:428 +msgid "sudo_ldap_conf_add_ports: port too large" +msgstr "" + +#: plugins/sudoers/ldap.c:488 +#, c-format +msgid "unsupported LDAP uri type: %s" +msgstr "" + +#: plugins/sudoers/ldap.c:515 +msgid "unable to mix ldap and ldaps URIs" +msgstr "" + +#: plugins/sudoers/ldap.c:519 plugins/sudoers/ldap.c:555 +msgid "starttls not supported when using ldaps" +msgstr "" + +#: plugins/sudoers/ldap.c:626 +#, c-format +msgid "unable to initialize SSL cert and key db: %s" +msgstr "" + +#: plugins/sudoers/ldap.c:629 +#, c-format +msgid "you must set TLS_CERT in %s to use SSL" +msgstr "" + +#: plugins/sudoers/ldap.c:1138 +msgid "unable to get GMT time" +msgstr "" + +#: plugins/sudoers/ldap.c:1144 +msgid "unable to format timestamp" +msgstr "" + +#: plugins/sudoers/ldap.c:1830 +#, c-format +msgid "%s: %s: %s: %s" +msgstr "" + +#: plugins/sudoers/ldap.c:2372 +#, c-format +msgid "" +"\n" +"LDAP Role: %s\n" +msgstr "" + +#: plugins/sudoers/ldap.c:2374 +#, c-format +msgid "" +"\n" +"LDAP Role: UNKNOWN\n" +msgstr "" + +#: plugins/sudoers/ldap.c:2421 +#, c-format +msgid " Order: %s\n" +msgstr "" + +#: plugins/sudoers/ldap.c:2429 plugins/sudoers/parse.c:555 +#: plugins/sudoers/sssd.c:1417 +#, c-format +msgid " Commands:\n" +msgstr "" + +#: plugins/sudoers/ldap.c:2993 +#, c-format +msgid "unable to initialize LDAP: %s" +msgstr "" + +#: plugins/sudoers/ldap.c:3029 +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:3286 +#, c-format +msgid "invalid sudoOrder attribute: %s" +msgstr "" + +#: plugins/sudoers/linux_audit.c:52 +msgid "unable to open audit system" +msgstr "nie je možné otvoriť systém auditu" + +#: plugins/sudoers/linux_audit.c:93 +msgid "unable to send audit message" +msgstr "nie je možné odoslať správu auditu" + +#: plugins/sudoers/logging.c:106 +#, c-format +msgid "%8s : %s" +msgstr "" + +#: plugins/sudoers/logging.c:134 +#, c-format +msgid "%8s : (command continued) %s" +msgstr "" + +#: plugins/sudoers/logging.c:159 +#, c-format +msgid "unable to open log file: %s: %s" +msgstr "" + +#: plugins/sudoers/logging.c:162 +#, c-format +msgid "unable to lock log file: %s: %s" +msgstr "" + +#: plugins/sudoers/logging.c:211 +msgid "No user or host" +msgstr "" + +#: plugins/sudoers/logging.c:213 +msgid "validation failure" +msgstr "" + +#: plugins/sudoers/logging.c:220 +msgid "user NOT in sudoers" +msgstr "" + +#: plugins/sudoers/logging.c:222 +msgid "user NOT authorized on host" +msgstr "" + +#: plugins/sudoers/logging.c:224 +msgid "command not allowed" +msgstr "" + +#: plugins/sudoers/logging.c:259 +#, c-format +msgid "%s is not in the sudoers file. This incident will be reported.\n" +msgstr "" + +#: plugins/sudoers/logging.c:262 +#, c-format +msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" +msgstr "" + +#: plugins/sudoers/logging.c:266 +#, c-format +msgid "Sorry, user %s may not run sudo on %s.\n" +msgstr "" + +#: plugins/sudoers/logging.c:269 +#, 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:306 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1222 +#: plugins/sudoers/sudoers.c:1224 +#, c-format +msgid "%s: command not found" +msgstr "" + +#: plugins/sudoers/logging.c:308 plugins/sudoers/sudoers.c:467 +#, 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:325 +msgid "authentication failure" +msgstr "" + +#: plugins/sudoers/logging.c:351 +msgid "a password is required" +msgstr "" + +#: plugins/sudoers/logging.c:422 plugins/sudoers/logging.c:484 +#, c-format +msgid "%u incorrect password attempt" +msgid_plural "%u incorrect password attempts" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: plugins/sudoers/logging.c:572 +msgid "unable to fork" +msgstr "" + +#: plugins/sudoers/logging.c:580 plugins/sudoers/logging.c:636 +#, c-format +msgid "unable to fork: %m" +msgstr "" + +#: plugins/sudoers/logging.c:626 +#, c-format +msgid "unable to open pipe: %m" +msgstr "" + +#: plugins/sudoers/logging.c:651 +#, c-format +msgid "unable to dup stdin: %m" +msgstr "" + +#: plugins/sudoers/logging.c:689 +#, c-format +msgid "unable to execute %s: %m" +msgstr "" + +#: plugins/sudoers/match.c:606 +#, c-format +msgid "unsupported digest type %d for %s" +msgstr "" + +#: plugins/sudoers/match.c:639 +#, c-format +msgid "%s: read error" +msgstr "" + +#: plugins/sudoers/match.c:653 +#, c-format +msgid "digest for %s (%s) is not in %s form" +msgstr "" + +#: plugins/sudoers/parse.c:114 +#, c-format +msgid "parse error in %s near line %d" +msgstr "" + +#: plugins/sudoers/parse.c:117 +#, c-format +msgid "parse error in %s" +msgstr "" + +#: plugins/sudoers/parse.c:502 +#, c-format +msgid "" +"\n" +"Sudoers entry:\n" +msgstr "" + +#: plugins/sudoers/parse.c:503 +#, c-format +msgid " RunAsUsers: " +msgstr "" + +#: plugins/sudoers/parse.c:517 +#, c-format +msgid " RunAsGroups: " +msgstr "" + +#: plugins/sudoers/parse.c:526 +#, c-format +msgid " Options: " +msgstr "" + +#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:253 +msgid "unable to parse network address list" +msgstr "" + +#: plugins/sudoers/policy.c:636 plugins/sudoers/visudo.c:839 +#, c-format +msgid "unable to execute %s" +msgstr "nie je možné vykonať %s" + +#: plugins/sudoers/policy.c:769 +#, c-format +msgid "Sudoers policy plugin version %s\n" +msgstr "" + +#: plugins/sudoers/policy.c:771 +#, c-format +msgid "Sudoers file grammar version %d\n" +msgstr "" + +#: plugins/sudoers/policy.c:775 +#, c-format +msgid "" +"\n" +"Sudoers path: %s\n" +msgstr "" + +#: plugins/sudoers/policy.c:778 +#, c-format +msgid "nsswitch path: %s\n" +msgstr "" + +#: plugins/sudoers/policy.c:780 +#, c-format +msgid "ldap.conf path: %s\n" +msgstr "" + +#: plugins/sudoers/policy.c:781 +#, c-format +msgid "ldap.secret path: %s\n" +msgstr "" + +#: plugins/sudoers/policy.c:814 +#, c-format +msgid "unable to register hook of type %d (version %d.%d)" +msgstr "" + +#: plugins/sudoers/pwutil.c:136 plugins/sudoers/pwutil.c:153 +#, c-format +msgid "unable to cache uid %u, out of memory" +msgstr "" + +#: plugins/sudoers/pwutil.c:147 +#, c-format +msgid "unable to cache uid %u, already exists" +msgstr "" + +#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:207 +#: plugins/sudoers/pwutil.c:250 plugins/sudoers/pwutil.c:294 +#, c-format +msgid "unable to cache user %s, out of memory" +msgstr "" + +#: plugins/sudoers/pwutil.c:202 +#, c-format +msgid "unable to cache user %s, already exists" +msgstr "" + +#: plugins/sudoers/pwutil.c:427 plugins/sudoers/pwutil.c:444 +#, c-format +msgid "unable to cache gid %u, out of memory" +msgstr "" + +#: plugins/sudoers/pwutil.c:438 +#, c-format +msgid "unable to cache gid %u, already exists" +msgstr "" + +#: plugins/sudoers/pwutil.c:476 plugins/sudoers/pwutil.c:492 +#: plugins/sudoers/pwutil.c:524 plugins/sudoers/pwutil.c:565 +#, c-format +msgid "unable to cache group %s, out of memory" +msgstr "" + +#: plugins/sudoers/pwutil.c:487 +#, c-format +msgid "unable to cache group %s, already exists" +msgstr "" + +#: plugins/sudoers/pwutil.c:676 plugins/sudoers/pwutil.c:710 +#, c-format +msgid "unable to cache group list for %s, already exists" +msgstr "" + +#: plugins/sudoers/pwutil.c:682 plugins/sudoers/pwutil.c:715 +#, c-format +msgid "unable to cache group list for %s, out of memory" +msgstr "" + +#: plugins/sudoers/pwutil.c:705 +#, c-format +msgid "unable to parse groups for %s" +msgstr "" + +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 +#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 +#: plugins/sudoers/set_perms.c:1430 +msgid "perm stack overflow" +msgstr "" + +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 +#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 +#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 +#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 +#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 +msgid "perm stack underflow" +msgstr "" + +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:493 +#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 +msgid "unable to change to root gid" +msgstr "" + +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:590 +#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 +msgid "unable to change to runas gid" +msgstr "" + +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:595 +#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 +msgid "unable to set runas group vector" +msgstr "" + +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:606 +#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +msgid "unable to change to runas uid" +msgstr "" + +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:624 +#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 +msgid "unable to change to sudoers gid" +msgstr "" + +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 +msgid "too many processes" +msgstr "" + +#: plugins/sudoers/solaris_audit.c:51 +msgid "unable to get current working directory" +msgstr "" + +#: plugins/sudoers/solaris_audit.c:59 +#, c-format +msgid "truncated audit path user_cmnd: %s" +msgstr "" + +#: plugins/sudoers/solaris_audit.c:66 +#, c-format +msgid "truncated audit path argv[0]: %s" +msgstr "" + +#: plugins/sudoers/solaris_audit.c:115 +msgid "audit_failure message too long" +msgstr "" + +#: plugins/sudoers/sssd.c:333 +msgid "unable to initialize SSS source. Is SSSD installed on your machine?" +msgstr "" + +#: plugins/sudoers/sssd.c:341 plugins/sudoers/sssd.c:350 +#: plugins/sudoers/sssd.c:359 plugins/sudoers/sssd.c:368 +#: plugins/sudoers/sssd.c:377 +#, c-format +msgid "unable to find symbol \"%s\" in %s" +msgstr "" + +#: plugins/sudoers/sudo_nss.c:290 +#, c-format +msgid "Matching Defaults entries for %s on %s:\n" +msgstr "" + +#: plugins/sudoers/sudo_nss.c:308 +#, c-format +msgid "Runas and Command-specific defaults for %s:\n" +msgstr "" + +#: plugins/sudoers/sudo_nss.c:326 +#, c-format +msgid "User %s may run the following commands on %s:\n" +msgstr "" + +#: plugins/sudoers/sudo_nss.c:339 +#, c-format +msgid "User %s is not allowed to run sudo on %s.\n" +msgstr "" + +#: plugins/sudoers/sudoers.c:172 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/visudo.c:223 plugins/sudoers/visudo.c:565 +msgid "unable to initialize sudoers default values" +msgstr "" + +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:239 +#: plugins/sudoers/sudoers.c:833 +msgid "problem with defaults entries" +msgstr "" + +#: plugins/sudoers/sudoers.c:205 +msgid "no valid sudoers sources found, quitting" +msgstr "" + +#: plugins/sudoers/sudoers.c:275 +msgid "sudoers specifies that root is not allowed to sudo" +msgstr "" + +#: plugins/sudoers/sudoers.c:332 +msgid "you are not permitted to use the -C option" +msgstr "" + +#: plugins/sudoers/sudoers.c:396 +#, c-format +msgid "timestamp owner (%s): No such user" +msgstr "" + +#: plugins/sudoers/sudoers.c:410 +msgid "no tty" +msgstr "" + +#: plugins/sudoers/sudoers.c:411 +msgid "sorry, you must have a tty to run sudo" +msgstr "" + +#: plugins/sudoers/sudoers.c:466 +msgid "command in current directory" +msgstr "" + +#: plugins/sudoers/sudoers.c:486 +msgid "sorry, you are not allowed to preserve the environment" +msgstr "" + +#: plugins/sudoers/sudoers.c:778 +msgid "command too long" +msgstr "" + +#: plugins/sudoers/sudoers.c:886 plugins/sudoers/visudo.c:426 +#: plugins/sudoers/visudo.c:665 +#, c-format +msgid "unable to stat %s" +msgstr "" + +#: plugins/sudoers/sudoers.c:890 +#, c-format +msgid "%s is not a regular file" +msgstr "%s nie je regulárny súbor" + +#: plugins/sudoers/sudoers.c:894 plugins/sudoers/timestamp.c:225 toke.l:947 +#, c-format +msgid "%s is owned by uid %u, should be %u" +msgstr "%s je vlastnený identifikátorom uid %u a mal by byť vlastnený %u" + +#: plugins/sudoers/sudoers.c:898 toke.l:954 +#, c-format +msgid "%s is world writable" +msgstr "" + +#: plugins/sudoers/sudoers.c:902 toke.l:959 +#, c-format +msgid "%s is owned by gid %u, should be %u" +msgstr "" + +#: plugins/sudoers/sudoers.c:933 +#, c-format +msgid "only root can use `-c %s'" +msgstr "" + +#: plugins/sudoers/sudoers.c:952 +#, c-format +msgid "unknown login class: %s" +msgstr "" + +#: plugins/sudoers/sudoers.c:1031 plugins/sudoers/sudoers.c:1059 +#, c-format +msgid "unable to resolve host %s" +msgstr "" + +#: plugins/sudoers/sudoers.c:1126 plugins/sudoers/testsudoers.c:385 +#, c-format +msgid "unknown group: %s" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:232 +#, c-format +msgid "invalid filter option: %s" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:245 +#, c-format +msgid "invalid max wait: %s" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:251 +#, c-format +msgid "invalid speed factor: %s" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:254 plugins/sudoers/visudo.c:180 +#, c-format +msgid "%s version %s\n" +msgstr "%s verzia %s\n" + +#: plugins/sudoers/sudoreplay.c:286 +#, c-format +msgid "%s/%.2s/%.2s/%.2s/timing: %s" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:292 +#, c-format +msgid "%s/%s/timing: %s" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:308 +#, c-format +msgid "Replaying sudo session: %s\n" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:314 +#, c-format +msgid "Warning: your terminal is too small to properly replay the log.\n" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:315 +#, c-format +msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." +msgstr "" + +#: plugins/sudoers/sudoreplay.c:368 +msgid "unable to set tty to raw mode" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:401 +#, c-format +msgid "invalid timing file line: %s" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:611 plugins/sudoers/sudoreplay.c:636 +#, c-format +msgid "ambiguous expression \"%s\"" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:658 +msgid "unmatched ')' in expression" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:662 +#, c-format +msgid "unknown search term \"%s\"" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:677 +#, c-format +msgid "%s requires an argument" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:680 plugins/sudoers/sudoreplay.c:1060 +#, c-format +msgid "invalid regular expression: %s" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:684 +#, c-format +msgid "could not parse date \"%s\"" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:693 +msgid "unmatched '(' in expression" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:695 +msgid "illegal trailing \"or\"" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:697 +msgid "illegal trailing \"!\"" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:746 +#, c-format +msgid "unknown search type %d" +msgstr "neznámy typ vyhľadávania %d" + +#: plugins/sudoers/sudoreplay.c:784 +#, c-format +msgid "%s: invalid log file" +msgstr "%s: neplatný súbor záznamu" + +#: plugins/sudoers/sudoreplay.c:802 +#, c-format +msgid "%s: time stamp field is missing" +msgstr "%s: chýba pole časovej značky" + +#: plugins/sudoers/sudoreplay.c:809 +#, c-format +msgid "%s: time stamp %s: %s" +msgstr "%s: časová značka %s: %s" + +#: plugins/sudoers/sudoreplay.c:816 +#, c-format +msgid "%s: user field is missing" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:825 +#, c-format +msgid "%s: runas user field is missing" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:834 +#, c-format +msgid "%s: runas group field is missing" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:1197 +#, c-format +msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" +msgstr "použitie: %s [-h] [-d adresár] [-m číslo] [-s číslo] ID\n" + +#: plugins/sudoers/sudoreplay.c:1200 +#, c-format +msgid "usage: %s [-h] [-d dir] -l [search expression]\n" +msgstr "použitie: %s [-h] [-d adresár] -l [hľadaný výraz]\n" + +#: plugins/sudoers/sudoreplay.c:1209 +#, c-format +msgid "" +"%s - replay sudo session logs\n" +"\n" +msgstr "" + +#: plugins/sudoers/sudoreplay.c:1211 +msgid "" +"\n" +"Options:\n" +" -d, --directory=dir specify directory for session logs\n" +" -f, --filter=filter specify which I/O type(s) to display\n" +" -h, --help display help message and exit\n" +" -l, --list list available session IDs, with optional expression\n" +" -m, --max-wait=num max number of seconds to wait between events\n" +" -s, --speed=num speed up or slow down output\n" +" -V, --version display version information and exit" +msgstr "" +"\n" +"Voľby:\n" +" -d, --directory=adresárr určí adresár pre záznamy relácie\n" +" -f, --filter=filter určuje, ktoré vstupno-výstupné typy sa majú zorbaziť\n" +" -h, --help zorbazí správu pomocníka a skončí\n" +" -l, --list vypíše identifikátory dostupných relácií, s voliteľným výrazom\n" +" -m, --max-wait=číslo maximálny počet sekúnd čakania medzi udalosťami\n" +" -s, --speed=číslo zrýchli alebo spomalí výstup\n" +" -V, --version zobrazí informácie o verzii a skončí" + +#: plugins/sudoers/testsudoers.c:324 +msgid "\thost unmatched" +msgstr "" + +#: plugins/sudoers/testsudoers.c:327 +msgid "" +"\n" +"Command allowed" +msgstr "" +"\n" +"Príkaz povolený" + +#: plugins/sudoers/testsudoers.c:328 +msgid "" +"\n" +"Command denied" +msgstr "" +"\n" +"Príkaz odmietnutý" + +#: plugins/sudoers/testsudoers.c:328 +msgid "" +"\n" +"Command unmatched" +msgstr "" +"\n" +"Príkaz nevyhovujúci" + +#: plugins/sudoers/timestamp.c:233 +#, c-format +msgid "%s is group writable" +msgstr "" + +#: plugins/sudoers/timestamp.c:309 +#, c-format +msgid "unable to truncate time stamp file to %lld bytes" +msgstr "" + +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:486 plugins/sudoers/visudo.c:492 +msgid "unable to read the clock" +msgstr "nie je možné čítať hodiny" + +#: plugins/sudoers/timestamp.c:756 +msgid "ignoring time stamp from the future" +msgstr "" + +#: plugins/sudoers/timestamp.c:768 +#, c-format +msgid "time stamp too far in the future: %20.20s" +msgstr "" + +#: plugins/sudoers/timestamp.c:863 +#, c-format +msgid "unable to lock time stamp file %s" +msgstr "" + +#: plugins/sudoers/timestamp.c:906 plugins/sudoers/timestamp.c:926 +#, c-format +msgid "lecture status path too long: %s/%s" +msgstr "" + +#: plugins/sudoers/visudo.c:182 +#, c-format +msgid "%s grammar version %d\n" +msgstr "" + +#: plugins/sudoers/visudo.c:254 plugins/sudoers/visudo.c:617 +#, c-format +msgid "press return to edit %s: " +msgstr "" + +#: plugins/sudoers/visudo.c:319 +#, c-format +msgid "specified editor (%s) doesn't exist" +msgstr "" + +#: plugins/sudoers/visudo.c:337 +#, c-format +msgid "no editor found (editor path = %s)" +msgstr "" + +#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:454 +msgid "write error" +msgstr "chyba zápisu" + +#: plugins/sudoers/visudo.c:499 +#, c-format +msgid "unable to stat temporary file (%s), %s unchanged" +msgstr "" + +#: plugins/sudoers/visudo.c:506 +#, c-format +msgid "zero length temporary file (%s), %s unchanged" +msgstr "" + +#: plugins/sudoers/visudo.c:512 +#, c-format +msgid "editor (%s) failed, %s unchanged" +msgstr "" + +#: plugins/sudoers/visudo.c:534 +#, c-format +msgid "%s unchanged" +msgstr "%s nezmenený" + +#: plugins/sudoers/visudo.c:560 +#, c-format +msgid "unable to re-open temporary file (%s), %s unchanged." +msgstr "" + +#: plugins/sudoers/visudo.c:571 +#, c-format +msgid "unabled to parse temporary file (%s), unknown error" +msgstr "" + +#: plugins/sudoers/visudo.c:608 +#, c-format +msgid "internal error, unable to find %s in list!" +msgstr "" + +#: plugins/sudoers/visudo.c:667 plugins/sudoers/visudo.c:676 +#, c-format +msgid "unable to set (uid, gid) of %s to (%u, %u)" +msgstr "" + +#: plugins/sudoers/visudo.c:671 plugins/sudoers/visudo.c:681 +#, c-format +msgid "unable to change mode of %s to 0%o" +msgstr "" + +#: plugins/sudoers/visudo.c:698 +#, c-format +msgid "%s and %s not on the same file system, using mv to rename" +msgstr "" + +#: plugins/sudoers/visudo.c:712 +#, c-format +msgid "command failed: '%s %s %s', %s unchanged" +msgstr "" + +#: plugins/sudoers/visudo.c:722 +#, c-format +msgid "error renaming %s, %s unchanged" +msgstr "" + +#: plugins/sudoers/visudo.c:784 +msgid "What now? " +msgstr "" + +#: plugins/sudoers/visudo.c:798 +msgid "" +"Options are:\n" +" (e)dit sudoers file again\n" +" e(x)it without saving changes to sudoers file\n" +" (Q)uit and save changes to sudoers file (DANGER!)\n" +msgstr "" + +#: plugins/sudoers/visudo.c:846 +#, c-format +msgid "unable to run %s" +msgstr "nie je možné spustiť %s" + +#: plugins/sudoers/visudo.c:872 +#, c-format +msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" +msgstr "" + +#: plugins/sudoers/visudo.c:879 +#, c-format +msgid "%s: bad permissions, should be mode 0%o\n" +msgstr "" + +#: plugins/sudoers/visudo.c:904 plugins/sudoers/visudo_json.c:1032 +#, c-format +msgid "failed to parse %s file, unknown error" +msgstr "" + +#: plugins/sudoers/visudo.c:920 plugins/sudoers/visudo_json.c:1041 +#, c-format +msgid "parse error in %s near line %d\n" +msgstr "" + +#: plugins/sudoers/visudo.c:923 plugins/sudoers/visudo_json.c:1044 +#, c-format +msgid "parse error in %s\n" +msgstr "" + +#: plugins/sudoers/visudo.c:931 plugins/sudoers/visudo.c:938 +#, c-format +msgid "%s: parsed OK\n" +msgstr "" + +#: plugins/sudoers/visudo.c:985 +#, c-format +msgid "%s busy, try again later" +msgstr "" + +#: plugins/sudoers/visudo.c:1081 +#, c-format +msgid "Error: cycle in %s `%s'" +msgstr "" + +#: plugins/sudoers/visudo.c:1082 +#, c-format +msgid "Warning: cycle in %s `%s'" +msgstr "" + +#: plugins/sudoers/visudo.c:1086 +#, c-format +msgid "Error: %s `%s' referenced but not defined" +msgstr "" + +#: plugins/sudoers/visudo.c:1087 +#, c-format +msgid "Warning: %s `%s' referenced but not defined" +msgstr "" + +#: plugins/sudoers/visudo.c:1230 +#, c-format +msgid "Warning: unused %s `%s'" +msgstr "" + +#: plugins/sudoers/visudo.c:1343 +#, c-format +msgid "" +"%s - safely edit the sudoers file\n" +"\n" +msgstr "" +"%s - bezpečne upraví súbor sudoers\n" +"\n" + +#: plugins/sudoers/visudo.c:1345 +msgid "" +"\n" +"Options:\n" +" -c, --check check-only mode\n" +" -f, --file=sudoers specify sudoers file location\n" +" -h, --help display help message and exit\n" +" -q, --quiet less verbose (quiet) syntax error messages\n" +" -s, --strict strict syntax checking\n" +" -V, --version display version information and exit\n" +" -x, --export=output_file write sudoers in JSON format to output_file" +msgstr "" + +#: plugins/sudoers/visudo_json.c:1018 +#, c-format +msgid "%s: input and output files must be different" +msgstr "" + +#: toke.l:918 +msgid "too many levels of includes" +msgstr "" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/plugins/sudoers/po/sr.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/plugins/sudoers/po/sr.mo differ diff -Nru sudo-1.8.12/plugins/sudoers/po/sr.po sudo-1.8.16/plugins/sudoers/po/sr.po --- sudo-1.8.12/plugins/sudoers/po/sr.po 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/po/sr.po 2016-03-17 16:13:10.000000000 +0000 @@ -1,12 +1,12 @@ # Serbian translation for sudoers. # This file is put in the public domain. -# Мирослав Николић , 2014. +# Мирослав Николић , 2014—2016. msgid "" msgstr "" -"Project-Id-Version: sudoers-1.8.11b1\n" -"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-07-30 09:37-0600\n" -"PO-Revision-Date: 2014-09-14 18:00+0200\n" +"Project-Id-Version: sudoers-1.8.16b1\n" +"Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" +"POT-Creation-Date: 2016-02-19 15:48-0700\n" +"PO-Revision-Date: 2016-03-05 10:21+0200\n" "Last-Translator: Мирослав Николић \n" "Language-Team: Serbian <(nothing)>\n" "Language: sr\n" @@ -15,54 +15,196 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +#: confstr.sh:1 +msgid "syntax error" +msgstr "грешка синтаксе" + #: confstr.sh:2 -msgid "Password:" -msgstr "Лозинка:" +msgid "%p's password: " +msgstr "Лозинка корисника %p: " #: confstr.sh:3 +msgid "[sudo] password for %p: " +msgstr "[судо] лозинка за корисника %p: " + +#: confstr.sh:4 +msgid "Password: " +msgstr "Лозинка: " + +#: confstr.sh:5 msgid "*** SECURITY information for %h ***" msgstr "*** информације БЕЗБЕДНОСТИ за %h ***" -#: confstr.sh:4 +#: confstr.sh:6 msgid "Sorry, try again." msgstr "Извините, покушајте поново." -#: plugins/sudoers/alias.c:136 +#: gram.y:183 gram.y:201 gram.y:207 gram.y:213 gram.y:219 gram.y:225 +#: gram.y:241 gram.y:248 gram.y:255 gram.y:262 gram.y:269 gram.y:285 +#: gram.y:308 gram.y:315 gram.y:322 gram.y:329 gram.y:336 gram.y:391 +#: gram.y:399 gram.y:409 gram.y:439 gram.y:446 gram.y:453 gram.y:460 +#: gram.y:572 gram.y:579 gram.y:588 gram.y:597 gram.y:614 gram.y:670 +#: gram.y:677 gram.y:684 gram.y:692 gram.y:784 gram.y:791 gram.y:798 +#: gram.y:805 gram.y:812 gram.y:838 gram.y:845 gram.y:852 gram.y:1136 +#: gram.y:1143 plugins/sudoers/alias.c:123 plugins/sudoers/alias.c:136 +#: plugins/sudoers/auth/bsdauth.c:141 plugins/sudoers/auth/kerb5.c:119 +#: plugins/sudoers/auth/kerb5.c:145 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/auth/sia.c:59 +#: plugins/sudoers/defaults.c:518 plugins/sudoers/defaults.c:722 +#: plugins/sudoers/defaults.c:882 plugins/sudoers/editor.c:64 +#: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:92 +#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/iolog.c:586 +#: plugins/sudoers/iolog.c:618 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:446 plugins/sudoers/ldap.c:477 +#: plugins/sudoers/ldap.c:529 plugins/sudoers/ldap.c:562 +#: plugins/sudoers/ldap.c:917 plugins/sudoers/ldap.c:1064 +#: plugins/sudoers/ldap.c:1384 plugins/sudoers/ldap.c:1542 +#: plugins/sudoers/ldap.c:1620 plugins/sudoers/ldap.c:1756 +#: plugins/sudoers/ldap.c:1780 plugins/sudoers/ldap.c:1810 +#: plugins/sudoers/ldap.c:1863 plugins/sudoers/ldap.c:1878 +#: plugins/sudoers/ldap.c:1974 plugins/sudoers/ldap.c:2007 +#: plugins/sudoers/ldap.c:2160 plugins/sudoers/ldap.c:2257 +#: plugins/sudoers/ldap.c:3063 plugins/sudoers/ldap.c:3096 +#: plugins/sudoers/ldap.c:3407 plugins/sudoers/ldap.c:3435 +#: plugins/sudoers/ldap.c:3451 plugins/sudoers/ldap.c:3540 +#: plugins/sudoers/ldap.c:3556 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:666 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:508 +#: plugins/sudoers/match.c:544 plugins/sudoers/match.c:742 +#: plugins/sudoers/match.c:799 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:393 +#: plugins/sudoers/policy.c:602 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/sssd.c:160 plugins/sudoers/sssd.c:192 +#: plugins/sudoers/sssd.c:235 plugins/sudoers/sssd.c:242 +#: plugins/sudoers/sssd.c:278 plugins/sudoers/sssd.c:323 +#: plugins/sudoers/sssd.c:920 plugins/sudoers/sssd.c:1053 +#: plugins/sudoers/sudoers.c:159 plugins/sudoers/sudoers.c:294 +#: plugins/sudoers/sudoers.c:304 plugins/sudoers/sudoers.c:312 +#: plugins/sudoers/sudoers.c:365 plugins/sudoers/sudoers.c:663 +#: plugins/sudoers/sudoers.c:749 plugins/sudoers/sudoers.c:793 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:472 +#: plugins/sudoers/sudoreplay.c:668 plugins/sudoers/sudoreplay.c:780 +#: plugins/sudoers/sudoreplay.c:820 plugins/sudoers/sudoreplay.c:829 +#: plugins/sudoers/sudoreplay.c:839 plugins/sudoers/sudoreplay.c:847 +#: plugins/sudoers/sudoreplay.c:851 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1011 plugins/sudoers/testsudoers.c:130 +#: plugins/sudoers/testsudoers.c:188 plugins/sudoers/testsudoers.c:215 +#: plugins/sudoers/testsudoers.c:232 plugins/sudoers/timestamp.c:390 +#: plugins/sudoers/timestamp.c:426 plugins/sudoers/timestamp.c:838 +#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 +#: plugins/sudoers/toke_util.c:147 plugins/sudoers/visudo.c:152 +#: plugins/sudoers/visudo.c:213 plugins/sudoers/visudo.c:298 +#: plugins/sudoers/visudo.c:304 plugins/sudoers/visudo.c:434 +#: plugins/sudoers/visudo.c:980 plugins/sudoers/visudo.c:1024 +#: plugins/sudoers/visudo.c:1120 toke.l:785 toke.l:806 toke.l:816 toke.l:924 +#: toke.l:1082 +msgid "unable to allocate memory" +msgstr "не могу да доделим меморију" + +#: gram.y:471 +msgid "a digest requires a path name" +msgstr "зборник захтева назив путање" + +#: gram.y:1136 gram.y:1143 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/defaults.c:518 +#: plugins/sudoers/defaults.c:722 plugins/sudoers/defaults.c:882 +#: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 +#: plugins/sudoers/editor.c:92 plugins/sudoers/env.c:234 +#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 +#: plugins/sudoers/iolog.c:586 plugins/sudoers/iolog.c:618 +#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:446 +#: plugins/sudoers/ldap.c:477 plugins/sudoers/ldap.c:529 +#: plugins/sudoers/ldap.c:562 plugins/sudoers/ldap.c:917 +#: plugins/sudoers/ldap.c:1064 plugins/sudoers/ldap.c:1384 +#: plugins/sudoers/ldap.c:1542 plugins/sudoers/ldap.c:1620 +#: plugins/sudoers/ldap.c:1756 plugins/sudoers/ldap.c:1780 +#: plugins/sudoers/ldap.c:1810 plugins/sudoers/ldap.c:1863 +#: plugins/sudoers/ldap.c:1878 plugins/sudoers/ldap.c:1974 +#: plugins/sudoers/ldap.c:2007 plugins/sudoers/ldap.c:2160 +#: plugins/sudoers/ldap.c:2257 plugins/sudoers/ldap.c:3063 +#: plugins/sudoers/ldap.c:3096 plugins/sudoers/ldap.c:3407 +#: plugins/sudoers/ldap.c:3434 plugins/sudoers/ldap.c:3450 +#: plugins/sudoers/ldap.c:3540 plugins/sudoers/ldap.c:3556 +#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:508 +#: plugins/sudoers/match.c:544 plugins/sudoers/match.c:742 +#: plugins/sudoers/match.c:799 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:97 +#: plugins/sudoers/policy.c:106 plugins/sudoers/policy.c:115 +#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:250 +#: plugins/sudoers/policy.c:277 plugins/sudoers/policy.c:286 +#: plugins/sudoers/policy.c:325 plugins/sudoers/policy.c:335 +#: plugins/sudoers/policy.c:344 plugins/sudoers/policy.c:393 +#: plugins/sudoers/policy.c:602 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:160 +#: plugins/sudoers/sssd.c:192 plugins/sudoers/sssd.c:235 +#: plugins/sudoers/sssd.c:242 plugins/sudoers/sssd.c:278 +#: plugins/sudoers/sssd.c:323 plugins/sudoers/sssd.c:920 +#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sudoers.c:159 +#: plugins/sudoers/sudoers.c:294 plugins/sudoers/sudoers.c:304 +#: plugins/sudoers/sudoers.c:312 plugins/sudoers/sudoers.c:365 +#: plugins/sudoers/sudoers.c:663 plugins/sudoers/sudoers.c:749 +#: plugins/sudoers/sudoers.c:793 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sudoreplay.c:472 plugins/sudoers/sudoreplay.c:668 +#: plugins/sudoers/sudoreplay.c:780 plugins/sudoers/sudoreplay.c:820 +#: plugins/sudoers/sudoreplay.c:829 plugins/sudoers/sudoreplay.c:839 +#: plugins/sudoers/sudoreplay.c:847 plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:1007 plugins/sudoers/sudoreplay.c:1011 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:188 +#: plugins/sudoers/testsudoers.c:215 plugins/sudoers/testsudoers.c:232 +#: plugins/sudoers/timestamp.c:390 plugins/sudoers/timestamp.c:426 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:147 +#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:213 +#: plugins/sudoers/visudo.c:298 plugins/sudoers/visudo.c:304 +#: plugins/sudoers/visudo.c:434 plugins/sudoers/visudo.c:980 +#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1120 toke.l:785 +#: toke.l:806 toke.l:816 toke.l:924 toke.l:1082 +#, c-format +msgid "%s: %s" +msgstr "%s: %s" + +#: plugins/sudoers/alias.c:132 #, c-format msgid "Alias `%s' already defined" msgstr "Псеудоним „%s“ је већ одређен" -#: plugins/sudoers/auth/bsdauth.c:75 +#: plugins/sudoers/auth/bsdauth.c:68 #, c-format msgid "unable to get login class for user %s" msgstr "не могу да добавим разред пријаве за корисника „%s“" -#: plugins/sudoers/auth/bsdauth.c:80 +#: plugins/sudoers/auth/bsdauth.c:73 msgid "unable to begin bsd authentication" msgstr "не могу да почнем бсд потврђивање идентитета" -#: plugins/sudoers/auth/bsdauth.c:88 +#: plugins/sudoers/auth/bsdauth.c:81 msgid "invalid authentication type" msgstr "неисправна врста потврђивање идентитета" -#: plugins/sudoers/auth/bsdauth.c:97 +#: plugins/sudoers/auth/bsdauth.c:90 msgid "unable to initialize BSD authentication" msgstr "не могу да покренем БСД потврђивање идентитета" -#: plugins/sudoers/auth/fwtk.c:59 +#: plugins/sudoers/auth/fwtk.c:52 msgid "unable to read fwtk config" msgstr "не могу да читам „fwtk“ подешавања" -#: plugins/sudoers/auth/fwtk.c:64 +#: plugins/sudoers/auth/fwtk.c:57 msgid "unable to connect to authentication server" msgstr "не могу да се повежем на сервер потврђивања идентитета" -#: plugins/sudoers/auth/fwtk.c:70 plugins/sudoers/auth/fwtk.c:94 -#: plugins/sudoers/auth/fwtk.c:127 +#: plugins/sudoers/auth/fwtk.c:63 plugins/sudoers/auth/fwtk.c:87 +#: plugins/sudoers/auth/fwtk.c:121 msgid "lost connection to authentication server" msgstr "изгубио сам везу са сервером потврђивања идентитета" -#: plugins/sudoers/auth/fwtk.c:74 +#: plugins/sudoers/auth/fwtk.c:67 #, c-format msgid "" "authentication server error:\n" @@ -71,151 +213,155 @@ "грешка сервера потврђивања идентитета:\n" "%s" -#: plugins/sudoers/auth/kerb5.c:116 +#: plugins/sudoers/auth/kerb5.c:111 #, c-format msgid "%s: unable to convert principal to string ('%s'): %s" msgstr "%s: не могу да претворим главника у ниску („%s“): %s" -#: plugins/sudoers/auth/kerb5.c:158 +#: plugins/sudoers/auth/kerb5.c:161 #, c-format msgid "%s: unable to parse '%s': %s" msgstr "%s: не могу да обрадим „%s“: %s" -#: plugins/sudoers/auth/kerb5.c:167 +#: plugins/sudoers/auth/kerb5.c:170 #, c-format msgid "%s: unable to resolve credential cache: %s" msgstr "%s: не могу да решим оставу пуномоћства: %s" -#: plugins/sudoers/auth/kerb5.c:214 +#: plugins/sudoers/auth/kerb5.c:217 #, c-format msgid "%s: unable to allocate options: %s" msgstr "%s: не могу да доделим опције: %s" -#: plugins/sudoers/auth/kerb5.c:229 +#: plugins/sudoers/auth/kerb5.c:232 #, c-format msgid "%s: unable to get credentials: %s" msgstr "%s: не могу да добавим пуномоћства: %s" -#: plugins/sudoers/auth/kerb5.c:242 +#: plugins/sudoers/auth/kerb5.c:245 #, c-format msgid "%s: unable to initialize credential cache: %s" msgstr "%s: не могу да покренем оставу пуномоћства: %s" -#: plugins/sudoers/auth/kerb5.c:245 +#: plugins/sudoers/auth/kerb5.c:248 #, c-format msgid "%s: unable to store credential in cache: %s" msgstr "%s: не могу да сместим пуномоћства у оставу: %s" -#: plugins/sudoers/auth/kerb5.c:309 +#: plugins/sudoers/auth/kerb5.c:312 #, c-format msgid "%s: unable to get host principal: %s" msgstr "%s: не могу да добавим главника домаћина: %s" -#: plugins/sudoers/auth/kerb5.c:323 +#: plugins/sudoers/auth/kerb5.c:326 #, c-format msgid "%s: Cannot verify TGT! Possible attack!: %s" msgstr "%s: Не могу потврдити ТГТ! Могући напад!: %s" -#: plugins/sudoers/auth/pam.c:98 +#: plugins/sudoers/auth/pam.c:92 msgid "unable to initialize PAM" msgstr "не могу да покренем ПАМ" -#: plugins/sudoers/auth/pam.c:149 +#: plugins/sudoers/auth/pam.c:164 msgid "account validation failure, is your account locked?" msgstr "неуспех провере налога, да ли је ваш налог закључан?" -#: plugins/sudoers/auth/pam.c:153 +#: plugins/sudoers/auth/pam.c:168 msgid "Account or password is expired, reset your password and try again" msgstr "Налог или лозинка је истекла, поново поставите лозинку и покушајте поново" -#: plugins/sudoers/auth/pam.c:161 +#: plugins/sudoers/auth/pam.c:176 #, c-format msgid "unable to change expired password: %s" msgstr "не могу да изменим истеклу лозинку: %s" -#: plugins/sudoers/auth/pam.c:166 +#: plugins/sudoers/auth/pam.c:181 msgid "Password expired, contact your system administrator" msgstr "Лозинка је истекла, обратите се администратору система" -#: plugins/sudoers/auth/pam.c:170 +#: plugins/sudoers/auth/pam.c:185 msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator" msgstr "Налог је истекао или ПАМ подешавањима недостаје одељак „налог“ за судо, обратите се администратору система" -#: plugins/sudoers/auth/pam.c:187 +#: plugins/sudoers/auth/pam.c:199 #, c-format msgid "PAM authentication error: %s" msgstr "Грешка ПАМ потврђивања идентитета: %s" -#: plugins/sudoers/auth/rfc1938.c:103 plugins/sudoers/visudo.c:222 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:218 #, c-format msgid "you do not exist in the %s database" msgstr "ви не постојите у бази подтака „%s“" -#: plugins/sudoers/auth/securid5.c:80 +#: plugins/sudoers/auth/securid5.c:73 msgid "failed to initialise the ACE API library" msgstr "нисам успео да покренем АЦЕ АПИ библиотеку" -#: plugins/sudoers/auth/securid5.c:106 +#: plugins/sudoers/auth/securid5.c:99 msgid "unable to contact the SecurID server" msgstr "не могу да ступим у везу са сервером безбеднног ИБ-а" -#: plugins/sudoers/auth/securid5.c:115 +#: plugins/sudoers/auth/securid5.c:108 msgid "User ID locked for SecurID Authentication" msgstr "ИБ корисника је закључан за потврђивање идентитета безбедног ИБ-а" -#: plugins/sudoers/auth/securid5.c:119 plugins/sudoers/auth/securid5.c:170 +#: plugins/sudoers/auth/securid5.c:112 plugins/sudoers/auth/securid5.c:163 msgid "invalid username length for SecurID" msgstr "неисправна дужина корисничког имена за безбедни ИБ" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:175 +#: plugins/sudoers/auth/securid5.c:116 plugins/sudoers/auth/securid5.c:168 msgid "invalid Authentication Handle for SecurID" msgstr "неисправна ручка потврђивања идентитета за безбедни ИБ" -#: plugins/sudoers/auth/securid5.c:127 +#: plugins/sudoers/auth/securid5.c:120 msgid "SecurID communication failed" msgstr "Није успело комуницирање безбедног ИБ-а" -#: plugins/sudoers/auth/securid5.c:131 plugins/sudoers/auth/securid5.c:214 +#: plugins/sudoers/auth/securid5.c:124 plugins/sudoers/auth/securid5.c:211 msgid "unknown SecurID error" msgstr "непозната грешка безбедног ИБ-а" -#: plugins/sudoers/auth/securid5.c:165 +#: plugins/sudoers/auth/securid5.c:158 msgid "invalid passcode length for SecurID" msgstr "неисправна дужина пропусне шифре за безбедни ИБ" -#: plugins/sudoers/auth/sia.c:105 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:125 msgid "unable to initialize SIA session" msgstr "не могу да покренем СИА сесију" -#: plugins/sudoers/auth/sudo_auth.c:117 +#: plugins/sudoers/auth/sudo_auth.c:126 msgid "invalid authentication methods" msgstr "неисправни начини потврђивања идентитета" -#: plugins/sudoers/auth/sudo_auth.c:119 +#: plugins/sudoers/auth/sudo_auth.c:128 msgid "Invalid authentication methods compiled into sudo! You may not mix standalone and non-standalone authentication." msgstr "Неисправни начини потврђивања идентитета су преведени у судоу! Не можете мешати самостално и несамостално потврђивање идентитета." -#: plugins/sudoers/auth/sudo_auth.c:188 +#: plugins/sudoers/auth/sudo_auth.c:224 plugins/sudoers/auth/sudo_auth.c:274 msgid "no authentication methods" msgstr "нема начина потврђивања идентитета" -#: plugins/sudoers/auth/sudo_auth.c:190 +#: plugins/sudoers/auth/sudo_auth.c:226 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:360 +#: plugins/sudoers/auth/sudo_auth.c:276 +msgid "Unable to initialize authentication methods." +msgstr "Не могу да покренем методе потврђивања идентитета." + +#: plugins/sudoers/auth/sudo_auth.c:442 msgid "Authentication methods:" msgstr "Начини потврђивања идентитета:" -#: plugins/sudoers/bsm_audit.c:100 plugins/sudoers/bsm_audit.c:189 +#: plugins/sudoers/bsm_audit.c:111 plugins/sudoers/bsm_audit.c:200 msgid "Could not determine audit condition" msgstr "Не могу да утврдим услов прегледа" -#: plugins/sudoers/bsm_audit.c:161 plugins/sudoers/bsm_audit.c:249 +#: plugins/sudoers/bsm_audit.c:172 plugins/sudoers/bsm_audit.c:260 msgid "unable to commit audit record" msgstr "не могу да предам снимак прегледа" -#: plugins/sudoers/check.c:197 +#: plugins/sudoers/check.c:252 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -235,15 +381,15 @@ " #3) Са великом моћи долази и велика одговорност.\n" "\n" -#: plugins/sudoers/check.c:240 plugins/sudoers/check.c:250 -#: plugins/sudoers/sudoers.c:599 plugins/sudoers/sudoers.c:628 +#: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 +#: plugins/sudoers/sudoers.c:699 plugins/sudoers/sudoers.c:728 #, c-format msgid "unknown uid: %u" msgstr "непознат јиб: %u" -#: plugins/sudoers/check.c:245 plugins/sudoers/policy.c:671 -#: plugins/sudoers/sudoers.c:918 plugins/sudoers/testsudoers.c:211 -#: plugins/sudoers/testsudoers.c:363 +#: plugins/sudoers/check.c:300 plugins/sudoers/policy.c:774 +#: plugins/sudoers/sudoers.c:1095 plugins/sudoers/testsudoers.c:206 +#: plugins/sudoers/testsudoers.c:361 #, c-format msgid "unknown user: %s" msgstr "непознат корисник: %s" @@ -292,535 +438,550 @@ msgstr "Пошаљи поруку ако кориснику није дозвољено да покрене наредбу" #: plugins/sudoers/def_data.c:67 +msgid "Send mail if the user tries to run a command" +msgstr "Пошаљи поруку ако корисник покуша да покрене наредбу" + +#: plugins/sudoers/def_data.c:71 msgid "Use a separate timestamp for each user/tty combo" msgstr "Користи одвојене временске ознаке за сваку комбинацију корисник/конзола" -#: plugins/sudoers/def_data.c:71 +#: plugins/sudoers/def_data.c:75 msgid "Lecture user the first time they run sudo" msgstr "Подучава корисника када први пут покрену судо" -#: plugins/sudoers/def_data.c:75 +#: plugins/sudoers/def_data.c:79 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Датотека садржи судо обучавања: %s" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:83 msgid "Require users to authenticate by default" msgstr "Захтева да корисници потврде идентитет по основи" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:87 msgid "Root may run sudo" msgstr "Администратор може да покрене судо" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:91 msgid "Log the hostname in the (non-syslog) log file" msgstr "Бележи назив домаћина у (не-сисдневник) датотеци дневника" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:95 msgid "Log the year in the (non-syslog) log file" msgstr "Бележи годину у (не-сисдневник) датотеци дневника" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:99 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Ако је судо призван без аргумената, покреће шкољку" -#: plugins/sudoers/def_data.c:99 +#: plugins/sudoers/def_data.c:103 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Подешава $HOME на крајњег корисника када покреће шкољку са „-s“" -#: plugins/sudoers/def_data.c:103 +#: plugins/sudoers/def_data.c:107 msgid "Always set $HOME to the target user's home directory" msgstr "Увек подешава $HOME на циљни лични директоријум корисника" -#: plugins/sudoers/def_data.c:107 +#: plugins/sudoers/def_data.c:111 msgid "Allow some information gathering to give useful error messages" msgstr "Дозвољава прикупљање неких података да би дао корисне поруке грешака" -#: plugins/sudoers/def_data.c:111 +#: plugins/sudoers/def_data.c:115 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Захтева потпуно одређене називе домаћина у датотеци судоерса" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:119 msgid "Insult the user when they enter an incorrect password" msgstr "Вређа корисника када унесе нетачну лозинку" -#: plugins/sudoers/def_data.c:119 +#: plugins/sudoers/def_data.c:123 msgid "Only allow the user to run sudo if they have a tty" msgstr "Дозвољава кориснику да покрене судо само ако има конзолу" -#: plugins/sudoers/def_data.c:123 +#: plugins/sudoers/def_data.c:127 msgid "Visudo will honor the EDITOR environment variable" msgstr "Висудо ће поштовати променљиву окружења УРЕЂИВАЧА" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:131 msgid "Prompt for root's password, not the users's" msgstr "Тражи администраторову лозинку, а не корисника" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:135 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Тражи корисникову лозинку покреникао_основни, а не корисника" -#: plugins/sudoers/def_data.c:135 +#: plugins/sudoers/def_data.c:139 msgid "Prompt for the target user's password, not the users's" msgstr "Тражи корисникову лозинку мете, а не корисника" -#: plugins/sudoers/def_data.c:139 +#: plugins/sudoers/def_data.c:143 msgid "Apply defaults in the target user's login class if there is one" msgstr "Примењује основности у циљни кориснички разред пријављивања ако постоји" -#: plugins/sudoers/def_data.c:143 +#: plugins/sudoers/def_data.c:147 msgid "Set the LOGNAME and USER environment variables" msgstr "Подешава променљиве окружења НАЗИВДНЕВНИКА и КОРИСНИК" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:151 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Подешава само ефективни јиб на крајњег корисника, а не стваран јиб" -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:155 msgid "Don't initialize the group vector to that of the target user" msgstr "Не покреће вектор групе ка оном крајњег корисника" -#: plugins/sudoers/def_data.c:155 +#: plugins/sudoers/def_data.c:159 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Дужина за преламање редова у датотеци дневника (0 — без преламања): %u" -#: plugins/sudoers/def_data.c:159 +#: plugins/sudoers/def_data.c:163 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Време истека временске ознаке потврђивања идентитета: %.1f минута" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:167 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Време истека упита лозинке: %.1f минута" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:171 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Број покушаја за уношење лозинке: %u" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:175 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "Умаска за коришћење или 0777 за коришћење корисника: 0%o" -#: plugins/sudoers/def_data.c:175 +#: plugins/sudoers/def_data.c:179 #, c-format msgid "Path to log file: %s" msgstr "Путања до датотеке дневника: %s" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:183 #, c-format msgid "Path to mail program: %s" msgstr "Путања до програма поште: %s" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:187 #, c-format msgid "Flags for mail program: %s" msgstr "Опције за програм поште: %s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:191 #, c-format msgid "Address to send mail to: %s" msgstr "Адреса на коју послати поруку: %s" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:195 #, c-format msgid "Address to send mail from: %s" msgstr "Адреса са које послати поруку: %s" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:199 #, c-format msgid "Subject line for mail messages: %s" msgstr "Ред теме за поруке поште: %s" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:203 #, c-format msgid "Incorrect password message: %s" msgstr "Порука нетачне лозинке: %s" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:207 #, c-format msgid "Path to lecture status dir: %s" msgstr "Путања до директоријума стања обучавања: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:211 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Путања до директоријума временске ознаке потврђивања идентитета: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:215 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Власник директоријума временске ознаке потврђивања идентитета: %s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:219 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Корисницима у овој групи се не захтева лозинка и ПУТАЊА: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:223 #, c-format msgid "Default password prompt: %s" msgstr "Основни упит лозинке: %s" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:227 msgid "If set, passprompt will override system prompt in all cases." msgstr "Ако је подешено, упит лозинке ће преписати системски упит у свим случајевима." -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:231 #, c-format msgid "Default user to run commands as: %s" msgstr "Основни корисник за покретање наредби као: %s" -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:235 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Вредност за преписивање корисничке $ПУТАЊЕ са: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:239 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Путања до уређивача кога ће да користи висудо: %s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:243 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Када да затражи лозинку за псеудонаредбу „list“: %s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:247 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Када да затражи лозинку за псеудонаредбу „verify“: %s" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:251 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Унапред учитава лажне функције извршавања које се налазе у библиотеци „sudo_noexec“" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:255 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Ако је ЛДАП директоријум изнет, да ли занемарујемо месну датотеку судоерса" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:259 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Описници датотека >= %d ће бити затворени пре извршавања наредбе" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:263 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "Ако је подешено, корисници могу да препишу вредност „closefrom“ са опцијом „-C“" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:267 msgid "Allow users to set arbitrary environment variables" msgstr "Дозвољава корисницима да подесе произвољне променљиве окружења" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:271 msgid "Reset the environment to a default set of variables" msgstr "Враћа окружење на основни скуп променљивих" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to check for sanity:" msgstr "Променљиве окружења за проверу исправности:" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to remove:" msgstr "Променљиве окружења за уклањање:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:283 msgid "Environment variables to preserve:" msgstr "Променљиве окружења за очување:" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:287 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "СЕЛинукс улога за употребу у новом контексту безбедности: %s" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:291 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "СЕЛинукс врста за употребу у новом контексту безбедности: %s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:295 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Путања до судо-посебне датотеке окружења: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:299 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Језк за коришћење при обради судоерса: %s" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:303 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Дозвољава да судо тражи лозинку чак и ако би била видљива" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:307 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Обезбеђује видну повратну поруку при тражењу лозинке када постоји унос корисника" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:311 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Користи брже упоређивање које је мање тачно али не приступа систему датотека" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:315 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "Умаска наведена у судоерсима ће преписати корисникову, чак и ако има већа овлашћења" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:319 msgid "Log user's input for the command being run" msgstr "Бележи корисников улаз за покренуту наредбу" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:323 msgid "Log the output of the command being run" msgstr "Бележи излаз покренуте наредбе" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:327 msgid "Compress I/O logs using zlib" msgstr "Пакује У/И дневнике користећи злиб" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:331 msgid "Always run commands in a pseudo-tty" msgstr "Увек покреће наредбе у привидној конзоли" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:335 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Прикључак за подршку не-Јуникс групе: %s" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:339 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Директоријум за смештај улазних/излазних дневника: %s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:343 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Датотека за смештај улазно/излазног дневника: %s" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:347 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Додаје унос у датотеку „utmp/utmpx“ када додељује „pty“" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:351 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Подешава корисника у „utmp“-у на корисника покрени-као, не призивајући корисника" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:355 msgid "Set of permitted privileges" msgstr "Скуп допуштених повластица" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:359 msgid "Set of limit privileges" msgstr "Скуп повластица ограничења" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:363 msgid "Run commands on a pty in the background" msgstr "Покреће наредбе у позадини на назовитерминалу" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:367 msgid "PAM service name to use" msgstr "Назив ПАМ услуге за коришћење" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:371 msgid "PAM service name to use for login shells" msgstr "Назив ПАМ услуге за шкољке пријављивања" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:375 msgid "Attempt to establish PAM credentials for the target user" msgstr "Покушава да успостави ПАМ пуномоћства за циљног корисника" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:379 msgid "Create a new PAM session for the command to run in" msgstr "Прави нову ПАМ сесију за покретање наредбе" -#: plugins/sudoers/def_data.c:379 +#: plugins/sudoers/def_data.c:383 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Највећи број низа У/И дневника: %u" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:387 msgid "Enable sudoers netgroup support" msgstr "Укључује подршку нетгрупе судоерса" -#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:601 -#: plugins/sudoers/visudo_json.c:642 plugins/sudoers/visudo_json.c:677 +#: plugins/sudoers/def_data.c:391 +msgid "Check parent directories for writability when editing files with sudoedit" +msgstr "Проверава родитељски директоријум за уписивошћу када уређује датотеке са „sudoedit“" + +#: plugins/sudoers/def_data.c:395 +msgid "Follow symbolic links when editing files with sudoedit" +msgstr "Прати симболичке везе када уређује датотеке са „sudoedit“" + +#: plugins/sudoers/def_data.c:399 +msgid "Query the group plugin for unknown system groups" +msgstr "Пропитује прикључак групе за непознатим групама система" + +#: plugins/sudoers/def_data.c:403 +msgid "Match netgroups based on the entire tuple: user, host and domain" +msgstr "Упоређује мрежне групе на основу читавог слога: корисник, домаћин и домен" + +#: plugins/sudoers/defaults.c:199 plugins/sudoers/defaults.c:610 +#: plugins/sudoers/visudo_json.c:633 plugins/sudoers/visudo_json.c:668 #, c-format msgid "unknown defaults entry `%s'" msgstr "непознат унос основности „%s“" -#: plugins/sudoers/defaults.c:218 plugins/sudoers/defaults.c:228 -#: plugins/sudoers/defaults.c:248 plugins/sudoers/defaults.c:261 -#: plugins/sudoers/defaults.c:274 plugins/sudoers/defaults.c:287 -#: plugins/sudoers/defaults.c:300 plugins/sudoers/defaults.c:320 -#: plugins/sudoers/defaults.c:330 +#: plugins/sudoers/defaults.c:207 plugins/sudoers/defaults.c:217 +#: plugins/sudoers/defaults.c:241 plugins/sudoers/defaults.c:256 +#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 +#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 +#: plugins/sudoers/defaults.c:325 #, c-format msgid "value `%s' is invalid for option `%s'" msgstr "вредност „%s“ је неисправна за опцију „%s“" -#: plugins/sudoers/defaults.c:221 plugins/sudoers/defaults.c:231 -#: plugins/sudoers/defaults.c:239 plugins/sudoers/defaults.c:256 -#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 -#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 -#: plugins/sudoers/defaults.c:326 +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:220 +#: plugins/sudoers/defaults.c:228 plugins/sudoers/defaults.c:251 +#: plugins/sudoers/defaults.c:264 plugins/sudoers/defaults.c:277 +#: plugins/sudoers/defaults.c:290 plugins/sudoers/defaults.c:310 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "no value specified for `%s'" msgstr "није наведена вредност за „%s“" -#: plugins/sudoers/defaults.c:244 +#: plugins/sudoers/defaults.c:233 #, c-format msgid "values for `%s' must start with a '/'" msgstr "вредност за „%s“ мора да почиње /" -#: plugins/sudoers/defaults.c:306 +#: plugins/sudoers/defaults.c:301 #, c-format msgid "option `%s' does not take a value" msgstr "опција „%s“ не узима вредност" -#: plugins/sudoers/env.c:274 plugins/sudoers/env.c:281 -#: plugins/sudoers/env.c:384 plugins/sudoers/linux_audit.c:89 -#: plugins/sudoers/logging.c:918 plugins/sudoers/policy.c:468 -#: plugins/sudoers/policy.c:477 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:708 plugins/sudoers/testsudoers.c:241 -#: plugins/sudoers/toke_util.c:174 +#: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 +#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:450 +#: plugins/sudoers/ldap.c:540 plugins/sudoers/ldap.c:1166 +#: plugins/sudoers/ldap.c:1388 plugins/sudoers/ldap.c:1704 +#: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:929 +#: plugins/sudoers/policy.c:511 plugins/sudoers/policy.c:520 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:815 +#: plugins/sudoers/testsudoers.c:236 plugins/sudoers/toke_util.c:162 #, c-format msgid "internal error, %s overflow" msgstr "унутрашња грешка, прекорачење „%s“" -#: plugins/sudoers/env.c:357 +#: plugins/sudoers/env.c:377 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: оштећено стави окружење, дужине не одговарају" -#: plugins/sudoers/env.c:1051 +#: plugins/sudoers/env.c:1083 +msgid "unable to rebuild the environment" +msgstr "не могу поново да изградим окружење" + +#: plugins/sudoers/env.c:1157 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "извините, није вам дозвољено да подесите следеће променљиве окружења: %s" -#: plugins/sudoers/group_plugin.c:94 +#: plugins/sudoers/group_plugin.c:86 #, c-format msgid "%s must be owned by uid %d" msgstr "„%s“ мора бити у власништву јиб-а %d" -#: plugins/sudoers/group_plugin.c:98 +#: plugins/sudoers/group_plugin.c:90 #, c-format msgid "%s must only be writable by owner" msgstr "Само корисник може да пише у „%s“" -#: plugins/sudoers/group_plugin.c:105 plugins/sudoers/sssd.c:252 +#: plugins/sudoers/group_plugin.c:98 plugins/sudoers/sssd.c:331 #, c-format msgid "unable to load %s: %s" msgstr "не могу да учитам %s: %s" -#: plugins/sudoers/group_plugin.c:110 +#: plugins/sudoers/group_plugin.c:104 #, 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:109 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: несагласно веће издање прикључка групе %d, очекивано је %d" -#: plugins/sudoers/interfaces.c:116 +#: plugins/sudoers/interfaces.c:117 msgid "Local IP address and netmask pairs:\n" msgstr "Месна ИП адреса и парови мрежне маске:\n" -#: plugins/sudoers/iolog.c:101 plugins/sudoers/iolog.c:119 -#: plugins/sudoers/timestamp.c:233 +#: plugins/sudoers/iolog.c:92 plugins/sudoers/iolog.c:110 +#: plugins/sudoers/timestamp.c:169 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s постоји али није директоријум (0%o)" -#: plugins/sudoers/iolog.c:112 plugins/sudoers/iolog.c:133 -#: plugins/sudoers/iolog.c:140 plugins/sudoers/timestamp.c:227 -#: plugins/sudoers/timestamp.c:248 +#: plugins/sudoers/iolog.c:103 plugins/sudoers/iolog.c:124 +#: plugins/sudoers/iolog.c:131 plugins/sudoers/timestamp.c:163 +#: plugins/sudoers/timestamp.c:184 #, c-format msgid "unable to mkdir %s" msgstr "не могу да направим директоријум „%s“" -#: plugins/sudoers/iolog.c:209 plugins/sudoers/sudoers.c:764 -#: plugins/sudoers/sudoreplay.c:344 plugins/sudoers/sudoreplay.c:815 -#: plugins/sudoers/sudoreplay.c:1012 plugins/sudoers/timestamp.c:357 -#: plugins/sudoers/visudo.c:826 plugins/sudoers/visudo_json.c:1025 -#: plugins/sudoers/visudo_json.c:1038 +#: plugins/sudoers/iolog.c:200 plugins/sudoers/sudoers.c:871 +#: plugins/sudoers/sudoreplay.c:300 plugins/sudoers/sudoreplay.c:769 +#: plugins/sudoers/sudoreplay.c:973 plugins/sudoers/timestamp.c:399 +#: plugins/sudoers/visudo.c:904 plugins/sudoers/visudo_json.c:1012 +#: plugins/sudoers/visudo_json.c:1025 #, c-format msgid "unable to open %s" msgstr "не могу да отворим „%s“" -#: plugins/sudoers/iolog.c:250 plugins/sudoers/sudoers.c:768 -#: plugins/sudoers/sudoreplay.c:1119 +#: plugins/sudoers/iolog.c:241 plugins/sudoers/sudoers.c:875 +#: plugins/sudoers/sudoreplay.c:1084 #, c-format msgid "unable to read %s" msgstr "не могу да прочитам „%s“" -#: plugins/sudoers/iolog.c:282 plugins/sudoers/sudoreplay.c:584 -#: plugins/sudoers/timestamp.c:186 plugins/sudoers/timestamp.c:189 +#: plugins/sudoers/iolog.c:277 plugins/sudoers/sudoreplay.c:550 +#: plugins/sudoers/timestamp.c:298 plugins/sudoers/timestamp.c:301 #, c-format msgid "unable to write to %s" msgstr "не могу да пишем у „%s“" -#: plugins/sudoers/iolog.c:347 plugins/sudoers/iolog.c:545 +#: plugins/sudoers/iolog.c:342 plugins/sudoers/iolog.c:540 #, c-format msgid "unable to create %s" msgstr "не могу да направим „%s“" -#: plugins/sudoers/ldap.c:406 +#: plugins/sudoers/iolog.c:723 +#, c-format +msgid "%s: internal error, file index %d not open" +msgstr "%s: унутрашња грешка, индекс датотеке %d није отворен" + +#: plugins/sudoers/ldap.c:428 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: прикључник је превелик" -#: plugins/sudoers/ldap.c:431 -msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" -msgstr "sudo_ldap_conf_add_ports: нестаде простора проширујући међумеморију домаћина" - -#: plugins/sudoers/ldap.c:464 +#: plugins/sudoers/ldap.c:488 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "неподржана врста ЛДАП путање: %s" -#: plugins/sudoers/ldap.c:495 +#: plugins/sudoers/ldap.c:515 msgid "unable to mix ldap and ldaps URIs" msgstr "не могу да помешам лдап и лдапс путање" -#: plugins/sudoers/ldap.c:499 plugins/sudoers/ldap.c:532 +#: plugins/sudoers/ldap.c:519 plugins/sudoers/ldap.c:555 msgid "starttls not supported when using ldaps" msgstr "старттлс није подржано када се користи лдапс" -#: plugins/sudoers/ldap.c:517 -msgid "sudo_ldap_parse_uri: out of space building hostbuf" -msgstr "sudo_ldap_parse_uri: нестаде простора изграђујући међумеморију домаћина" - -#: plugins/sudoers/ldap.c:599 +#: plugins/sudoers/ldap.c:626 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "не могу да покренем ССЛ уверење и бп кључа: %s" -#: plugins/sudoers/ldap.c:602 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "морате да подесите „TLS_CERT“ у „%s“ да користите ССЛ" -#: plugins/sudoers/ldap.c:1093 +#: plugins/sudoers/ldap.c:1152 msgid "unable to get GMT time" msgstr "не могу да добавим ГМТ време" -#: plugins/sudoers/ldap.c:1099 +#: plugins/sudoers/ldap.c:1158 msgid "unable to format timestamp" msgstr "не могу да обликујем временску ознаку" -#: plugins/sudoers/ldap.c:1107 -msgid "unable to build time filter" -msgstr "не могу да изградим пропусника времена" - -#: plugins/sudoers/ldap.c:1326 -msgid "sudo_ldap_build_pass1 allocation mismatch" -msgstr "не поклапа се додела „sudo_ldap_build_pass1“" - -#: plugins/sudoers/ldap.c:1469 +#: plugins/sudoers/ldap.c:1853 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:1963 +#: plugins/sudoers/ldap.c:2394 #, c-format msgid "" "\n" @@ -829,7 +990,7 @@ "\n" "ЛДАП улога: %s\n" -#: plugins/sudoers/ldap.c:1965 +#: plugins/sudoers/ldap.c:2396 #, c-format msgid "" "\n" @@ -838,108 +999,108 @@ "\n" "ЛДАП улога: НЕПОЗНАТО\n" -#: plugins/sudoers/ldap.c:2012 +#: plugins/sudoers/ldap.c:2443 #, c-format msgid " Order: %s\n" msgstr " Поредак: %s\n" -#: plugins/sudoers/ldap.c:2020 plugins/sudoers/parse.c:506 -#: plugins/sudoers/sssd.c:1298 +#: plugins/sudoers/ldap.c:2451 plugins/sudoers/parse.c:555 +#: plugins/sudoers/sssd.c:1429 #, c-format msgid " Commands:\n" msgstr " Наредбе:\n" -#: plugins/sudoers/ldap.c:2570 +#: plugins/sudoers/ldap.c:3015 #, c-format msgid "unable to initialize LDAP: %s" msgstr "не могу да покренем ЛДАП: %s" -#: plugins/sudoers/ldap.c:2612 +#: plugins/sudoers/ldap.c:3051 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:2845 +#: plugins/sudoers/ldap.c:3305 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "неисправна особина „sudoOrder“: %s" -#: plugins/sudoers/linux_audit.c:61 +#: plugins/sudoers/linux_audit.c:52 msgid "unable to open audit system" msgstr "не могу да отворим систем прегледа" -#: plugins/sudoers/linux_audit.c:100 +#: plugins/sudoers/linux_audit.c:93 msgid "unable to send audit message" msgstr "не могу да пошаљем поруку прегледа" -#: plugins/sudoers/logging.c:134 +#: plugins/sudoers/logging.c:106 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: plugins/sudoers/logging.c:162 +#: plugins/sudoers/logging.c:134 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s : (наредба је настављена) %s" -#: plugins/sudoers/logging.c:187 +#: plugins/sudoers/logging.c:159 #, c-format msgid "unable to open log file: %s: %s" msgstr "не могу да отворим датотеку дневника: %s: %s" -#: plugins/sudoers/logging.c:190 +#: plugins/sudoers/logging.c:162 #, c-format msgid "unable to lock log file: %s: %s" msgstr "не могу да закључам датотеку дневника: %s: %s" -#: plugins/sudoers/logging.c:242 +#: plugins/sudoers/logging.c:211 msgid "No user or host" msgstr "Нема корисника или домаћина" -#: plugins/sudoers/logging.c:244 +#: plugins/sudoers/logging.c:213 msgid "validation failure" msgstr "неуспех потврђивања" -#: plugins/sudoers/logging.c:251 +#: plugins/sudoers/logging.c:220 msgid "user NOT in sudoers" msgstr "корисник НИЈЕ у судоерсу" -#: plugins/sudoers/logging.c:253 +#: plugins/sudoers/logging.c:222 msgid "user NOT authorized on host" msgstr "корисник НИЈЕ овлашћен на домаћину" -#: plugins/sudoers/logging.c:255 +#: plugins/sudoers/logging.c:224 msgid "command not allowed" msgstr "наредба није допуштена" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:259 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "„%s“ се не налази у датотеци судоерса. О овом инциденту ће бити поднет извештај.\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:262 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "„%s“ нема права да покрене судо над „%s“. О овом инциденту ће бити поднет извештај.\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:266 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "Извините, корисник %s не може покренути судо на %s.\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:269 #, 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:407 -#: plugins/sudoers/sudoers.c:409 plugins/sudoers/sudoers.c:411 -#: plugins/sudoers/sudoers.c:413 plugins/sudoers/sudoers.c:1091 -#: plugins/sudoers/sudoers.c:1092 +#: plugins/sudoers/logging.c:306 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1222 +#: plugins/sudoers/sudoers.c:1224 #, c-format msgid "%s: command not found" msgstr "%s: нема такве наредбе" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:403 +#: plugins/sudoers/logging.c:308 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring `%s' found in '.'\n" @@ -948,15 +1109,15 @@ "занемарујем „%s“ пронађено у „.“\n" "Користите „sudo ./%s“ ако је то „%s“ које желите да покренете." -#: plugins/sudoers/logging.c:353 +#: plugins/sudoers/logging.c:325 msgid "authentication failure" msgstr "потврђивање идентитета није успело" -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:351 msgid "a password is required" msgstr "потребна је лозинка" -#: plugins/sudoers/logging.c:446 plugins/sudoers/logging.c:501 +#: plugins/sudoers/logging.c:422 plugins/sudoers/logging.c:484 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" @@ -964,56 +1125,56 @@ msgstr[1] "%u покушаја нетачне лозинке" msgstr[2] "%u покушаја нетачне лозинке" -#: plugins/sudoers/logging.c:584 +#: plugins/sudoers/logging.c:572 msgid "unable to fork" msgstr "не могу да исцепим" -#: plugins/sudoers/logging.c:592 plugins/sudoers/logging.c:648 +#: plugins/sudoers/logging.c:580 plugins/sudoers/logging.c:640 #, c-format msgid "unable to fork: %m" msgstr "не могу да исцепим: %m" -#: plugins/sudoers/logging.c:638 +#: plugins/sudoers/logging.c:630 #, c-format msgid "unable to open pipe: %m" msgstr "не могу да отворим спојку: %m" -#: plugins/sudoers/logging.c:663 +#: plugins/sudoers/logging.c:655 #, c-format msgid "unable to dup stdin: %m" msgstr "не могу да удвостручим стандардни улаз: %m" -#: plugins/sudoers/logging.c:698 +#: plugins/sudoers/logging.c:693 #, c-format msgid "unable to execute %s: %m" msgstr "не могу да извршим „%s“: %m" -#: plugins/sudoers/match.c:627 +#: plugins/sudoers/match.c:616 #, c-format msgid "unsupported digest type %d for %s" msgstr "неподржана врста прихватања потврђивања иднтитета „%d“ за „%s“" -#: plugins/sudoers/match.c:656 +#: plugins/sudoers/match.c:657 #, c-format msgid "%s: read error" msgstr "%s: грешка читања" -#: plugins/sudoers/match.c:670 +#: plugins/sudoers/match.c:692 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "приказ за %s (%s) није у %s облику" -#: plugins/sudoers/parse.c:116 +#: plugins/sudoers/parse.c:114 #, c-format msgid "parse error in %s near line %d" msgstr "грешка обраде у %s близу реда %d" -#: plugins/sudoers/parse.c:119 +#: plugins/sudoers/parse.c:117 #, c-format msgid "parse error in %s" msgstr "грешка обраде у %s" -#: plugins/sudoers/parse.c:453 +#: plugins/sudoers/parse.c:502 #, c-format msgid "" "\n" @@ -1022,49 +1183,41 @@ "\n" "Унос судоерса:\n" -#: plugins/sudoers/parse.c:454 +#: plugins/sudoers/parse.c:503 #, c-format msgid " RunAsUsers: " msgstr " „Покрени-као“ корисници: " -#: plugins/sudoers/parse.c:468 +#: plugins/sudoers/parse.c:517 #, c-format msgid " RunAsGroups: " msgstr " „Покрени-као“ групе: " -#: plugins/sudoers/parse.c:477 +#: plugins/sudoers/parse.c:526 #, c-format msgid " Options: " msgstr " Опције: " -#: plugins/sudoers/policy.c:109 plugins/sudoers/policy.c:118 -#: plugins/sudoers/policy.c:127 plugins/sudoers/policy.c:151 -#: plugins/sudoers/policy.c:267 plugins/sudoers/policy.c:287 -#: plugins/sudoers/policy.c:296 plugins/sudoers/policy.c:326 -#: plugins/sudoers/policy.c:336 plugins/sudoers/policy.c:345 -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" +#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:253 +msgid "unable to parse network address list" +msgstr "не могу да обрадим списак адреса мреже" -#: plugins/sudoers/policy.c:559 plugins/sudoers/visudo.c:767 +#: plugins/sudoers/policy.c:659 plugins/sudoers/visudo.c:841 #, c-format msgid "unable to execute %s" msgstr "не могу да извршим „%s“" -#: plugins/sudoers/policy.c:689 +#: plugins/sudoers/policy.c:792 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Издање %s прикључка политике судоерса\n" -#: plugins/sudoers/policy.c:691 +#: plugins/sudoers/policy.c:794 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Граматика датотеке судоерса издање %d\n" -#: plugins/sudoers/policy.c:695 +#: plugins/sudoers/policy.c:798 #, c-format msgid "" "\n" @@ -1073,374 +1226,411 @@ "\n" "Путања судоерса: %s\n" -#: plugins/sudoers/policy.c:698 +#: plugins/sudoers/policy.c:801 #, c-format msgid "nsswitch path: %s\n" msgstr "путања нс-прекидача: %s\n" -#: plugins/sudoers/policy.c:700 +#: plugins/sudoers/policy.c:803 #, c-format msgid "ldap.conf path: %s\n" msgstr "путања лдап.подешавања: %s\n" -#: plugins/sudoers/policy.c:701 +#: plugins/sudoers/policy.c:804 #, c-format msgid "ldap.secret path: %s\n" msgstr "путања лдап.тајне: %s\n" -#: plugins/sudoers/pwutil.c:149 +#: plugins/sudoers/policy.c:837 +#, c-format +msgid "unable to register hook of type %d (version %d.%d)" +msgstr "немогу да региструјем прикачку врсте „%d“ (издање %d.%d)" + +#: plugins/sudoers/pwutil.c:158 plugins/sudoers/pwutil.c:176 +#, c-format +msgid "unable to cache uid %u, out of memory" +msgstr "не могу да сместим у оставу јиб „%u“, нема више меморије" + +#: plugins/sudoers/pwutil.c:170 #, c-format msgid "unable to cache uid %u, already exists" msgstr "не могу да сместим у оставу јиб „%u“, већ постоји" -#: plugins/sudoers/pwutil.c:194 +#: plugins/sudoers/pwutil.c:222 plugins/sudoers/pwutil.c:239 +#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:334 +#, c-format +msgid "unable to cache user %s, out of memory" +msgstr "не могу да сместим у оставу корисника „%s“, нема више меморије" + +#: plugins/sudoers/pwutil.c:234 #, c-format msgid "unable to cache user %s, already exists" msgstr "не могу да сместим у оставу корисника „%s“, већ постоји" -#: plugins/sudoers/pwutil.c:400 +#: plugins/sudoers/pwutil.c:474 plugins/sudoers/pwutil.c:492 +#, c-format +msgid "unable to cache gid %u, out of memory" +msgstr "не могу да сместим у оставу гиб „%u“, нема више меморије" + +#: plugins/sudoers/pwutil.c:486 #, c-format msgid "unable to cache gid %u, already exists" msgstr "не могу да сместим у оставу гиб „%u“, већ постоји" -#: plugins/sudoers/pwutil.c:439 +#: plugins/sudoers/pwutil.c:532 plugins/sudoers/pwutil.c:549 +#: plugins/sudoers/pwutil.c:584 plugins/sudoers/pwutil.c:626 +#, c-format +msgid "unable to cache group %s, out of memory" +msgstr "не могу да сместим у оставу групу „%s“, нема више меморије" + +#: plugins/sudoers/pwutil.c:544 #, c-format msgid "unable to cache group %s, already exists" msgstr "не могу да сместим у оставу групу „%s“, већ постоји" -#: plugins/sudoers/pwutil.c:605 plugins/sudoers/pwutil.c:631 +#: plugins/sudoers/pwutil.c:739 plugins/sudoers/pwutil.c:783 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "не могу да сместим у оставу списак групе за „%s“, већ постоји" -#: plugins/sudoers/pwutil.c:627 +#: plugins/sudoers/pwutil.c:745 plugins/sudoers/pwutil.c:788 +#, c-format +msgid "unable to cache group list for %s, out of memory" +msgstr "не могу да сместим у оставу списак групе за „%s“, нема више меморије" + +#: plugins/sudoers/pwutil.c:777 #, c-format msgid "unable to parse groups for %s" msgstr "не могу да обрадим групе за „%s“" -#: plugins/sudoers/set_perms.c:122 plugins/sudoers/set_perms.c:447 -#: plugins/sudoers/set_perms.c:850 plugins/sudoers/set_perms.c:1147 -#: plugins/sudoers/set_perms.c:1439 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 +#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 +#: plugins/sudoers/set_perms.c:1430 msgid "perm stack overflow" msgstr "стално прекорачење спремника" -#: plugins/sudoers/set_perms.c:130 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:1076 -#: plugins/sudoers/set_perms.c:1155 plugins/sudoers/set_perms.c:1372 -#: plugins/sudoers/set_perms.c:1447 plugins/sudoers/set_perms.c:1536 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 +#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 +#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 +#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 +#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 msgid "perm stack underflow" msgstr "стално поткорачење спремника" -#: plugins/sudoers/set_perms.c:189 plugins/sudoers/set_perms.c:502 -#: plugins/sudoers/set_perms.c:1206 plugins/sudoers/set_perms.c:1479 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:493 +#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 msgid "unable to change to root gid" msgstr "не могу да пређем на гиб администратора" -#: plugins/sudoers/set_perms.c:278 plugins/sudoers/set_perms.c:599 -#: plugins/sudoers/set_perms.c:987 plugins/sudoers/set_perms.c:1283 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:590 +#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 msgid "unable to change to runas gid" msgstr "не могу да пређем на гиб покреникао" -#: plugins/sudoers/set_perms.c:283 plugins/sudoers/set_perms.c:604 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:595 +#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 msgid "unable to set runas group vector" msgstr "не могу да подесим вектор „покрени-као група“" -#: plugins/sudoers/set_perms.c:294 plugins/sudoers/set_perms.c:615 -#: plugins/sudoers/set_perms.c:1001 plugins/sudoers/set_perms.c:1297 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:606 +#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 msgid "unable to change to runas uid" msgstr "не могу да пређем на јиб покреникао" -#: plugins/sudoers/set_perms.c:312 plugins/sudoers/set_perms.c:633 -#: plugins/sudoers/set_perms.c:1017 plugins/sudoers/set_perms.c:1313 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:624 +#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 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:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 msgid "too many processes" msgstr "превише процеса" -#: plugins/sudoers/solaris_audit.c:48 +#: plugins/sudoers/solaris_audit.c:51 msgid "unable to get current working directory" msgstr "не могу да добавим тренутни радни директоријум" -#: plugins/sudoers/solaris_audit.c:56 +#: plugins/sudoers/solaris_audit.c:59 #, c-format msgid "truncated audit path user_cmnd: %s" msgstr "корисничка_наредба скраћене путање прегледа: %s" -#: plugins/sudoers/solaris_audit.c:63 +#: plugins/sudoers/solaris_audit.c:66 #, c-format msgid "truncated audit path argv[0]: %s" msgstr "„argv[0]“ скраћене путање прегледа: %s" -#: plugins/sudoers/solaris_audit.c:112 +#: plugins/sudoers/solaris_audit.c:115 msgid "audit_failure message too long" msgstr "порука неуспеха прегледа је предуга" -#: plugins/sudoers/sssd.c:253 +#: plugins/sudoers/sssd.c:333 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "не могу да покренем ССС извор. Да ли је СССД инсталиран на вашем рачунару?" -#: plugins/sudoers/sssd.c:260 plugins/sudoers/sssd.c:268 -#: plugins/sudoers/sssd.c:276 plugins/sudoers/sssd.c:284 -#: plugins/sudoers/sssd.c:292 +#: plugins/sudoers/sssd.c:341 plugins/sudoers/sssd.c:350 +#: plugins/sudoers/sssd.c:359 plugins/sudoers/sssd.c:368 +#: plugins/sudoers/sssd.c:377 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "не могу да нађем симбол „%s“ у „%s“" -#: plugins/sudoers/sudo_nss.c:285 +#: plugins/sudoers/sudo_nss.c:290 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Упоређује уносе основности за „%s“ на %s:\n" -#: plugins/sudoers/sudo_nss.c:298 +#: plugins/sudoers/sudo_nss.c:308 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Покрени-као и Наредбено-посебне основности за „%s“:\n" -#: plugins/sudoers/sudo_nss.c:311 +#: plugins/sudoers/sudo_nss.c:326 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "Корисник „%s“ може да покреће следеће наредбе на %s:\n" -#: plugins/sudoers/sudo_nss.c:320 +#: plugins/sudoers/sudo_nss.c:339 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Корисник „%s“ нема права да покрене судо над „%s“.\n" -#: plugins/sudoers/sudoers.c:160 plugins/sudoers/sudoers.c:201 -#: plugins/sudoers/sudoers.c:726 +#: plugins/sudoers/sudoers.c:172 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/visudo.c:223 plugins/sudoers/visudo.c:567 +msgid "unable to initialize sudoers default values" +msgstr "не могу да покренем основне вредности судоерса" + +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:239 +#: plugins/sudoers/sudoers.c:833 msgid "problem with defaults entries" msgstr "неприлике са основним уносима" -#: plugins/sudoers/sudoers.c:167 +#: plugins/sudoers/sudoers.c:205 msgid "no valid sudoers sources found, quitting" msgstr "нисам пронашао исправне изворе судоерса, прекидам" -#: plugins/sudoers/sudoers.c:233 +#: plugins/sudoers/sudoers.c:275 msgid "sudoers specifies that root is not allowed to sudo" msgstr "судоерси наводе да администратор није дозвољен у судоу" -#: plugins/sudoers/sudoers.c:278 +#: plugins/sudoers/sudoers.c:332 msgid "you are not permitted to use the -C option" msgstr "није вам допуштено да користите опцију „-C“" -#: plugins/sudoers/sudoers.c:336 +#: plugins/sudoers/sudoers.c:396 #, c-format msgid "timestamp owner (%s): No such user" msgstr "власник временске ознаке (%s): нема таквог корисника" -#: plugins/sudoers/sudoers.c:350 +#: plugins/sudoers/sudoers.c:410 msgid "no tty" msgstr "нема конзоле" -#: plugins/sudoers/sudoers.c:351 +#: plugins/sudoers/sudoers.c:411 msgid "sorry, you must have a tty to run sudo" msgstr "извините, морате имати конзолу да покренете судо" -#: plugins/sudoers/sudoers.c:402 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "наредба у текућем директоријуму" -#: plugins/sudoers/sudoers.c:422 +#: plugins/sudoers/sudoers.c:486 msgid "sorry, you are not allowed to preserve the environment" msgstr "извините, није вам дозвољено да сачувате окружење" -#: plugins/sudoers/sudoers.c:674 +#: plugins/sudoers/sudoers.c:778 msgid "command too long" msgstr "наредба је предуга" -#: plugins/sudoers/sudoers.c:779 plugins/sudoers/visudo.c:327 -#: plugins/sudoers/visudo.c:593 +#: plugins/sudoers/sudoers.c:886 plugins/sudoers/visudo.c:427 +#: plugins/sudoers/visudo.c:667 #, c-format msgid "unable to stat %s" msgstr "не могу да добијем податке о „%s“" -#: plugins/sudoers/sudoers.c:783 +#: plugins/sudoers/sudoers.c:890 #, c-format msgid "%s is not a regular file" msgstr "„%s“ није обична датотека" -#: plugins/sudoers/sudoers.c:787 plugins/sudoers/timestamp.c:289 toke.l:945 +#: plugins/sudoers/sudoers.c:894 plugins/sudoers/timestamp.c:225 toke.l:947 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s је у власништву уиб-а %u, а треба бити %u" -#: plugins/sudoers/sudoers.c:791 toke.l:952 +#: plugins/sudoers/sudoers.c:898 toke.l:954 #, c-format msgid "%s is world writable" msgstr "Сви могу да пишу у „%s“" -#: plugins/sudoers/sudoers.c:795 toke.l:957 +#: plugins/sudoers/sudoers.c:902 toke.l:959 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s је у власништву уиб-а %u, а треба бити %u" -#: plugins/sudoers/sudoers.c:826 +#: plugins/sudoers/sudoers.c:933 #, c-format msgid "only root can use `-c %s'" msgstr "само администратор може да користи „-c %s“" -#: plugins/sudoers/sudoers.c:845 +#: plugins/sudoers/sudoers.c:952 #, c-format msgid "unknown login class: %s" msgstr "непознат разред пријављивања: %s" -#: plugins/sudoers/sudoers.c:882 +#: plugins/sudoers/sudoers.c:1031 plugins/sudoers/sudoers.c:1059 #, c-format msgid "unable to resolve host %s" msgstr "не могу да решим домаћина „%s“" -#: plugins/sudoers/sudoers.c:949 plugins/sudoers/testsudoers.c:387 +#: plugins/sudoers/sudoers.c:1126 plugins/sudoers/testsudoers.c:385 #, c-format msgid "unknown group: %s" msgstr "непозната група: %s" -#: plugins/sudoers/sudoreplay.c:276 +#: plugins/sudoers/sudoreplay.c:232 #, c-format msgid "invalid filter option: %s" msgstr "неисправна опција пропусника: %s" -#: plugins/sudoers/sudoreplay.c:289 +#: plugins/sudoers/sudoreplay.c:245 #, c-format msgid "invalid max wait: %s" msgstr "неисправно најдуже чекање: %s" -#: plugins/sudoers/sudoreplay.c:295 +#: plugins/sudoers/sudoreplay.c:251 #, c-format msgid "invalid speed factor: %s" msgstr "неисправан чинилац брзине: %s" -#: plugins/sudoers/sudoreplay.c:298 plugins/sudoers/visudo.c:184 +#: plugins/sudoers/sudoreplay.c:254 plugins/sudoers/visudo.c:180 #, c-format msgid "%s version %s\n" msgstr "%s издање %s\n" -#: plugins/sudoers/sudoreplay.c:330 +#: plugins/sudoers/sudoreplay.c:286 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/временисање: %s" -#: plugins/sudoers/sudoreplay.c:336 +#: plugins/sudoers/sudoreplay.c:292 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/временисање: %s" -#: plugins/sudoers/sudoreplay.c:352 +#: plugins/sudoers/sudoreplay.c:308 #, c-format msgid "Replaying sudo session: %s\n" msgstr "Понављам сесију судоа: %s\n" -#: plugins/sudoers/sudoreplay.c:358 +#: plugins/sudoers/sudoreplay.c:314 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Упозорење: ваш терминал је премали да би исправно приказао дневник.\n" -#: plugins/sudoers/sudoreplay.c:359 +#: plugins/sudoers/sudoreplay.c:315 #, 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:414 +#: plugins/sudoers/sudoreplay.c:368 msgid "unable to set tty to raw mode" msgstr "не могу да подесим конзолу на сирови режим" -#: plugins/sudoers/sudoreplay.c:445 +#: plugins/sudoers/sudoreplay.c:401 #, c-format msgid "invalid timing file line: %s" msgstr "неисправан ред датотеке временисања: %s" -#: plugins/sudoers/sudoreplay.c:651 plugins/sudoers/sudoreplay.c:676 +#: plugins/sudoers/sudoreplay.c:611 plugins/sudoers/sudoreplay.c:636 #, c-format msgid "ambiguous expression \"%s\"" msgstr "нејасан израз „%s“" -#: plugins/sudoers/sudoreplay.c:698 +#: plugins/sudoers/sudoreplay.c:658 msgid "unmatched ')' in expression" msgstr "непоклопљена ) у изразу" -#: plugins/sudoers/sudoreplay.c:702 +#: plugins/sudoers/sudoreplay.c:662 #, c-format msgid "unknown search term \"%s\"" msgstr "непознат појам претраге „%s“" -#: plugins/sudoers/sudoreplay.c:716 +#: plugins/sudoers/sudoreplay.c:677 #, c-format msgid "%s requires an argument" msgstr "„%s“ захтева аргумент" -#: plugins/sudoers/sudoreplay.c:720 plugins/sudoers/sudoreplay.c:1092 +#: plugins/sudoers/sudoreplay.c:680 plugins/sudoers/sudoreplay.c:1060 #, c-format msgid "invalid regular expression: %s" msgstr "неисправан регуларан израз: %s" -#: plugins/sudoers/sudoreplay.c:726 +#: plugins/sudoers/sudoreplay.c:684 #, c-format msgid "could not parse date \"%s\"" msgstr "не могу да обрадим датум „%s“" -#: plugins/sudoers/sudoreplay.c:735 +#: plugins/sudoers/sudoreplay.c:693 msgid "unmatched '(' in expression" msgstr "непоклопљена ( у изразу" -#: plugins/sudoers/sudoreplay.c:737 +#: plugins/sudoers/sudoreplay.c:695 msgid "illegal trailing \"or\"" msgstr "недозвољено пратеће „или“" -#: plugins/sudoers/sudoreplay.c:739 +#: plugins/sudoers/sudoreplay.c:697 msgid "illegal trailing \"!\"" msgstr "недозвољени пратећи „!“" -#: plugins/sudoers/sudoreplay.c:792 +#: plugins/sudoers/sudoreplay.c:746 #, c-format msgid "unknown search type %d" msgstr "непозната врста претраге „%d“" -#: plugins/sudoers/sudoreplay.c:829 +#: plugins/sudoers/sudoreplay.c:784 #, c-format msgid "%s: invalid log file" msgstr "%s: неисправна датотека дневника" -#: plugins/sudoers/sudoreplay.c:847 +#: plugins/sudoers/sudoreplay.c:802 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: недостаје поље временске ознаке" -#: plugins/sudoers/sudoreplay.c:854 +#: plugins/sudoers/sudoreplay.c:809 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: временска ознака %s: %s" -#: plugins/sudoers/sudoreplay.c:861 +#: plugins/sudoers/sudoreplay.c:816 #, c-format msgid "%s: user field is missing" msgstr "%s: недостаје поље корисника" -#: plugins/sudoers/sudoreplay.c:869 +#: plugins/sudoers/sudoreplay.c:825 #, c-format msgid "%s: runas user field is missing" msgstr "%s: недостаје поље „покрени-као корисник“" -#: plugins/sudoers/sudoreplay.c:877 +#: plugins/sudoers/sudoreplay.c:834 #, c-format msgid "%s: runas group field is missing" msgstr "%s: недостаје поље „покрени-као група“" -#: plugins/sudoers/sudoreplay.c:1232 +#: plugins/sudoers/sudoreplay.c:1197 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "употреба: %s [-h] [-d дир] [-m број] [-s број] ИБ\n" -#: plugins/sudoers/sudoreplay.c:1235 +#: plugins/sudoers/sudoreplay.c:1200 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "употреба: %s [-h] [-d дир] -l [израз претраге]\n" -#: plugins/sudoers/sudoreplay.c:1244 +#: plugins/sudoers/sudoreplay.c:1209 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1449,7 +1639,7 @@ "%s — понавља дневнике сесије судоа\n" "\n" -#: plugins/sudoers/sudoreplay.c:1246 +#: plugins/sudoers/sudoreplay.c:1211 msgid "" "\n" "Options:\n" @@ -1471,11 +1661,11 @@ " -s, --speed=број убрзава или успорава излаз\n" " -V, --version приказује податке о издању и излази" -#: plugins/sudoers/testsudoers.c:326 +#: plugins/sudoers/testsudoers.c:324 msgid "\thost unmatched" msgstr "\tдомаћин није поклопљен" -#: plugins/sudoers/testsudoers.c:329 +#: plugins/sudoers/testsudoers.c:327 msgid "" "\n" "Command allowed" @@ -1483,7 +1673,7 @@ "\n" "Наредба је допуштена" -#: plugins/sudoers/testsudoers.c:330 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command denied" @@ -1491,7 +1681,7 @@ "\n" "Наредба је одбијена" -#: plugins/sudoers/testsudoers.c:330 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command unmatched" @@ -1499,114 +1689,129 @@ "\n" "Наредба није поклопљена" -#: plugins/sudoers/timestamp.c:197 -#, c-format -msgid "unable to truncate time stamp file to %lld bytes" -msgstr "не могу да скратим датотеку временске ознаке на %lld бајта" - -#: plugins/sudoers/timestamp.c:297 +#: plugins/sudoers/timestamp.c:233 #, c-format msgid "%s is group writable" msgstr "Група може да пише у „%s“" -#: plugins/sudoers/timestamp.c:318 +#: plugins/sudoers/timestamp.c:309 #, c-format -msgid "timestamp path too long: %s/%s" -msgstr "путања временске ознаке је предуга: %s/%s" +msgid "unable to truncate time stamp file to %lld bytes" +msgstr "не могу да скратим датотеку временске ознаке на %lld бајта" -#: plugins/sudoers/timestamp.c:498 +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:488 plugins/sudoers/visudo.c:494 +msgid "unable to read the clock" +msgstr "не могу да прочитам сат" + +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "занемарујем временску ознаку из будућности" -#: plugins/sudoers/timestamp.c:510 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "временска ознака је превише у будућности: %20.20s" -#: plugins/sudoers/timestamp.c:613 plugins/sudoers/timestamp.c:634 +#: plugins/sudoers/timestamp.c:863 +#, c-format +msgid "unable to lock time stamp file %s" +msgstr "не могу да закључам датотеку временске ознаке „%s“" + +#: plugins/sudoers/timestamp.c:906 plugins/sudoers/timestamp.c:926 #, c-format msgid "lecture status path too long: %s/%s" msgstr "путања стања обучавања је предуга: %s/%s" -#: plugins/sudoers/visudo.c:186 +#: plugins/sudoers/visudo.c:182 #, c-format msgid "%s grammar version %d\n" msgstr "%s граматика издање %d\n" -#: plugins/sudoers/visudo.c:257 plugins/sudoers/visudo.c:546 +#: plugins/sudoers/visudo.c:254 plugins/sudoers/visudo.c:619 #, c-format msgid "press return to edit %s: " msgstr "притисните „унеси“ да уредите „%s“: " -#: plugins/sudoers/visudo.c:343 plugins/sudoers/visudo.c:349 +#: plugins/sudoers/visudo.c:320 +#, c-format +msgid "specified editor (%s) doesn't exist" +msgstr "наведени уређивач (%s) не постоји" + +#: plugins/sudoers/visudo.c:338 +#, c-format +msgid "no editor found (editor path = %s)" +msgstr "нисам пронашао уређивача (путања уређивача = %s)" + +#: plugins/sudoers/visudo.c:447 plugins/sudoers/visudo.c:455 msgid "write error" msgstr "грешка писања" -#: plugins/sudoers/visudo.c:433 +#: plugins/sudoers/visudo.c:501 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "не могу да добавим податке привремене датотеке (%s), %s је неизмењено" -#: plugins/sudoers/visudo.c:438 +#: plugins/sudoers/visudo.c:508 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "привремена датотека нулте дужине (%s), %s је неизмењено" -#: plugins/sudoers/visudo.c:444 +#: plugins/sudoers/visudo.c:514 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "уређивач (%s) није успео, %s је неизмењено" -#: plugins/sudoers/visudo.c:466 +#: plugins/sudoers/visudo.c:536 #, c-format msgid "%s unchanged" msgstr "„%s“ је неизмењено" -#: plugins/sudoers/visudo.c:491 +#: plugins/sudoers/visudo.c:562 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "не могу поново да отворим привремену датотеку (%s), %s је неизмењено." -#: plugins/sudoers/visudo.c:501 +#: plugins/sudoers/visudo.c:573 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "не могу да обрадим привремену датотеку (%s), непозната грешка" -#: plugins/sudoers/visudo.c:537 +#: plugins/sudoers/visudo.c:610 #, c-format msgid "internal error, unable to find %s in list!" msgstr "унутрашња грешка, не могу да пронађем „%s“ на списку!" -#: plugins/sudoers/visudo.c:595 plugins/sudoers/visudo.c:604 +#: plugins/sudoers/visudo.c:669 plugins/sudoers/visudo.c:678 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "не могу да подесим (јиб, гиб) за %s на (%u, %u)" -#: plugins/sudoers/visudo.c:599 plugins/sudoers/visudo.c:609 +#: plugins/sudoers/visudo.c:673 plugins/sudoers/visudo.c:683 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "не могу да променим режим „%s“ на 0%o" -#: plugins/sudoers/visudo.c:626 +#: plugins/sudoers/visudo.c:700 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "„%s“ и „%s“ нису на истом систему датотека, користим „mv“ за преименовање" -#: plugins/sudoers/visudo.c:640 +#: plugins/sudoers/visudo.c:714 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "наредба није успела: „%s %s %s“, %s је неизмењено" -#: plugins/sudoers/visudo.c:650 +#: plugins/sudoers/visudo.c:724 #, c-format msgid "error renaming %s, %s unchanged" msgstr "грешка преименовања „%s“, %s је неизмењено" -#: plugins/sudoers/visudo.c:712 +#: plugins/sudoers/visudo.c:786 msgid "What now? " msgstr "Шта сада?" -#: plugins/sudoers/visudo.c:726 +#: plugins/sudoers/visudo.c:800 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1618,87 +1823,72 @@ " x — излази без чувања измена у датотеци судоерса\n" " Q — прекида и чува измене у датотеци судоерса (ОПАСНО!)\n" -#: plugins/sudoers/visudo.c:774 +#: plugins/sudoers/visudo.c:848 #, c-format msgid "unable to run %s" msgstr "не могу да покренем %s" -#: plugins/sudoers/visudo.c:800 +#: plugins/sudoers/visudo.c:878 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: погрешан власник (јиб, гиб) треба бити (%u, %u)\n" -#: plugins/sudoers/visudo.c:807 +#: plugins/sudoers/visudo.c:885 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: лоша овлашћења, требају бити у режиму 0%o\n" -#: plugins/sudoers/visudo.c:832 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:910 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "failed to parse %s file, unknown error" msgstr "нисам успео да обрадим %s датотеку, непозната грешка" -#: plugins/sudoers/visudo.c:848 plugins/sudoers/visudo_json.c:1054 +#: plugins/sudoers/visudo.c:926 plugins/sudoers/visudo_json.c:1041 #, c-format msgid "parse error in %s near line %d\n" msgstr "грешка обраде у %s близу реда %d\n" -#: plugins/sudoers/visudo.c:851 plugins/sudoers/visudo_json.c:1057 +#: plugins/sudoers/visudo.c:929 plugins/sudoers/visudo_json.c:1044 #, c-format msgid "parse error in %s\n" msgstr "грешка обраде у %s\n" -#: plugins/sudoers/visudo.c:859 plugins/sudoers/visudo.c:866 +#: plugins/sudoers/visudo.c:937 plugins/sudoers/visudo.c:944 #, c-format msgid "%s: parsed OK\n" msgstr "%s: успешно је обрађено\n" -#: plugins/sudoers/visudo.c:912 +#: plugins/sudoers/visudo.c:991 #, c-format msgid "%s busy, try again later" msgstr "„%s“ је заузет, покушајте касније" -#: plugins/sudoers/visudo.c:956 -#, c-format -msgid "specified editor (%s) doesn't exist" -msgstr "наведени уређивач (%s) не постоји" - -#: plugins/sudoers/visudo.c:979 -#, c-format -msgid "unable to stat editor (%s)" -msgstr "не могу да добавим податке уређивача (%s)" - -#: plugins/sudoers/visudo.c:1027 -#, c-format -msgid "no editor found (editor path = %s)" -msgstr "нисам пронашао уређивача (путања уређивача = %s)" - -#: plugins/sudoers/visudo.c:1130 +#: plugins/sudoers/visudo.c:1087 #, c-format msgid "Error: cycle in %s `%s'" msgstr "Грешка: циклус у „%s“ „%s“" -#: plugins/sudoers/visudo.c:1131 +#: plugins/sudoers/visudo.c:1088 #, c-format msgid "Warning: cycle in %s `%s'" msgstr "Упозорење: циклус у „%s“ „%s“" -#: plugins/sudoers/visudo.c:1135 +#: plugins/sudoers/visudo.c:1092 #, c-format msgid "Error: %s `%s' referenced but not defined" msgstr "Грешка: упута за „%s“ „%s“ постоји али није одређена" -#: plugins/sudoers/visudo.c:1136 +#: plugins/sudoers/visudo.c:1093 #, c-format msgid "Warning: %s `%s' referenced but not defined" msgstr "Упозорење: упута за „%s“ „%s“ постоји али није одређена" -#: plugins/sudoers/visudo.c:1275 +#: plugins/sudoers/visudo.c:1236 #, c-format msgid "Warning: unused %s `%s'" msgstr "Упозорење: некоришћено „%s“ „%s“" -#: plugins/sudoers/visudo.c:1335 +#: plugins/sudoers/visudo.c:1349 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -1707,7 +1897,7 @@ "%s — безбедно уређује датотеку судоерса\n" "\n" -#: plugins/sudoers/visudo.c:1337 +#: plugins/sudoers/visudo.c:1351 msgid "" "\n" "Options:\n" @@ -1729,15 +1919,30 @@ " -V, --version приказује податке о издању и излази\n" " -x, --export=изл._датотека извози судоерсе у ЈСОН запису" -#: plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo_json.c:1018 #, c-format msgid "%s: input and output files must be different" msgstr "%s: улазна датотека треба да се разликује од излазне" -#: toke.l:915 +#: toke.l:918 msgid "too many levels of includes" msgstr "превише нивоа укључивања" +#~ msgid "timestamp path too long: %s/%s" +#~ msgstr "путања временске ознаке је предуга: %s/%s" + +#~ msgid "unable to stat editor (%s)" +#~ msgstr "не могу да добавим податке уређивача (%s)" + +#~ msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" +#~ msgstr "sudo_ldap_conf_add_ports: нестаде простора проширујући међумеморију домаћина" + +#~ msgid "sudo_ldap_parse_uri: out of space building hostbuf" +#~ msgstr "sudo_ldap_parse_uri: нестаде простора изграђујући међумеморију домаћина" + +#~ msgid "sudo_ldap_build_pass1 allocation mismatch" +#~ msgstr "не поклапа се додела „sudo_ldap_build_pass1“" + #~ msgid "internal error: insufficient space for log line" #~ msgstr "унутрашња грешка: недовољно простора за ред дневника" diff -Nru sudo-1.8.12/plugins/sudoers/po/sudoers.pot sudo-1.8.16/plugins/sudoers/po/sudoers.pot --- sudo-1.8.12/plugins/sudoers/po/sudoers.pot 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/po/sudoers.pot 2016-03-17 16:13:11.000000000 +0000 @@ -1,13 +1,13 @@ # Portable object template file for the sudoers plugin # This file is put in the public domain. -# Todd C. Miller , 2011-2014 +# Todd C. Miller , 2011-2015 # #, fuzzy msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.12\n" -"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2015-02-02 13:53-0700\n" +"Project-Id-Version: sudo 1.8.16\n" +"Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" +"POT-Creation-Date: 2016-02-19 15:48-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -41,207 +41,332 @@ msgid "Sorry, try again." msgstr "" -#: gram.y:379 +#: gram.y:183 gram.y:201 gram.y:207 gram.y:213 gram.y:219 gram.y:225 gram.y:241 +#: gram.y:248 gram.y:255 gram.y:262 gram.y:269 gram.y:285 gram.y:308 gram.y:315 +#: gram.y:322 gram.y:329 gram.y:336 gram.y:391 gram.y:399 gram.y:409 gram.y:439 +#: gram.y:446 gram.y:453 gram.y:460 gram.y:572 gram.y:579 gram.y:588 gram.y:597 +#: gram.y:614 gram.y:670 gram.y:677 gram.y:684 gram.y:692 gram.y:784 gram.y:791 +#: gram.y:798 gram.y:805 gram.y:812 gram.y:838 gram.y:845 gram.y:852 +#: gram.y:1136 gram.y:1143 plugins/sudoers/alias.c:123 +#: plugins/sudoers/alias.c:136 plugins/sudoers/auth/bsdauth.c:141 +#: plugins/sudoers/auth/kerb5.c:119 plugins/sudoers/auth/kerb5.c:145 +#: plugins/sudoers/auth/pam.c:398 plugins/sudoers/auth/rfc1938.c:109 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:518 +#: plugins/sudoers/defaults.c:722 plugins/sudoers/defaults.c:882 +#: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 +#: plugins/sudoers/editor.c:92 plugins/sudoers/env.c:234 +#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 +#: plugins/sudoers/iolog.c:586 plugins/sudoers/iolog.c:618 +#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:446 +#: plugins/sudoers/ldap.c:477 plugins/sudoers/ldap.c:529 +#: plugins/sudoers/ldap.c:562 plugins/sudoers/ldap.c:917 +#: plugins/sudoers/ldap.c:1064 plugins/sudoers/ldap.c:1384 +#: plugins/sudoers/ldap.c:1542 plugins/sudoers/ldap.c:1620 +#: plugins/sudoers/ldap.c:1756 plugins/sudoers/ldap.c:1780 +#: plugins/sudoers/ldap.c:1810 plugins/sudoers/ldap.c:1863 +#: plugins/sudoers/ldap.c:1878 plugins/sudoers/ldap.c:1974 +#: plugins/sudoers/ldap.c:2007 plugins/sudoers/ldap.c:2160 +#: plugins/sudoers/ldap.c:2257 plugins/sudoers/ldap.c:3063 +#: plugins/sudoers/ldap.c:3096 plugins/sudoers/ldap.c:3407 +#: plugins/sudoers/ldap.c:3435 plugins/sudoers/ldap.c:3451 +#: plugins/sudoers/ldap.c:3540 plugins/sudoers/ldap.c:3556 +#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 +#: plugins/sudoers/logging.c:666 plugins/sudoers/logging.c:924 +#: plugins/sudoers/match.c:508 plugins/sudoers/match.c:544 +#: plugins/sudoers/match.c:742 plugins/sudoers/match.c:799 +#: plugins/sudoers/parse.c:235 plugins/sudoers/parse.c:247 +#: plugins/sudoers/parse.c:262 plugins/sudoers/parse.c:274 +#: plugins/sudoers/policy.c:393 plugins/sudoers/policy.c:602 +#: plugins/sudoers/prompt.c:93 plugins/sudoers/sssd.c:160 +#: plugins/sudoers/sssd.c:192 plugins/sudoers/sssd.c:235 +#: plugins/sudoers/sssd.c:242 plugins/sudoers/sssd.c:278 +#: plugins/sudoers/sssd.c:323 plugins/sudoers/sssd.c:920 +#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sudoers.c:159 +#: plugins/sudoers/sudoers.c:294 plugins/sudoers/sudoers.c:304 +#: plugins/sudoers/sudoers.c:312 plugins/sudoers/sudoers.c:365 +#: plugins/sudoers/sudoers.c:663 plugins/sudoers/sudoers.c:749 +#: plugins/sudoers/sudoers.c:793 plugins/sudoers/sudoers_debug.c:107 +#: plugins/sudoers/sudoreplay.c:472 plugins/sudoers/sudoreplay.c:668 +#: plugins/sudoers/sudoreplay.c:780 plugins/sudoers/sudoreplay.c:820 +#: plugins/sudoers/sudoreplay.c:829 plugins/sudoers/sudoreplay.c:839 +#: plugins/sudoers/sudoreplay.c:847 plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:1007 plugins/sudoers/sudoreplay.c:1011 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:188 +#: plugins/sudoers/testsudoers.c:215 plugins/sudoers/testsudoers.c:232 +#: plugins/sudoers/timestamp.c:390 plugins/sudoers/timestamp.c:426 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:147 +#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:213 +#: plugins/sudoers/visudo.c:298 plugins/sudoers/visudo.c:304 +#: plugins/sudoers/visudo.c:434 plugins/sudoers/visudo.c:980 +#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1120 toke.l:785 +#: toke.l:806 toke.l:816 toke.l:924 toke.l:1082 +msgid "unable to allocate memory" +msgstr "" + +#: gram.y:471 msgid "a digest requires a path name" msgstr "" -#: plugins/sudoers/alias.c:136 +#: gram.y:1136 gram.y:1143 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/defaults.c:518 +#: plugins/sudoers/defaults.c:722 plugins/sudoers/defaults.c:882 +#: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 +#: plugins/sudoers/editor.c:92 plugins/sudoers/env.c:234 +#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 +#: plugins/sudoers/iolog.c:586 plugins/sudoers/iolog.c:618 +#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:446 +#: plugins/sudoers/ldap.c:477 plugins/sudoers/ldap.c:529 +#: plugins/sudoers/ldap.c:562 plugins/sudoers/ldap.c:917 +#: plugins/sudoers/ldap.c:1064 plugins/sudoers/ldap.c:1384 +#: plugins/sudoers/ldap.c:1542 plugins/sudoers/ldap.c:1620 +#: plugins/sudoers/ldap.c:1756 plugins/sudoers/ldap.c:1780 +#: plugins/sudoers/ldap.c:1810 plugins/sudoers/ldap.c:1863 +#: plugins/sudoers/ldap.c:1878 plugins/sudoers/ldap.c:1974 +#: plugins/sudoers/ldap.c:2007 plugins/sudoers/ldap.c:2160 +#: plugins/sudoers/ldap.c:2257 plugins/sudoers/ldap.c:3063 +#: plugins/sudoers/ldap.c:3096 plugins/sudoers/ldap.c:3407 +#: plugins/sudoers/ldap.c:3434 plugins/sudoers/ldap.c:3450 +#: plugins/sudoers/ldap.c:3540 plugins/sudoers/ldap.c:3556 +#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:508 +#: plugins/sudoers/match.c:544 plugins/sudoers/match.c:742 +#: plugins/sudoers/match.c:799 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:97 +#: plugins/sudoers/policy.c:106 plugins/sudoers/policy.c:115 +#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:250 +#: plugins/sudoers/policy.c:277 plugins/sudoers/policy.c:286 +#: plugins/sudoers/policy.c:325 plugins/sudoers/policy.c:335 +#: plugins/sudoers/policy.c:344 plugins/sudoers/policy.c:393 +#: plugins/sudoers/policy.c:602 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:160 +#: plugins/sudoers/sssd.c:192 plugins/sudoers/sssd.c:235 +#: plugins/sudoers/sssd.c:242 plugins/sudoers/sssd.c:278 +#: plugins/sudoers/sssd.c:323 plugins/sudoers/sssd.c:920 +#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sudoers.c:159 +#: plugins/sudoers/sudoers.c:294 plugins/sudoers/sudoers.c:304 +#: plugins/sudoers/sudoers.c:312 plugins/sudoers/sudoers.c:365 +#: plugins/sudoers/sudoers.c:663 plugins/sudoers/sudoers.c:749 +#: plugins/sudoers/sudoers.c:793 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sudoreplay.c:472 plugins/sudoers/sudoreplay.c:668 +#: plugins/sudoers/sudoreplay.c:780 plugins/sudoers/sudoreplay.c:820 +#: plugins/sudoers/sudoreplay.c:829 plugins/sudoers/sudoreplay.c:839 +#: plugins/sudoers/sudoreplay.c:847 plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:1007 plugins/sudoers/sudoreplay.c:1011 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:188 +#: plugins/sudoers/testsudoers.c:215 plugins/sudoers/testsudoers.c:232 +#: plugins/sudoers/timestamp.c:390 plugins/sudoers/timestamp.c:426 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:147 +#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:213 +#: plugins/sudoers/visudo.c:298 plugins/sudoers/visudo.c:304 +#: plugins/sudoers/visudo.c:434 plugins/sudoers/visudo.c:980 +#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1120 toke.l:785 +#: toke.l:806 toke.l:816 toke.l:924 toke.l:1082 +#, c-format +msgid "%s: %s" +msgstr "" + +#: plugins/sudoers/alias.c:132 #, c-format msgid "Alias `%s' already defined" msgstr "" -#: plugins/sudoers/auth/bsdauth.c:75 +#: plugins/sudoers/auth/bsdauth.c:68 #, c-format msgid "unable to get login class for user %s" msgstr "" -#: plugins/sudoers/auth/bsdauth.c:80 +#: plugins/sudoers/auth/bsdauth.c:73 msgid "unable to begin bsd authentication" msgstr "" -#: plugins/sudoers/auth/bsdauth.c:88 +#: plugins/sudoers/auth/bsdauth.c:81 msgid "invalid authentication type" msgstr "" -#: plugins/sudoers/auth/bsdauth.c:97 +#: plugins/sudoers/auth/bsdauth.c:90 msgid "unable to initialize BSD authentication" msgstr "" -#: plugins/sudoers/auth/fwtk.c:59 +#: plugins/sudoers/auth/fwtk.c:52 msgid "unable to read fwtk config" msgstr "" -#: plugins/sudoers/auth/fwtk.c:64 +#: plugins/sudoers/auth/fwtk.c:57 msgid "unable to connect to authentication server" msgstr "" -#: plugins/sudoers/auth/fwtk.c:70 plugins/sudoers/auth/fwtk.c:94 -#: plugins/sudoers/auth/fwtk.c:127 +#: plugins/sudoers/auth/fwtk.c:63 plugins/sudoers/auth/fwtk.c:87 +#: plugins/sudoers/auth/fwtk.c:121 msgid "lost connection to authentication server" msgstr "" -#: plugins/sudoers/auth/fwtk.c:74 +#: plugins/sudoers/auth/fwtk.c:67 #, c-format msgid "" "authentication server error:\n" "%s" msgstr "" -#: plugins/sudoers/auth/kerb5.c:116 +#: plugins/sudoers/auth/kerb5.c:111 #, c-format msgid "%s: unable to convert principal to string ('%s'): %s" msgstr "" -#: plugins/sudoers/auth/kerb5.c:158 +#: plugins/sudoers/auth/kerb5.c:161 #, c-format msgid "%s: unable to parse '%s': %s" msgstr "" -#: plugins/sudoers/auth/kerb5.c:167 +#: plugins/sudoers/auth/kerb5.c:170 #, c-format msgid "%s: unable to resolve credential cache: %s" msgstr "" -#: plugins/sudoers/auth/kerb5.c:214 +#: plugins/sudoers/auth/kerb5.c:217 #, c-format msgid "%s: unable to allocate options: %s" msgstr "" -#: plugins/sudoers/auth/kerb5.c:229 +#: plugins/sudoers/auth/kerb5.c:232 #, c-format msgid "%s: unable to get credentials: %s" msgstr "" -#: plugins/sudoers/auth/kerb5.c:242 +#: plugins/sudoers/auth/kerb5.c:245 #, c-format msgid "%s: unable to initialize credential cache: %s" msgstr "" -#: plugins/sudoers/auth/kerb5.c:245 +#: plugins/sudoers/auth/kerb5.c:248 #, c-format msgid "%s: unable to store credential in cache: %s" msgstr "" -#: plugins/sudoers/auth/kerb5.c:309 +#: plugins/sudoers/auth/kerb5.c:312 #, c-format msgid "%s: unable to get host principal: %s" msgstr "" -#: plugins/sudoers/auth/kerb5.c:323 +#: plugins/sudoers/auth/kerb5.c:326 #, c-format msgid "%s: Cannot verify TGT! Possible attack!: %s" msgstr "" -#: plugins/sudoers/auth/pam.c:98 +#: plugins/sudoers/auth/pam.c:92 msgid "unable to initialize PAM" msgstr "" -#: plugins/sudoers/auth/pam.c:149 +#: plugins/sudoers/auth/pam.c:164 msgid "account validation failure, is your account locked?" msgstr "" -#: plugins/sudoers/auth/pam.c:153 +#: plugins/sudoers/auth/pam.c:168 msgid "Account or password is expired, reset your password and try again" msgstr "" -#: plugins/sudoers/auth/pam.c:161 +#: plugins/sudoers/auth/pam.c:176 #, c-format msgid "unable to change expired password: %s" msgstr "" -#: plugins/sudoers/auth/pam.c:166 +#: plugins/sudoers/auth/pam.c:181 msgid "Password expired, contact your system administrator" msgstr "" -#: plugins/sudoers/auth/pam.c:170 +#: plugins/sudoers/auth/pam.c:185 msgid "" "Account expired or PAM config lacks an \"account\" section for sudo, contact " "your system administrator" msgstr "" -#: plugins/sudoers/auth/pam.c:187 +#: plugins/sudoers/auth/pam.c:199 #, c-format msgid "PAM authentication error: %s" msgstr "" -#: plugins/sudoers/auth/rfc1938.c:103 plugins/sudoers/visudo.c:228 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:218 #, c-format msgid "you do not exist in the %s database" msgstr "" -#: plugins/sudoers/auth/securid5.c:80 +#: plugins/sudoers/auth/securid5.c:73 msgid "failed to initialise the ACE API library" msgstr "" -#: plugins/sudoers/auth/securid5.c:106 +#: plugins/sudoers/auth/securid5.c:99 msgid "unable to contact the SecurID server" msgstr "" -#: plugins/sudoers/auth/securid5.c:115 +#: plugins/sudoers/auth/securid5.c:108 msgid "User ID locked for SecurID Authentication" msgstr "" -#: plugins/sudoers/auth/securid5.c:119 plugins/sudoers/auth/securid5.c:170 +#: plugins/sudoers/auth/securid5.c:112 plugins/sudoers/auth/securid5.c:163 msgid "invalid username length for SecurID" msgstr "" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:175 +#: plugins/sudoers/auth/securid5.c:116 plugins/sudoers/auth/securid5.c:168 msgid "invalid Authentication Handle for SecurID" msgstr "" -#: plugins/sudoers/auth/securid5.c:127 +#: plugins/sudoers/auth/securid5.c:120 msgid "SecurID communication failed" msgstr "" -#: plugins/sudoers/auth/securid5.c:131 plugins/sudoers/auth/securid5.c:214 +#: plugins/sudoers/auth/securid5.c:124 plugins/sudoers/auth/securid5.c:211 msgid "unknown SecurID error" msgstr "" -#: plugins/sudoers/auth/securid5.c:165 +#: plugins/sudoers/auth/securid5.c:158 msgid "invalid passcode length for SecurID" msgstr "" -#: plugins/sudoers/auth/sia.c:123 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:125 msgid "unable to initialize SIA session" msgstr "" -#: plugins/sudoers/auth/sudo_auth.c:115 +#: plugins/sudoers/auth/sudo_auth.c:126 msgid "invalid authentication methods" msgstr "" -#: plugins/sudoers/auth/sudo_auth.c:117 +#: plugins/sudoers/auth/sudo_auth.c:128 msgid "" "Invalid authentication methods compiled into sudo! You may not mix " "standalone and non-standalone authentication." msgstr "" -#: plugins/sudoers/auth/sudo_auth.c:203 plugins/sudoers/auth/sudo_auth.c:252 +#: plugins/sudoers/auth/sudo_auth.c:224 plugins/sudoers/auth/sudo_auth.c:274 msgid "no authentication methods" msgstr "" -#: plugins/sudoers/auth/sudo_auth.c:205 +#: plugins/sudoers/auth/sudo_auth.c:226 msgid "" "There are no authentication methods compiled into sudo! If you want to turn " "off authentication, use the --disable-authentication configure option." msgstr "" -#: plugins/sudoers/auth/sudo_auth.c:254 +#: plugins/sudoers/auth/sudo_auth.c:276 msgid "Unable to initialize authentication methods." msgstr "" -#: plugins/sudoers/auth/sudo_auth.c:412 +#: plugins/sudoers/auth/sudo_auth.c:442 msgid "Authentication methods:" msgstr "" -#: plugins/sudoers/bsm_audit.c:95 plugins/sudoers/bsm_audit.c:184 +#: plugins/sudoers/bsm_audit.c:111 plugins/sudoers/bsm_audit.c:200 msgid "Could not determine audit condition" msgstr "" -#: plugins/sudoers/bsm_audit.c:156 plugins/sudoers/bsm_audit.c:244 +#: plugins/sudoers/bsm_audit.c:172 plugins/sudoers/bsm_audit.c:260 msgid "unable to commit audit record" msgstr "" -#: plugins/sudoers/check.c:197 +#: plugins/sudoers/check.c:252 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -253,15 +378,15 @@ "\n" msgstr "" -#: plugins/sudoers/check.c:240 plugins/sudoers/check.c:250 -#: plugins/sudoers/sudoers.c:600 plugins/sudoers/sudoers.c:629 +#: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 +#: plugins/sudoers/sudoers.c:699 plugins/sudoers/sudoers.c:728 #, c-format msgid "unknown uid: %u" msgstr "" -#: plugins/sudoers/check.c:245 plugins/sudoers/policy.c:683 -#: plugins/sudoers/sudoers.c:956 plugins/sudoers/testsudoers.c:212 -#: plugins/sudoers/testsudoers.c:364 +#: plugins/sudoers/check.c:300 plugins/sudoers/policy.c:774 +#: plugins/sudoers/sudoers.c:1095 plugins/sudoers/testsudoers.c:206 +#: plugins/sudoers/testsudoers.c:361 #, c-format msgid "unknown user: %s" msgstr "" @@ -310,1147 +435,1202 @@ msgstr "" #: plugins/sudoers/def_data.c:67 -msgid "Use a separate timestamp for each user/tty combo" +msgid "Send mail if the user tries to run a command" msgstr "" #: plugins/sudoers/def_data.c:71 -msgid "Lecture user the first time they run sudo" +msgid "Use a separate timestamp for each user/tty combo" msgstr "" #: plugins/sudoers/def_data.c:75 +msgid "Lecture user the first time they run sudo" +msgstr "" + +#: plugins/sudoers/def_data.c:79 #, c-format msgid "File containing the sudo lecture: %s" msgstr "" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:83 msgid "Require users to authenticate by default" msgstr "" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:87 msgid "Root may run sudo" msgstr "" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:91 msgid "Log the hostname in the (non-syslog) log file" msgstr "" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:95 msgid "Log the year in the (non-syslog) log file" msgstr "" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:99 msgid "If sudo is invoked with no arguments, start a shell" msgstr "" -#: plugins/sudoers/def_data.c:99 +#: plugins/sudoers/def_data.c:103 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "" -#: plugins/sudoers/def_data.c:103 +#: plugins/sudoers/def_data.c:107 msgid "Always set $HOME to the target user's home directory" msgstr "" -#: plugins/sudoers/def_data.c:107 +#: plugins/sudoers/def_data.c:111 msgid "Allow some information gathering to give useful error messages" msgstr "" -#: plugins/sudoers/def_data.c:111 +#: plugins/sudoers/def_data.c:115 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:119 msgid "Insult the user when they enter an incorrect password" msgstr "" -#: plugins/sudoers/def_data.c:119 +#: plugins/sudoers/def_data.c:123 msgid "Only allow the user to run sudo if they have a tty" msgstr "" -#: plugins/sudoers/def_data.c:123 +#: plugins/sudoers/def_data.c:127 msgid "Visudo will honor the EDITOR environment variable" msgstr "" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:131 msgid "Prompt for root's password, not the users's" msgstr "" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:135 msgid "Prompt for the runas_default user's password, not the users's" msgstr "" -#: plugins/sudoers/def_data.c:135 +#: plugins/sudoers/def_data.c:139 msgid "Prompt for the target user's password, not the users's" msgstr "" -#: plugins/sudoers/def_data.c:139 +#: plugins/sudoers/def_data.c:143 msgid "Apply defaults in the target user's login class if there is one" msgstr "" -#: plugins/sudoers/def_data.c:143 +#: plugins/sudoers/def_data.c:147 msgid "Set the LOGNAME and USER environment variables" msgstr "" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:151 msgid "Only set the effective uid to the target user, not the real uid" msgstr "" -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:155 msgid "Don't initialize the group vector to that of the target user" msgstr "" -#: plugins/sudoers/def_data.c:155 +#: plugins/sudoers/def_data.c:159 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "" -#: plugins/sudoers/def_data.c:159 +#: plugins/sudoers/def_data.c:163 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:167 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:171 #, c-format msgid "Number of tries to enter a password: %u" msgstr "" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:175 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "" -#: plugins/sudoers/def_data.c:175 +#: plugins/sudoers/def_data.c:179 #, c-format msgid "Path to log file: %s" msgstr "" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:183 #, c-format msgid "Path to mail program: %s" msgstr "" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:187 #, c-format msgid "Flags for mail program: %s" msgstr "" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:191 #, c-format msgid "Address to send mail to: %s" msgstr "" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:195 #, c-format msgid "Address to send mail from: %s" msgstr "" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:199 #, c-format msgid "Subject line for mail messages: %s" msgstr "" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:203 #, c-format msgid "Incorrect password message: %s" msgstr "" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:207 #, c-format msgid "Path to lecture status dir: %s" msgstr "" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:211 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:215 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:219 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:223 #, c-format msgid "Default password prompt: %s" msgstr "" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:227 msgid "If set, passprompt will override system prompt in all cases." msgstr "" -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:231 #, c-format msgid "Default user to run commands as: %s" msgstr "" -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:235 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:239 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:243 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:247 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:251 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:255 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:259 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:263 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:267 msgid "Allow users to set arbitrary environment variables" msgstr "" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:271 msgid "Reset the environment to a default set of variables" msgstr "" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to check for sanity:" msgstr "" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to remove:" msgstr "" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:283 msgid "Environment variables to preserve:" msgstr "" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:287 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:291 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:295 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:299 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:303 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:307 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:311 msgid "" "Use faster globbing that is less accurate but does not access the filesystem" msgstr "" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:315 msgid "" "The umask specified in sudoers will override the user's, even if it is more " "permissive" msgstr "" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:319 msgid "Log user's input for the command being run" msgstr "" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:323 msgid "Log the output of the command being run" msgstr "" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:327 msgid "Compress I/O logs using zlib" msgstr "" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:331 msgid "Always run commands in a pseudo-tty" msgstr "" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:335 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:339 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:343 #, c-format msgid "File in which to store the input/output log: %s" msgstr "" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:347 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:351 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:355 msgid "Set of permitted privileges" msgstr "" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:359 msgid "Set of limit privileges" msgstr "" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:363 msgid "Run commands on a pty in the background" msgstr "" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:367 msgid "PAM service name to use" msgstr "" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:371 msgid "PAM service name to use for login shells" msgstr "" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:375 msgid "Attempt to establish PAM credentials for the target user" msgstr "" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:379 msgid "Create a new PAM session for the command to run in" msgstr "" -#: plugins/sudoers/def_data.c:379 +#: plugins/sudoers/def_data.c:383 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:387 msgid "Enable sudoers netgroup support" msgstr "" -#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:601 -#: plugins/sudoers/visudo_json.c:642 plugins/sudoers/visudo_json.c:677 +#: plugins/sudoers/def_data.c:391 +msgid "" +"Check parent directories for writability when editing files with sudoedit" +msgstr "" + +#: plugins/sudoers/def_data.c:395 +msgid "Follow symbolic links when editing files with sudoedit" +msgstr "" + +#: plugins/sudoers/def_data.c:399 +msgid "Query the group plugin for unknown system groups" +msgstr "" + +#: plugins/sudoers/def_data.c:403 +msgid "Match netgroups based on the entire tuple: user, host and domain" +msgstr "" + +#: plugins/sudoers/defaults.c:199 plugins/sudoers/defaults.c:610 +#: plugins/sudoers/visudo_json.c:633 plugins/sudoers/visudo_json.c:668 #, c-format msgid "unknown defaults entry `%s'" msgstr "" -#: plugins/sudoers/defaults.c:218 plugins/sudoers/defaults.c:228 -#: plugins/sudoers/defaults.c:248 plugins/sudoers/defaults.c:261 -#: plugins/sudoers/defaults.c:274 plugins/sudoers/defaults.c:287 -#: plugins/sudoers/defaults.c:300 plugins/sudoers/defaults.c:320 -#: plugins/sudoers/defaults.c:330 +#: plugins/sudoers/defaults.c:207 plugins/sudoers/defaults.c:217 +#: plugins/sudoers/defaults.c:241 plugins/sudoers/defaults.c:256 +#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 +#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 +#: plugins/sudoers/defaults.c:325 #, c-format msgid "value `%s' is invalid for option `%s'" msgstr "" -#: plugins/sudoers/defaults.c:221 plugins/sudoers/defaults.c:231 -#: plugins/sudoers/defaults.c:239 plugins/sudoers/defaults.c:256 -#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 -#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 -#: plugins/sudoers/defaults.c:326 +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:220 +#: plugins/sudoers/defaults.c:228 plugins/sudoers/defaults.c:251 +#: plugins/sudoers/defaults.c:264 plugins/sudoers/defaults.c:277 +#: plugins/sudoers/defaults.c:290 plugins/sudoers/defaults.c:310 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "no value specified for `%s'" msgstr "" -#: plugins/sudoers/defaults.c:244 +#: plugins/sudoers/defaults.c:233 #, c-format msgid "values for `%s' must start with a '/'" msgstr "" -#: plugins/sudoers/defaults.c:306 +#: plugins/sudoers/defaults.c:301 #, c-format msgid "option `%s' does not take a value" msgstr "" -#: plugins/sudoers/env.c:276 plugins/sudoers/env.c:283 -#: plugins/sudoers/env.c:386 plugins/sudoers/ldap.c:456 -#: plugins/sudoers/ldap.c:538 plugins/sudoers/ldap.c:1315 -#: plugins/sudoers/ldap.c:1474 plugins/sudoers/ldap.c:1623 -#: plugins/sudoers/linux_audit.c:83 plugins/sudoers/logging.c:918 -#: plugins/sudoers/policy.c:461 plugins/sudoers/policy.c:470 -#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:709 -#: plugins/sudoers/testsudoers.c:242 plugins/sudoers/toke_util.c:174 +#: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 +#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:450 +#: plugins/sudoers/ldap.c:540 plugins/sudoers/ldap.c:1166 +#: plugins/sudoers/ldap.c:1388 plugins/sudoers/ldap.c:1704 +#: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:929 +#: plugins/sudoers/policy.c:511 plugins/sudoers/policy.c:520 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:815 +#: plugins/sudoers/testsudoers.c:236 plugins/sudoers/toke_util.c:162 #, c-format msgid "internal error, %s overflow" msgstr "" -#: plugins/sudoers/env.c:359 +#: plugins/sudoers/env.c:377 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "" -#: plugins/sudoers/env.c:1054 +#: plugins/sudoers/env.c:1083 +msgid "unable to rebuild the environment" +msgstr "" + +#: plugins/sudoers/env.c:1157 #, c-format msgid "" "sorry, you are not allowed to set the following environment variables: %s" msgstr "" -#: plugins/sudoers/group_plugin.c:94 +#: plugins/sudoers/group_plugin.c:86 #, c-format msgid "%s must be owned by uid %d" msgstr "" -#: plugins/sudoers/group_plugin.c:98 +#: plugins/sudoers/group_plugin.c:90 #, c-format msgid "%s must only be writable by owner" msgstr "" -#: plugins/sudoers/group_plugin.c:105 plugins/sudoers/sssd.c:251 +#: plugins/sudoers/group_plugin.c:98 plugins/sudoers/sssd.c:331 #, c-format msgid "unable to load %s: %s" msgstr "" -#: plugins/sudoers/group_plugin.c:110 +#: plugins/sudoers/group_plugin.c:104 #, c-format msgid "unable to find symbol \"group_plugin\" in %s" msgstr "" -#: plugins/sudoers/group_plugin.c:115 +#: plugins/sudoers/group_plugin.c:109 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "" -#: plugins/sudoers/interfaces.c:116 +#: plugins/sudoers/interfaces.c:117 msgid "Local IP address and netmask pairs:\n" msgstr "" -#: plugins/sudoers/iolog.c:101 plugins/sudoers/iolog.c:119 -#: plugins/sudoers/timestamp.c:233 +#: plugins/sudoers/iolog.c:92 plugins/sudoers/iolog.c:110 +#: plugins/sudoers/timestamp.c:169 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "" -#: plugins/sudoers/iolog.c:112 plugins/sudoers/iolog.c:133 -#: plugins/sudoers/iolog.c:140 plugins/sudoers/timestamp.c:227 -#: plugins/sudoers/timestamp.c:248 +#: plugins/sudoers/iolog.c:103 plugins/sudoers/iolog.c:124 +#: plugins/sudoers/iolog.c:131 plugins/sudoers/timestamp.c:163 +#: plugins/sudoers/timestamp.c:184 #, c-format msgid "unable to mkdir %s" msgstr "" -#: plugins/sudoers/iolog.c:209 plugins/sudoers/sudoers.c:765 -#: plugins/sudoers/sudoreplay.c:346 plugins/sudoers/sudoreplay.c:816 -#: plugins/sudoers/sudoreplay.c:1013 plugins/sudoers/timestamp.c:357 -#: plugins/sudoers/visudo.c:832 plugins/sudoers/visudo_json.c:1025 -#: plugins/sudoers/visudo_json.c:1038 +#: plugins/sudoers/iolog.c:200 plugins/sudoers/sudoers.c:871 +#: plugins/sudoers/sudoreplay.c:300 plugins/sudoers/sudoreplay.c:769 +#: plugins/sudoers/sudoreplay.c:973 plugins/sudoers/timestamp.c:399 +#: plugins/sudoers/visudo.c:904 plugins/sudoers/visudo_json.c:1012 +#: plugins/sudoers/visudo_json.c:1025 #, c-format msgid "unable to open %s" msgstr "" -#: plugins/sudoers/iolog.c:250 plugins/sudoers/sudoers.c:769 -#: plugins/sudoers/sudoreplay.c:1120 +#: plugins/sudoers/iolog.c:241 plugins/sudoers/sudoers.c:875 +#: plugins/sudoers/sudoreplay.c:1084 #, c-format msgid "unable to read %s" msgstr "" -#: plugins/sudoers/iolog.c:282 plugins/sudoers/sudoreplay.c:591 -#: plugins/sudoers/timestamp.c:186 plugins/sudoers/timestamp.c:189 +#: plugins/sudoers/iolog.c:277 plugins/sudoers/sudoreplay.c:550 +#: plugins/sudoers/timestamp.c:298 plugins/sudoers/timestamp.c:301 #, c-format msgid "unable to write to %s" msgstr "" -#: plugins/sudoers/iolog.c:347 plugins/sudoers/iolog.c:545 +#: plugins/sudoers/iolog.c:342 plugins/sudoers/iolog.c:540 #, c-format msgid "unable to create %s" msgstr "" -#: plugins/sudoers/ldap.c:435 +#: plugins/sudoers/iolog.c:723 +#, c-format +msgid "%s: internal error, file index %d not open" +msgstr "" + +#: plugins/sudoers/ldap.c:428 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "" -#: plugins/sudoers/ldap.c:489 +#: plugins/sudoers/ldap.c:488 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "" -#: plugins/sudoers/ldap.c:516 +#: plugins/sudoers/ldap.c:515 msgid "unable to mix ldap and ldaps URIs" msgstr "" -#: plugins/sudoers/ldap.c:520 plugins/sudoers/ldap.c:553 +#: plugins/sudoers/ldap.c:519 plugins/sudoers/ldap.c:555 msgid "starttls not supported when using ldaps" msgstr "" -#: plugins/sudoers/ldap.c:620 +#: plugins/sudoers/ldap.c:626 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "" -#: plugins/sudoers/ldap.c:623 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "" -#: plugins/sudoers/ldap.c:1114 +#: plugins/sudoers/ldap.c:1152 msgid "unable to get GMT time" msgstr "" -#: plugins/sudoers/ldap.c:1120 +#: plugins/sudoers/ldap.c:1158 msgid "unable to format timestamp" msgstr "" -#: plugins/sudoers/ldap.c:1128 -msgid "unable to build time filter" -msgstr "" - -#: plugins/sudoers/ldap.c:1757 +#: plugins/sudoers/ldap.c:1853 #, c-format msgid "%s: %s: %s: %s" msgstr "" -#: plugins/sudoers/ldap.c:2261 +#: plugins/sudoers/ldap.c:2394 #, c-format msgid "" "\n" "LDAP Role: %s\n" msgstr "" -#: plugins/sudoers/ldap.c:2263 +#: plugins/sudoers/ldap.c:2396 #, c-format msgid "" "\n" "LDAP Role: UNKNOWN\n" msgstr "" -#: plugins/sudoers/ldap.c:2310 +#: plugins/sudoers/ldap.c:2443 #, c-format msgid " Order: %s\n" msgstr "" -#: plugins/sudoers/ldap.c:2318 plugins/sudoers/parse.c:512 -#: plugins/sudoers/sssd.c:1297 +#: plugins/sudoers/ldap.c:2451 plugins/sudoers/parse.c:555 +#: plugins/sudoers/sssd.c:1429 #, c-format msgid " Commands:\n" msgstr "" -#: plugins/sudoers/ldap.c:2868 +#: plugins/sudoers/ldap.c:3015 #, c-format msgid "unable to initialize LDAP: %s" msgstr "" -#: plugins/sudoers/ldap.c:2910 +#: plugins/sudoers/ldap.c:3051 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:3143 +#: plugins/sudoers/ldap.c:3305 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "" -#: plugins/sudoers/linux_audit.c:57 +#: plugins/sudoers/linux_audit.c:52 msgid "unable to open audit system" msgstr "" -#: plugins/sudoers/linux_audit.c:94 +#: plugins/sudoers/linux_audit.c:93 msgid "unable to send audit message" msgstr "" -#: plugins/sudoers/logging.c:134 +#: plugins/sudoers/logging.c:106 #, c-format msgid "%8s : %s" msgstr "" -#: plugins/sudoers/logging.c:162 +#: plugins/sudoers/logging.c:134 #, c-format msgid "%8s : (command continued) %s" msgstr "" -#: plugins/sudoers/logging.c:187 +#: plugins/sudoers/logging.c:159 #, c-format msgid "unable to open log file: %s: %s" msgstr "" -#: plugins/sudoers/logging.c:190 +#: plugins/sudoers/logging.c:162 #, c-format msgid "unable to lock log file: %s: %s" msgstr "" -#: plugins/sudoers/logging.c:242 +#: plugins/sudoers/logging.c:211 msgid "No user or host" msgstr "" -#: plugins/sudoers/logging.c:244 +#: plugins/sudoers/logging.c:213 msgid "validation failure" msgstr "" -#: plugins/sudoers/logging.c:251 +#: plugins/sudoers/logging.c:220 msgid "user NOT in sudoers" msgstr "" -#: plugins/sudoers/logging.c:253 +#: plugins/sudoers/logging.c:222 msgid "user NOT authorized on host" msgstr "" -#: plugins/sudoers/logging.c:255 +#: plugins/sudoers/logging.c:224 msgid "command not allowed" msgstr "" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:259 #, 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:262 #, 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:266 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" msgstr "" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:269 #, 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:408 -#: plugins/sudoers/sudoers.c:410 plugins/sudoers/sudoers.c:412 -#: plugins/sudoers/sudoers.c:414 plugins/sudoers/sudoers.c:1129 -#: plugins/sudoers/sudoers.c:1130 +#: plugins/sudoers/logging.c:306 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1222 +#: plugins/sudoers/sudoers.c:1224 #, c-format msgid "%s: command not found" msgstr "" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:404 +#: plugins/sudoers/logging.c:308 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring `%s' found in '.'\n" "Use `sudo ./%s' if this is the `%s' you wish to run." msgstr "" -#: plugins/sudoers/logging.c:353 +#: plugins/sudoers/logging.c:325 msgid "authentication failure" msgstr "" -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:351 msgid "a password is required" msgstr "" -#: plugins/sudoers/logging.c:446 plugins/sudoers/logging.c:501 +#: plugins/sudoers/logging.c:422 plugins/sudoers/logging.c:484 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "" msgstr[1] "" -#: plugins/sudoers/logging.c:584 +#: plugins/sudoers/logging.c:572 msgid "unable to fork" msgstr "" -#: plugins/sudoers/logging.c:592 plugins/sudoers/logging.c:648 +#: plugins/sudoers/logging.c:580 plugins/sudoers/logging.c:640 #, c-format msgid "unable to fork: %m" msgstr "" -#: plugins/sudoers/logging.c:638 +#: plugins/sudoers/logging.c:630 #, c-format msgid "unable to open pipe: %m" msgstr "" -#: plugins/sudoers/logging.c:663 +#: plugins/sudoers/logging.c:655 #, c-format msgid "unable to dup stdin: %m" msgstr "" -#: plugins/sudoers/logging.c:698 +#: plugins/sudoers/logging.c:693 #, c-format msgid "unable to execute %s: %m" msgstr "" -#: plugins/sudoers/match.c:627 +#: plugins/sudoers/match.c:616 #, c-format msgid "unsupported digest type %d for %s" msgstr "" -#: plugins/sudoers/match.c:656 +#: plugins/sudoers/match.c:657 #, c-format msgid "%s: read error" msgstr "" -#: plugins/sudoers/match.c:670 +#: plugins/sudoers/match.c:692 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "" -#: plugins/sudoers/parse.c:123 +#: plugins/sudoers/parse.c:114 #, c-format msgid "parse error in %s near line %d" msgstr "" -#: plugins/sudoers/parse.c:126 +#: plugins/sudoers/parse.c:117 #, c-format msgid "parse error in %s" msgstr "" -#: plugins/sudoers/parse.c:459 +#: plugins/sudoers/parse.c:502 #, c-format msgid "" "\n" "Sudoers entry:\n" msgstr "" -#: plugins/sudoers/parse.c:460 +#: plugins/sudoers/parse.c:503 #, c-format msgid " RunAsUsers: " msgstr "" -#: plugins/sudoers/parse.c:474 +#: plugins/sudoers/parse.c:517 #, c-format msgid " RunAsGroups: " msgstr "" -#: plugins/sudoers/parse.c:483 +#: plugins/sudoers/parse.c:526 #, c-format msgid " Options: " msgstr "" -#: plugins/sudoers/policy.c:109 plugins/sudoers/policy.c:118 -#: plugins/sudoers/policy.c:127 plugins/sudoers/policy.c:151 -#: plugins/sudoers/policy.c:263 plugins/sudoers/policy.c:283 -#: plugins/sudoers/policy.c:292 plugins/sudoers/policy.c:322 -#: plugins/sudoers/policy.c:332 plugins/sudoers/policy.c:341 -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 -#, c-format -msgid "%s: %s" +#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:253 +msgid "unable to parse network address list" msgstr "" -#: plugins/sudoers/policy.c:569 plugins/sudoers/visudo.c:773 +#: plugins/sudoers/policy.c:659 plugins/sudoers/visudo.c:841 #, c-format msgid "unable to execute %s" msgstr "" -#: plugins/sudoers/policy.c:701 +#: plugins/sudoers/policy.c:792 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "" -#: plugins/sudoers/policy.c:703 +#: plugins/sudoers/policy.c:794 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "" -#: plugins/sudoers/policy.c:707 +#: plugins/sudoers/policy.c:798 #, c-format msgid "" "\n" "Sudoers path: %s\n" msgstr "" -#: plugins/sudoers/policy.c:710 +#: plugins/sudoers/policy.c:801 #, c-format msgid "nsswitch path: %s\n" msgstr "" -#: plugins/sudoers/policy.c:712 +#: plugins/sudoers/policy.c:803 #, c-format msgid "ldap.conf path: %s\n" msgstr "" -#: plugins/sudoers/policy.c:713 +#: plugins/sudoers/policy.c:804 #, c-format msgid "ldap.secret path: %s\n" msgstr "" -#: plugins/sudoers/pwutil.c:149 +#: plugins/sudoers/policy.c:837 +#, c-format +msgid "unable to register hook of type %d (version %d.%d)" +msgstr "" + +#: plugins/sudoers/pwutil.c:158 plugins/sudoers/pwutil.c:176 +#, c-format +msgid "unable to cache uid %u, out of memory" +msgstr "" + +#: plugins/sudoers/pwutil.c:170 #, c-format msgid "unable to cache uid %u, already exists" msgstr "" -#: plugins/sudoers/pwutil.c:194 +#: plugins/sudoers/pwutil.c:222 plugins/sudoers/pwutil.c:239 +#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:334 +#, c-format +msgid "unable to cache user %s, out of memory" +msgstr "" + +#: plugins/sudoers/pwutil.c:234 #, c-format msgid "unable to cache user %s, already exists" msgstr "" -#: plugins/sudoers/pwutil.c:400 +#: plugins/sudoers/pwutil.c:474 plugins/sudoers/pwutil.c:492 +#, c-format +msgid "unable to cache gid %u, out of memory" +msgstr "" + +#: plugins/sudoers/pwutil.c:486 #, c-format msgid "unable to cache gid %u, already exists" msgstr "" -#: plugins/sudoers/pwutil.c:439 +#: plugins/sudoers/pwutil.c:532 plugins/sudoers/pwutil.c:549 +#: plugins/sudoers/pwutil.c:584 plugins/sudoers/pwutil.c:626 +#, c-format +msgid "unable to cache group %s, out of memory" +msgstr "" + +#: plugins/sudoers/pwutil.c:544 #, c-format msgid "unable to cache group %s, already exists" msgstr "" -#: plugins/sudoers/pwutil.c:605 plugins/sudoers/pwutil.c:631 +#: plugins/sudoers/pwutil.c:739 plugins/sudoers/pwutil.c:783 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "" -#: plugins/sudoers/pwutil.c:627 +#: plugins/sudoers/pwutil.c:745 plugins/sudoers/pwutil.c:788 +#, c-format +msgid "unable to cache group list for %s, out of memory" +msgstr "" + +#: plugins/sudoers/pwutil.c:777 #, c-format msgid "unable to parse groups for %s" msgstr "" -#: plugins/sudoers/set_perms.c:122 plugins/sudoers/set_perms.c:447 -#: plugins/sudoers/set_perms.c:850 plugins/sudoers/set_perms.c:1147 -#: plugins/sudoers/set_perms.c:1439 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 +#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 +#: plugins/sudoers/set_perms.c:1430 msgid "perm stack overflow" msgstr "" -#: plugins/sudoers/set_perms.c:130 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:1076 -#: plugins/sudoers/set_perms.c:1155 plugins/sudoers/set_perms.c:1372 -#: plugins/sudoers/set_perms.c:1447 plugins/sudoers/set_perms.c:1536 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 +#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 +#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 +#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 +#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 msgid "perm stack underflow" msgstr "" -#: plugins/sudoers/set_perms.c:189 plugins/sudoers/set_perms.c:502 -#: plugins/sudoers/set_perms.c:1206 plugins/sudoers/set_perms.c:1479 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:493 +#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 msgid "unable to change to root gid" msgstr "" -#: plugins/sudoers/set_perms.c:278 plugins/sudoers/set_perms.c:599 -#: plugins/sudoers/set_perms.c:987 plugins/sudoers/set_perms.c:1283 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:590 +#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 msgid "unable to change to runas gid" msgstr "" -#: plugins/sudoers/set_perms.c:283 plugins/sudoers/set_perms.c:604 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:595 +#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 msgid "unable to set runas group vector" msgstr "" -#: plugins/sudoers/set_perms.c:294 plugins/sudoers/set_perms.c:615 -#: plugins/sudoers/set_perms.c:1001 plugins/sudoers/set_perms.c:1297 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:606 +#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 msgid "unable to change to runas uid" msgstr "" -#: plugins/sudoers/set_perms.c:312 plugins/sudoers/set_perms.c:633 -#: plugins/sudoers/set_perms.c:1017 plugins/sudoers/set_perms.c:1313 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:624 +#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 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:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 msgid "too many processes" msgstr "" -#: plugins/sudoers/solaris_audit.c:47 +#: plugins/sudoers/solaris_audit.c:51 msgid "unable to get current working directory" msgstr "" -#: plugins/sudoers/solaris_audit.c:55 +#: plugins/sudoers/solaris_audit.c:59 #, c-format msgid "truncated audit path user_cmnd: %s" msgstr "" -#: plugins/sudoers/solaris_audit.c:62 +#: plugins/sudoers/solaris_audit.c:66 #, c-format msgid "truncated audit path argv[0]: %s" msgstr "" -#: plugins/sudoers/solaris_audit.c:111 +#: plugins/sudoers/solaris_audit.c:115 msgid "audit_failure message too long" msgstr "" -#: plugins/sudoers/sssd.c:252 +#: plugins/sudoers/sssd.c:333 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "" -#: plugins/sudoers/sssd.c:259 plugins/sudoers/sssd.c:267 -#: plugins/sudoers/sssd.c:275 plugins/sudoers/sssd.c:283 -#: plugins/sudoers/sssd.c:291 +#: plugins/sudoers/sssd.c:341 plugins/sudoers/sssd.c:350 +#: plugins/sudoers/sssd.c:359 plugins/sudoers/sssd.c:368 +#: plugins/sudoers/sssd.c:377 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "" -#: plugins/sudoers/sudo_nss.c:296 +#: plugins/sudoers/sudo_nss.c:290 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "" -#: plugins/sudoers/sudo_nss.c:309 +#: plugins/sudoers/sudo_nss.c:308 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "" -#: plugins/sudoers/sudo_nss.c:322 +#: plugins/sudoers/sudo_nss.c:326 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "" -#: plugins/sudoers/sudo_nss.c:331 +#: plugins/sudoers/sudo_nss.c:339 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "" -#: plugins/sudoers/sudoers.c:160 plugins/sudoers/sudoers.c:202 -#: plugins/sudoers/sudoers.c:727 +#: plugins/sudoers/sudoers.c:172 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/visudo.c:223 plugins/sudoers/visudo.c:567 +msgid "unable to initialize sudoers default values" +msgstr "" + +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:239 +#: plugins/sudoers/sudoers.c:833 msgid "problem with defaults entries" msgstr "" -#: plugins/sudoers/sudoers.c:168 +#: plugins/sudoers/sudoers.c:205 msgid "no valid sudoers sources found, quitting" msgstr "" -#: plugins/sudoers/sudoers.c:234 +#: plugins/sudoers/sudoers.c:275 msgid "sudoers specifies that root is not allowed to sudo" msgstr "" -#: plugins/sudoers/sudoers.c:279 +#: plugins/sudoers/sudoers.c:332 msgid "you are not permitted to use the -C option" msgstr "" -#: plugins/sudoers/sudoers.c:337 +#: plugins/sudoers/sudoers.c:396 #, c-format msgid "timestamp owner (%s): No such user" msgstr "" -#: plugins/sudoers/sudoers.c:351 +#: plugins/sudoers/sudoers.c:410 msgid "no tty" msgstr "" -#: plugins/sudoers/sudoers.c:352 +#: plugins/sudoers/sudoers.c:411 msgid "sorry, you must have a tty to run sudo" msgstr "" -#: plugins/sudoers/sudoers.c:403 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "" -#: plugins/sudoers/sudoers.c:423 +#: plugins/sudoers/sudoers.c:486 msgid "sorry, you are not allowed to preserve the environment" msgstr "" -#: plugins/sudoers/sudoers.c:675 +#: plugins/sudoers/sudoers.c:778 msgid "command too long" msgstr "" -#: plugins/sudoers/sudoers.c:780 plugins/sudoers/visudo.c:333 -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/sudoers.c:886 plugins/sudoers/visudo.c:427 +#: plugins/sudoers/visudo.c:667 #, c-format msgid "unable to stat %s" msgstr "" -#: plugins/sudoers/sudoers.c:784 +#: plugins/sudoers/sudoers.c:890 #, c-format msgid "%s is not a regular file" msgstr "" -#: plugins/sudoers/sudoers.c:788 plugins/sudoers/timestamp.c:289 toke.l:945 +#: plugins/sudoers/sudoers.c:894 plugins/sudoers/timestamp.c:225 toke.l:947 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "" -#: plugins/sudoers/sudoers.c:792 toke.l:952 +#: plugins/sudoers/sudoers.c:898 toke.l:954 #, c-format msgid "%s is world writable" msgstr "" -#: plugins/sudoers/sudoers.c:796 toke.l:957 +#: plugins/sudoers/sudoers.c:902 toke.l:959 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "" -#: plugins/sudoers/sudoers.c:827 +#: plugins/sudoers/sudoers.c:933 #, c-format msgid "only root can use `-c %s'" msgstr "" -#: plugins/sudoers/sudoers.c:846 +#: plugins/sudoers/sudoers.c:952 #, c-format msgid "unknown login class: %s" msgstr "" -#: plugins/sudoers/sudoers.c:890 plugins/sudoers/sudoers.c:905 +#: plugins/sudoers/sudoers.c:1031 plugins/sudoers/sudoers.c:1059 #, c-format msgid "unable to resolve host %s" msgstr "" -#: plugins/sudoers/sudoers.c:987 plugins/sudoers/testsudoers.c:388 +#: plugins/sudoers/sudoers.c:1126 plugins/sudoers/testsudoers.c:385 #, c-format msgid "unknown group: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:278 +#: plugins/sudoers/sudoreplay.c:232 #, c-format msgid "invalid filter option: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:291 +#: plugins/sudoers/sudoreplay.c:245 #, c-format msgid "invalid max wait: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:297 +#: plugins/sudoers/sudoreplay.c:251 #, c-format msgid "invalid speed factor: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:300 plugins/sudoers/visudo.c:190 +#: plugins/sudoers/sudoreplay.c:254 plugins/sudoers/visudo.c:180 #, c-format msgid "%s version %s\n" msgstr "" -#: plugins/sudoers/sudoreplay.c:332 +#: plugins/sudoers/sudoreplay.c:286 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:338 +#: plugins/sudoers/sudoreplay.c:292 #, c-format msgid "%s/%s/timing: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:354 +#: plugins/sudoers/sudoreplay.c:308 #, c-format msgid "Replaying sudo session: %s\n" msgstr "" -#: plugins/sudoers/sudoreplay.c:360 +#: plugins/sudoers/sudoreplay.c:314 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "" -#: plugins/sudoers/sudoreplay.c:361 +#: plugins/sudoers/sudoreplay.c:315 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "" -#: plugins/sudoers/sudoreplay.c:413 +#: plugins/sudoers/sudoreplay.c:368 msgid "unable to set tty to raw mode" msgstr "" -#: plugins/sudoers/sudoreplay.c:444 +#: plugins/sudoers/sudoreplay.c:401 #, c-format msgid "invalid timing file line: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:652 plugins/sudoers/sudoreplay.c:677 +#: plugins/sudoers/sudoreplay.c:611 plugins/sudoers/sudoreplay.c:636 #, c-format msgid "ambiguous expression \"%s\"" msgstr "" -#: plugins/sudoers/sudoreplay.c:699 +#: plugins/sudoers/sudoreplay.c:658 msgid "unmatched ')' in expression" msgstr "" -#: plugins/sudoers/sudoreplay.c:703 +#: plugins/sudoers/sudoreplay.c:662 #, c-format msgid "unknown search term \"%s\"" msgstr "" -#: plugins/sudoers/sudoreplay.c:717 +#: plugins/sudoers/sudoreplay.c:677 #, c-format msgid "%s requires an argument" msgstr "" -#: plugins/sudoers/sudoreplay.c:721 plugins/sudoers/sudoreplay.c:1093 +#: plugins/sudoers/sudoreplay.c:680 plugins/sudoers/sudoreplay.c:1060 #, c-format msgid "invalid regular expression: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:727 +#: plugins/sudoers/sudoreplay.c:684 #, c-format msgid "could not parse date \"%s\"" msgstr "" -#: plugins/sudoers/sudoreplay.c:736 +#: plugins/sudoers/sudoreplay.c:693 msgid "unmatched '(' in expression" msgstr "" -#: plugins/sudoers/sudoreplay.c:738 +#: plugins/sudoers/sudoreplay.c:695 msgid "illegal trailing \"or\"" msgstr "" -#: plugins/sudoers/sudoreplay.c:740 +#: plugins/sudoers/sudoreplay.c:697 msgid "illegal trailing \"!\"" msgstr "" -#: plugins/sudoers/sudoreplay.c:793 +#: plugins/sudoers/sudoreplay.c:746 #, c-format msgid "unknown search type %d" msgstr "" -#: plugins/sudoers/sudoreplay.c:830 +#: plugins/sudoers/sudoreplay.c:784 #, c-format msgid "%s: invalid log file" msgstr "" -#: plugins/sudoers/sudoreplay.c:848 +#: plugins/sudoers/sudoreplay.c:802 #, c-format msgid "%s: time stamp field is missing" msgstr "" -#: plugins/sudoers/sudoreplay.c:855 +#: plugins/sudoers/sudoreplay.c:809 #, c-format msgid "%s: time stamp %s: %s" msgstr "" -#: plugins/sudoers/sudoreplay.c:862 +#: plugins/sudoers/sudoreplay.c:816 #, c-format msgid "%s: user field is missing" msgstr "" -#: plugins/sudoers/sudoreplay.c:870 +#: plugins/sudoers/sudoreplay.c:825 #, c-format msgid "%s: runas user field is missing" msgstr "" -#: plugins/sudoers/sudoreplay.c:878 +#: plugins/sudoers/sudoreplay.c:834 #, c-format msgid "%s: runas group field is missing" msgstr "" -#: plugins/sudoers/sudoreplay.c:1233 +#: plugins/sudoers/sudoreplay.c:1197 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "" -#: plugins/sudoers/sudoreplay.c:1236 +#: plugins/sudoers/sudoreplay.c:1200 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "" -#: plugins/sudoers/sudoreplay.c:1245 +#: plugins/sudoers/sudoreplay.c:1209 #, c-format msgid "" "%s - replay sudo session logs\n" "\n" msgstr "" -#: plugins/sudoers/sudoreplay.c:1247 +#: plugins/sudoers/sudoreplay.c:1211 msgid "" "\n" "Options:\n" @@ -1463,136 +1643,151 @@ " -V, --version display version information and exit" msgstr "" -#: plugins/sudoers/testsudoers.c:327 +#: plugins/sudoers/testsudoers.c:324 msgid "\thost unmatched" msgstr "" -#: plugins/sudoers/testsudoers.c:330 +#: plugins/sudoers/testsudoers.c:327 msgid "" "\n" "Command allowed" msgstr "" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command denied" msgstr "" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command unmatched" msgstr "" -#: plugins/sudoers/timestamp.c:197 +#: plugins/sudoers/timestamp.c:233 #, c-format -msgid "unable to truncate time stamp file to %lld bytes" +msgid "%s is group writable" msgstr "" -#: plugins/sudoers/timestamp.c:297 +#: plugins/sudoers/timestamp.c:309 #, c-format -msgid "%s is group writable" +msgid "unable to truncate time stamp file to %lld bytes" msgstr "" -#: plugins/sudoers/timestamp.c:318 -#, c-format -msgid "timestamp path too long: %s/%s" +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:488 plugins/sudoers/visudo.c:494 +msgid "unable to read the clock" msgstr "" -#: plugins/sudoers/timestamp.c:498 +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "" -#: plugins/sudoers/timestamp.c:510 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "" -#: plugins/sudoers/timestamp.c:613 plugins/sudoers/timestamp.c:634 +#: plugins/sudoers/timestamp.c:863 +#, c-format +msgid "unable to lock time stamp file %s" +msgstr "" + +#: plugins/sudoers/timestamp.c:906 plugins/sudoers/timestamp.c:926 #, c-format msgid "lecture status path too long: %s/%s" msgstr "" -#: plugins/sudoers/visudo.c:192 +#: plugins/sudoers/visudo.c:182 #, c-format msgid "%s grammar version %d\n" msgstr "" -#: plugins/sudoers/visudo.c:263 plugins/sudoers/visudo.c:552 +#: plugins/sudoers/visudo.c:254 plugins/sudoers/visudo.c:619 #, c-format msgid "press return to edit %s: " msgstr "" -#: plugins/sudoers/visudo.c:349 plugins/sudoers/visudo.c:355 +#: plugins/sudoers/visudo.c:320 +#, c-format +msgid "specified editor (%s) doesn't exist" +msgstr "" + +#: plugins/sudoers/visudo.c:338 +#, c-format +msgid "no editor found (editor path = %s)" +msgstr "" + +#: plugins/sudoers/visudo.c:447 plugins/sudoers/visudo.c:455 msgid "write error" msgstr "" -#: plugins/sudoers/visudo.c:439 +#: plugins/sudoers/visudo.c:501 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:444 +#: plugins/sudoers/visudo.c:508 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:450 +#: plugins/sudoers/visudo.c:514 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:472 +#: plugins/sudoers/visudo.c:536 #, c-format msgid "%s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:497 +#: plugins/sudoers/visudo.c:562 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "" -#: plugins/sudoers/visudo.c:507 +#: plugins/sudoers/visudo.c:573 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "" -#: plugins/sudoers/visudo.c:543 +#: plugins/sudoers/visudo.c:610 #, c-format msgid "internal error, unable to find %s in list!" msgstr "" -#: plugins/sudoers/visudo.c:601 plugins/sudoers/visudo.c:610 +#: plugins/sudoers/visudo.c:669 plugins/sudoers/visudo.c:678 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "" -#: plugins/sudoers/visudo.c:605 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:673 plugins/sudoers/visudo.c:683 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "" -#: plugins/sudoers/visudo.c:632 +#: plugins/sudoers/visudo.c:700 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "" -#: plugins/sudoers/visudo.c:646 +#: plugins/sudoers/visudo.c:714 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:656 +#: plugins/sudoers/visudo.c:724 #, c-format msgid "error renaming %s, %s unchanged" msgstr "" -#: plugins/sudoers/visudo.c:718 +#: plugins/sudoers/visudo.c:786 msgid "What now? " msgstr "" -#: plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:800 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1600,94 +1795,79 @@ " (Q)uit and save changes to sudoers file (DANGER!)\n" msgstr "" -#: plugins/sudoers/visudo.c:780 +#: plugins/sudoers/visudo.c:848 #, c-format msgid "unable to run %s" msgstr "" -#: plugins/sudoers/visudo.c:806 +#: plugins/sudoers/visudo.c:878 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "" -#: plugins/sudoers/visudo.c:813 +#: plugins/sudoers/visudo.c:885 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "" -#: plugins/sudoers/visudo.c:838 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:910 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "failed to parse %s file, unknown error" msgstr "" -#: plugins/sudoers/visudo.c:854 plugins/sudoers/visudo_json.c:1054 +#: plugins/sudoers/visudo.c:926 plugins/sudoers/visudo_json.c:1041 #, c-format msgid "parse error in %s near line %d\n" msgstr "" -#: plugins/sudoers/visudo.c:857 plugins/sudoers/visudo_json.c:1057 +#: plugins/sudoers/visudo.c:929 plugins/sudoers/visudo_json.c:1044 #, c-format msgid "parse error in %s\n" msgstr "" -#: plugins/sudoers/visudo.c:865 plugins/sudoers/visudo.c:872 +#: plugins/sudoers/visudo.c:937 plugins/sudoers/visudo.c:944 #, c-format msgid "%s: parsed OK\n" msgstr "" -#: plugins/sudoers/visudo.c:918 +#: plugins/sudoers/visudo.c:991 #, c-format msgid "%s busy, try again later" msgstr "" -#: plugins/sudoers/visudo.c:962 -#, c-format -msgid "specified editor (%s) doesn't exist" -msgstr "" - -#: plugins/sudoers/visudo.c:985 -#, c-format -msgid "unable to stat editor (%s)" -msgstr "" - -#: plugins/sudoers/visudo.c:1033 -#, c-format -msgid "no editor found (editor path = %s)" -msgstr "" - -#: plugins/sudoers/visudo.c:1136 +#: plugins/sudoers/visudo.c:1087 #, c-format msgid "Error: cycle in %s `%s'" msgstr "" -#: plugins/sudoers/visudo.c:1137 +#: plugins/sudoers/visudo.c:1088 #, c-format msgid "Warning: cycle in %s `%s'" msgstr "" -#: plugins/sudoers/visudo.c:1141 +#: plugins/sudoers/visudo.c:1092 #, c-format msgid "Error: %s `%s' referenced but not defined" msgstr "" -#: plugins/sudoers/visudo.c:1142 +#: plugins/sudoers/visudo.c:1093 #, c-format msgid "Warning: %s `%s' referenced but not defined" msgstr "" -#: plugins/sudoers/visudo.c:1281 +#: plugins/sudoers/visudo.c:1236 #, c-format msgid "Warning: unused %s `%s'" msgstr "" -#: plugins/sudoers/visudo.c:1394 +#: plugins/sudoers/visudo.c:1349 #, c-format msgid "" "%s - safely edit the sudoers file\n" "\n" msgstr "" -#: plugins/sudoers/visudo.c:1396 +#: plugins/sudoers/visudo.c:1351 msgid "" "\n" "Options:\n" @@ -1700,11 +1880,11 @@ " -x, --export=output_file write sudoers in JSON format to output_file" msgstr "" -#: plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo_json.c:1018 #, c-format msgid "%s: input and output files must be different" msgstr "" -#: toke.l:915 +#: toke.l:918 msgid "too many levels of includes" msgstr "" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/plugins/sudoers/po/uk.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/plugins/sudoers/po/uk.mo differ diff -Nru sudo-1.8.12/plugins/sudoers/po/uk.po sudo-1.8.16/plugins/sudoers/po/uk.po --- sudo-1.8.12/plugins/sudoers/po/uk.po 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/po/uk.po 2016-03-17 16:13:10.000000000 +0000 @@ -1,13 +1,13 @@ # Ukrainian translation for sudoers. # This file is put in the public domain. # -# Yuri Chornoivan , 2011, 2012, 2013, 2014. +# Yuri Chornoivan , 2011, 2012, 2013, 2014, 2015, 2016. msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.12b3\n" -"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-11-20 13:33-0700\n" -"PO-Revision-Date: 2014-11-22 09:12+0200\n" +"Project-Id-Version: sudoers 1.8.16b1\n" +"Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" +"POT-Creation-Date: 2016-02-19 15:48-0700\n" +"PO-Revision-Date: 2016-02-25 20:33+0200\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" "Language: uk\n" @@ -41,46 +41,172 @@ msgid "Sorry, try again." msgstr "Вибачте, повторіть спробу." -#: gram.y:379 +#: gram.y:183 gram.y:201 gram.y:207 gram.y:213 gram.y:219 gram.y:225 +#: gram.y:241 gram.y:248 gram.y:255 gram.y:262 gram.y:269 gram.y:285 +#: gram.y:308 gram.y:315 gram.y:322 gram.y:329 gram.y:336 gram.y:391 +#: gram.y:399 gram.y:409 gram.y:439 gram.y:446 gram.y:453 gram.y:460 +#: gram.y:572 gram.y:579 gram.y:588 gram.y:597 gram.y:614 gram.y:670 +#: gram.y:677 gram.y:684 gram.y:692 gram.y:784 gram.y:791 gram.y:798 +#: gram.y:805 gram.y:812 gram.y:838 gram.y:845 gram.y:852 gram.y:1136 +#: gram.y:1143 plugins/sudoers/alias.c:123 plugins/sudoers/alias.c:136 +#: plugins/sudoers/auth/bsdauth.c:141 plugins/sudoers/auth/kerb5.c:119 +#: plugins/sudoers/auth/kerb5.c:145 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/auth/sia.c:59 +#: plugins/sudoers/defaults.c:518 plugins/sudoers/defaults.c:722 +#: plugins/sudoers/defaults.c:882 plugins/sudoers/editor.c:64 +#: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:92 +#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/iolog.c:586 +#: plugins/sudoers/iolog.c:618 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:446 plugins/sudoers/ldap.c:477 +#: plugins/sudoers/ldap.c:529 plugins/sudoers/ldap.c:562 +#: plugins/sudoers/ldap.c:917 plugins/sudoers/ldap.c:1064 +#: plugins/sudoers/ldap.c:1384 plugins/sudoers/ldap.c:1542 +#: plugins/sudoers/ldap.c:1620 plugins/sudoers/ldap.c:1756 +#: plugins/sudoers/ldap.c:1780 plugins/sudoers/ldap.c:1810 +#: plugins/sudoers/ldap.c:1863 plugins/sudoers/ldap.c:1878 +#: plugins/sudoers/ldap.c:1974 plugins/sudoers/ldap.c:2007 +#: plugins/sudoers/ldap.c:2160 plugins/sudoers/ldap.c:2257 +#: plugins/sudoers/ldap.c:3063 plugins/sudoers/ldap.c:3096 +#: plugins/sudoers/ldap.c:3407 plugins/sudoers/ldap.c:3435 +#: plugins/sudoers/ldap.c:3451 plugins/sudoers/ldap.c:3540 +#: plugins/sudoers/ldap.c:3556 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:666 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:508 +#: plugins/sudoers/match.c:544 plugins/sudoers/match.c:742 +#: plugins/sudoers/match.c:799 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:393 +#: plugins/sudoers/policy.c:602 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/sssd.c:160 plugins/sudoers/sssd.c:192 +#: plugins/sudoers/sssd.c:235 plugins/sudoers/sssd.c:242 +#: plugins/sudoers/sssd.c:278 plugins/sudoers/sssd.c:323 +#: plugins/sudoers/sssd.c:920 plugins/sudoers/sssd.c:1053 +#: plugins/sudoers/sudoers.c:159 plugins/sudoers/sudoers.c:294 +#: plugins/sudoers/sudoers.c:304 plugins/sudoers/sudoers.c:312 +#: plugins/sudoers/sudoers.c:365 plugins/sudoers/sudoers.c:663 +#: plugins/sudoers/sudoers.c:749 plugins/sudoers/sudoers.c:793 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:472 +#: plugins/sudoers/sudoreplay.c:668 plugins/sudoers/sudoreplay.c:780 +#: plugins/sudoers/sudoreplay.c:820 plugins/sudoers/sudoreplay.c:829 +#: plugins/sudoers/sudoreplay.c:839 plugins/sudoers/sudoreplay.c:847 +#: plugins/sudoers/sudoreplay.c:851 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1011 plugins/sudoers/testsudoers.c:130 +#: plugins/sudoers/testsudoers.c:188 plugins/sudoers/testsudoers.c:215 +#: plugins/sudoers/testsudoers.c:232 plugins/sudoers/timestamp.c:390 +#: plugins/sudoers/timestamp.c:426 plugins/sudoers/timestamp.c:838 +#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 +#: plugins/sudoers/toke_util.c:147 plugins/sudoers/visudo.c:152 +#: plugins/sudoers/visudo.c:213 plugins/sudoers/visudo.c:298 +#: plugins/sudoers/visudo.c:304 plugins/sudoers/visudo.c:434 +#: plugins/sudoers/visudo.c:980 plugins/sudoers/visudo.c:1024 +#: plugins/sudoers/visudo.c:1120 toke.l:785 toke.l:806 toke.l:816 toke.l:924 +#: toke.l:1082 +msgid "unable to allocate memory" +msgstr "не вдалося отримати потрібний об’єм пам’яті" + +#: gram.y:471 msgid "a digest requires a path name" msgstr "для контрольної суми слід вказати шлях" -#: plugins/sudoers/alias.c:136 +#: gram.y:1136 gram.y:1143 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/defaults.c:518 +#: plugins/sudoers/defaults.c:722 plugins/sudoers/defaults.c:882 +#: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 +#: plugins/sudoers/editor.c:92 plugins/sudoers/env.c:234 +#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 +#: plugins/sudoers/iolog.c:586 plugins/sudoers/iolog.c:618 +#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:446 +#: plugins/sudoers/ldap.c:477 plugins/sudoers/ldap.c:529 +#: plugins/sudoers/ldap.c:562 plugins/sudoers/ldap.c:917 +#: plugins/sudoers/ldap.c:1064 plugins/sudoers/ldap.c:1384 +#: plugins/sudoers/ldap.c:1542 plugins/sudoers/ldap.c:1620 +#: plugins/sudoers/ldap.c:1756 plugins/sudoers/ldap.c:1780 +#: plugins/sudoers/ldap.c:1810 plugins/sudoers/ldap.c:1863 +#: plugins/sudoers/ldap.c:1878 plugins/sudoers/ldap.c:1974 +#: plugins/sudoers/ldap.c:2007 plugins/sudoers/ldap.c:2160 +#: plugins/sudoers/ldap.c:2257 plugins/sudoers/ldap.c:3063 +#: plugins/sudoers/ldap.c:3096 plugins/sudoers/ldap.c:3407 +#: plugins/sudoers/ldap.c:3434 plugins/sudoers/ldap.c:3450 +#: plugins/sudoers/ldap.c:3540 plugins/sudoers/ldap.c:3556 +#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:508 +#: plugins/sudoers/match.c:544 plugins/sudoers/match.c:742 +#: plugins/sudoers/match.c:799 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:97 +#: plugins/sudoers/policy.c:106 plugins/sudoers/policy.c:115 +#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:250 +#: plugins/sudoers/policy.c:277 plugins/sudoers/policy.c:286 +#: plugins/sudoers/policy.c:325 plugins/sudoers/policy.c:335 +#: plugins/sudoers/policy.c:344 plugins/sudoers/policy.c:393 +#: plugins/sudoers/policy.c:602 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:160 +#: plugins/sudoers/sssd.c:192 plugins/sudoers/sssd.c:235 +#: plugins/sudoers/sssd.c:242 plugins/sudoers/sssd.c:278 +#: plugins/sudoers/sssd.c:323 plugins/sudoers/sssd.c:920 +#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sudoers.c:159 +#: plugins/sudoers/sudoers.c:294 plugins/sudoers/sudoers.c:304 +#: plugins/sudoers/sudoers.c:312 plugins/sudoers/sudoers.c:365 +#: plugins/sudoers/sudoers.c:663 plugins/sudoers/sudoers.c:749 +#: plugins/sudoers/sudoers.c:793 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sudoreplay.c:472 plugins/sudoers/sudoreplay.c:668 +#: plugins/sudoers/sudoreplay.c:780 plugins/sudoers/sudoreplay.c:820 +#: plugins/sudoers/sudoreplay.c:829 plugins/sudoers/sudoreplay.c:839 +#: plugins/sudoers/sudoreplay.c:847 plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:1007 plugins/sudoers/sudoreplay.c:1011 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:188 +#: plugins/sudoers/testsudoers.c:215 plugins/sudoers/testsudoers.c:232 +#: plugins/sudoers/timestamp.c:390 plugins/sudoers/timestamp.c:426 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:147 +#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:213 +#: plugins/sudoers/visudo.c:298 plugins/sudoers/visudo.c:304 +#: plugins/sudoers/visudo.c:434 plugins/sudoers/visudo.c:980 +#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1120 toke.l:785 +#: toke.l:806 toke.l:816 toke.l:924 toke.l:1082 +#, c-format +msgid "%s: %s" +msgstr "%s: %s" + +#: plugins/sudoers/alias.c:132 #, c-format msgid "Alias `%s' already defined" msgstr "Замінник «%s» вже визначено" -#: plugins/sudoers/auth/bsdauth.c:75 +#: plugins/sudoers/auth/bsdauth.c:68 #, c-format msgid "unable to get login class for user %s" msgstr "не вдалося отримати клас входу до системи для користувача %s" -#: plugins/sudoers/auth/bsdauth.c:80 +#: plugins/sudoers/auth/bsdauth.c:73 msgid "unable to begin bsd authentication" msgstr "не вдалося розпочати розпізнавання за BSD" -#: plugins/sudoers/auth/bsdauth.c:88 +#: plugins/sudoers/auth/bsdauth.c:81 msgid "invalid authentication type" msgstr "некоректний тип розпізнавання" -#: plugins/sudoers/auth/bsdauth.c:97 +#: plugins/sudoers/auth/bsdauth.c:90 msgid "unable to initialize BSD authentication" msgstr "не вдалося ініціалізувати розпізнавання за BSD" -#: plugins/sudoers/auth/fwtk.c:59 +#: plugins/sudoers/auth/fwtk.c:52 msgid "unable to read fwtk config" msgstr "не вдалося прочитати налаштування fwtk" -#: plugins/sudoers/auth/fwtk.c:64 +#: plugins/sudoers/auth/fwtk.c:57 msgid "unable to connect to authentication server" msgstr "не вдалося встановити з’єднання з сервером розпізнавання" -#: plugins/sudoers/auth/fwtk.c:70 plugins/sudoers/auth/fwtk.c:94 -#: plugins/sudoers/auth/fwtk.c:127 +#: plugins/sudoers/auth/fwtk.c:63 plugins/sudoers/auth/fwtk.c:87 +#: plugins/sudoers/auth/fwtk.c:121 msgid "lost connection to authentication server" msgstr "втрачено зв’язок з сервером розпізнавання" -#: plugins/sudoers/auth/fwtk.c:74 +#: plugins/sudoers/auth/fwtk.c:67 #, c-format msgid "" "authentication server error:\n" @@ -89,155 +215,155 @@ "помилка сервера розпізнавання:\n" "%s" -#: plugins/sudoers/auth/kerb5.c:116 +#: plugins/sudoers/auth/kerb5.c:111 #, c-format msgid "%s: unable to convert principal to string ('%s'): %s" msgstr "%s: не вдалося перетворити реєстраційний запис на рядок («%s»): %s" -#: plugins/sudoers/auth/kerb5.c:158 +#: plugins/sudoers/auth/kerb5.c:161 #, c-format msgid "%s: unable to parse '%s': %s" msgstr "%s: не вдалося обробити «%s»: %s" -#: plugins/sudoers/auth/kerb5.c:167 +#: plugins/sudoers/auth/kerb5.c:170 #, c-format msgid "%s: unable to resolve credential cache: %s" msgstr "%s: не вдалося визначити кеш реєстраційних даних: %s" -#: plugins/sudoers/auth/kerb5.c:214 +#: plugins/sudoers/auth/kerb5.c:217 #, c-format msgid "%s: unable to allocate options: %s" msgstr "%s: не вдалося розмістити параметри: %s" -#: plugins/sudoers/auth/kerb5.c:229 +#: plugins/sudoers/auth/kerb5.c:232 #, c-format msgid "%s: unable to get credentials: %s" msgstr "%s: не вдалося отримати реєстраційні дані: %s" -#: plugins/sudoers/auth/kerb5.c:242 +#: plugins/sudoers/auth/kerb5.c:245 #, c-format msgid "%s: unable to initialize credential cache: %s" msgstr "%s: не вдалося ініціалізувати кеш реєстраційних даних: %s" -#: plugins/sudoers/auth/kerb5.c:245 +#: plugins/sudoers/auth/kerb5.c:248 #, c-format msgid "%s: unable to store credential in cache: %s" msgstr "%s: не вдалося зберегти реєстраційні дані у кеші: %s" -#: plugins/sudoers/auth/kerb5.c:309 +#: plugins/sudoers/auth/kerb5.c:312 #, c-format msgid "%s: unable to get host principal: %s" msgstr "%s: не вдалося отримати реєстраційний запис вузла: %s" -#: plugins/sudoers/auth/kerb5.c:323 +#: plugins/sudoers/auth/kerb5.c:326 #, c-format msgid "%s: Cannot verify TGT! Possible attack!: %s" msgstr "%s: спроба перевірки TGT зазнала невдачі! Ймовірно, вас атаковано: %s" -#: plugins/sudoers/auth/pam.c:98 +#: plugins/sudoers/auth/pam.c:92 msgid "unable to initialize PAM" msgstr "не вдалося ініціалізувати PAM" -#: plugins/sudoers/auth/pam.c:149 +#: plugins/sudoers/auth/pam.c:164 msgid "account validation failure, is your account locked?" msgstr "помилка під час спроби перевірки облікового запису. Ваш обліковий запис заблоковано?" -#: plugins/sudoers/auth/pam.c:153 +#: plugins/sudoers/auth/pam.c:168 msgid "Account or password is expired, reset your password and try again" msgstr "Строк дії облікового запису або пароля збіг, визначте новий пароль і повторіть спробу" -#: plugins/sudoers/auth/pam.c:161 +#: plugins/sudoers/auth/pam.c:176 #, c-format msgid "unable to change expired password: %s" msgstr "не вдалося змінити пароль, строк дії якого завершився: %s" -#: plugins/sudoers/auth/pam.c:166 +#: plugins/sudoers/auth/pam.c:181 msgid "Password expired, contact your system administrator" msgstr "Строк дії пароля збіг, зверніться до адміністратора вашої системи щодо поновлення пароля" -#: plugins/sudoers/auth/pam.c:170 +#: plugins/sudoers/auth/pam.c:185 msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator" msgstr "Строк дії облікового запису збіг або у файлі налаштувань PAM немає розділу \"account\" для sudo. Повідомте про це адміністратора вашої системи." -#: plugins/sudoers/auth/pam.c:187 +#: plugins/sudoers/auth/pam.c:199 #, c-format msgid "PAM authentication error: %s" msgstr "Помилка розпізнавання PAM: %s" -#: plugins/sudoers/auth/rfc1938.c:103 plugins/sudoers/visudo.c:228 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:218 #, c-format msgid "you do not exist in the %s database" msgstr "вас немає у базі даних %s" -#: plugins/sudoers/auth/securid5.c:80 +#: plugins/sudoers/auth/securid5.c:73 msgid "failed to initialise the ACE API library" msgstr "не вдалося ініціалізувати бібліотеку програмного інтерфейсу до ACE" -#: plugins/sudoers/auth/securid5.c:106 +#: plugins/sudoers/auth/securid5.c:99 msgid "unable to contact the SecurID server" msgstr "не вдалося встановити зв’язок з сервером SecurID" -#: plugins/sudoers/auth/securid5.c:115 +#: plugins/sudoers/auth/securid5.c:108 msgid "User ID locked for SecurID Authentication" msgstr "Ідентифікатор користувача заблоковано для розпізнавання SecurID" -#: plugins/sudoers/auth/securid5.c:119 plugins/sudoers/auth/securid5.c:170 +#: plugins/sudoers/auth/securid5.c:112 plugins/sudoers/auth/securid5.c:163 msgid "invalid username length for SecurID" msgstr "некоректна довжина імені користувача для SecurID" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:175 +#: plugins/sudoers/auth/securid5.c:116 plugins/sudoers/auth/securid5.c:168 msgid "invalid Authentication Handle for SecurID" msgstr "некоректний дескриптор розпізнавання для SecurID" -#: plugins/sudoers/auth/securid5.c:127 +#: plugins/sudoers/auth/securid5.c:120 msgid "SecurID communication failed" msgstr "спроба обміну даними з SecurID зазнала невдачі" -#: plugins/sudoers/auth/securid5.c:131 plugins/sudoers/auth/securid5.c:214 +#: plugins/sudoers/auth/securid5.c:124 plugins/sudoers/auth/securid5.c:211 msgid "unknown SecurID error" msgstr "невідома помилка SecurID" -#: plugins/sudoers/auth/securid5.c:165 +#: plugins/sudoers/auth/securid5.c:158 msgid "invalid passcode length for SecurID" msgstr "некоректна довжина коду пароля для SecurID" -#: plugins/sudoers/auth/sia.c:123 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:125 msgid "unable to initialize SIA session" msgstr "не вдалося ініціалізувати сеанс SIA" -#: plugins/sudoers/auth/sudo_auth.c:115 +#: plugins/sudoers/auth/sudo_auth.c:126 msgid "invalid authentication methods" msgstr "некоректні способи розпізнавання" -#: plugins/sudoers/auth/sudo_auth.c:117 +#: plugins/sudoers/auth/sudo_auth.c:128 msgid "Invalid authentication methods compiled into sudo! You may not mix standalone and non-standalone authentication." msgstr "sudo зібрано з підтримкою некоректних способів розпізнавання! Не можна змішувати власні і зовнішні способи розпізнавання." -#: plugins/sudoers/auth/sudo_auth.c:203 plugins/sudoers/auth/sudo_auth.c:252 +#: plugins/sudoers/auth/sudo_auth.c:224 plugins/sudoers/auth/sudo_auth.c:274 msgid "no authentication methods" msgstr "немає способів розпізнавання" -#: plugins/sudoers/auth/sudo_auth.c:205 +#: plugins/sudoers/auth/sudo_auth.c:226 msgid "There are no authentication methods compiled into sudo! If you want to turn off authentication, use the --disable-authentication configure option." msgstr "sudo зібрано без можливостей з взаємодії з інструментами розпізнавання! Якщо ви хочете вимкнути розпізнавання, скористайтеся параметром налаштування --disable-authentication." -#: plugins/sudoers/auth/sudo_auth.c:254 +#: plugins/sudoers/auth/sudo_auth.c:276 msgid "Unable to initialize authentication methods." msgstr "Не вдалося ініціалізувати методи розпізнавання." -#: plugins/sudoers/auth/sudo_auth.c:412 +#: plugins/sudoers/auth/sudo_auth.c:442 msgid "Authentication methods:" msgstr "Способи розпізнавання:" -#: plugins/sudoers/bsm_audit.c:95 plugins/sudoers/bsm_audit.c:184 +#: plugins/sudoers/bsm_audit.c:111 plugins/sudoers/bsm_audit.c:200 msgid "Could not determine audit condition" msgstr "Не вдалося визначити умови аудита" -#: plugins/sudoers/bsm_audit.c:156 plugins/sudoers/bsm_audit.c:244 +#: plugins/sudoers/bsm_audit.c:172 plugins/sudoers/bsm_audit.c:260 msgid "unable to commit audit record" msgstr "не вдалося надіслати запис аудита" -#: plugins/sudoers/check.c:197 +#: plugins/sudoers/check.c:252 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -257,15 +383,15 @@ " #3) Користування широкими правами розширює сферу відповідальності.\n" "\n" -#: plugins/sudoers/check.c:240 plugins/sudoers/check.c:250 -#: plugins/sudoers/sudoers.c:599 plugins/sudoers/sudoers.c:628 +#: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 +#: plugins/sudoers/sudoers.c:699 plugins/sudoers/sudoers.c:728 #, c-format msgid "unknown uid: %u" msgstr "невідоме значення uid: %u" -#: plugins/sudoers/check.c:245 plugins/sudoers/policy.c:683 -#: plugins/sudoers/sudoers.c:955 plugins/sudoers/testsudoers.c:212 -#: plugins/sudoers/testsudoers.c:364 +#: plugins/sudoers/check.c:300 plugins/sudoers/policy.c:774 +#: plugins/sudoers/sudoers.c:1095 plugins/sudoers/testsudoers.c:206 +#: plugins/sudoers/testsudoers.c:361 #, c-format msgid "unknown user: %s" msgstr "невідомий користувач: %s" @@ -314,535 +440,550 @@ msgstr "Надсилати листа, якщо користувачеві заборонено виконувати команду" #: plugins/sudoers/def_data.c:67 +msgid "Send mail if the user tries to run a command" +msgstr "Надсилати листа, якщо користувач намагається віддати команду" + +#: plugins/sudoers/def_data.c:71 msgid "Use a separate timestamp for each user/tty combo" msgstr "Окремий часовий штамп для кожної комбінації користувач/tty" -#: plugins/sudoers/def_data.c:71 +#: plugins/sudoers/def_data.c:75 msgid "Lecture user the first time they run sudo" msgstr "Показувати настанови користувачеві під час першого запуску sudo" -#: plugins/sudoers/def_data.c:75 +#: plugins/sudoers/def_data.c:79 #, c-format msgid "File containing the sudo lecture: %s" msgstr "Файл з настановами щодо sudo: %s" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:83 msgid "Require users to authenticate by default" msgstr "Типово, вимагати розпізнавання" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:87 msgid "Root may run sudo" msgstr "Root може виконувати sudo" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:91 msgid "Log the hostname in the (non-syslog) log file" msgstr "Записувати назву вузла до файла журналу (не syslog)" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:95 msgid "Log the year in the (non-syslog) log file" msgstr "Записувати рік до файла журналу (не syslog)" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:99 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Якщо sudo викликано без параметрів, запускати командну оболонку" -#: plugins/sudoers/def_data.c:99 +#: plugins/sudoers/def_data.c:103 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Встановлювати $HOME відповідно до вказаного користувача для запуску оболонки з -s" -#: plugins/sudoers/def_data.c:103 +#: plugins/sudoers/def_data.c:107 msgid "Always set $HOME to the target user's home directory" msgstr "Завжди встановлювати значенням $HOME домашній каталог вказаного користувача" -#: plugins/sudoers/def_data.c:107 +#: plugins/sudoers/def_data.c:111 msgid "Allow some information gathering to give useful error messages" msgstr "Дозволити збирання даних з метою формування зрозумілих повідомлень про помилки" -#: plugins/sudoers/def_data.c:111 +#: plugins/sudoers/def_data.c:115 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "У файлі sudoers слід вказати повні назви вузлів" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:119 msgid "Insult the user when they enter an incorrect password" msgstr "Знущатися з користувача, якщо введено помилковий пароль" -#: plugins/sudoers/def_data.c:119 +#: plugins/sudoers/def_data.c:123 msgid "Only allow the user to run sudo if they have a tty" msgstr "Дозволяти користувачеві виконувати sudo, лише якщо з ним пов’язано tty" -#: plugins/sudoers/def_data.c:123 +#: plugins/sudoers/def_data.c:127 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo зважатимwill honor the EDITOR environment variable" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:131 msgid "Prompt for root's password, not the users's" msgstr "Надсилати запит на пароль root, а не користувача" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:135 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Надсилати запит щодо пароля runas_default, але пароля самого користувача" -#: plugins/sudoers/def_data.c:135 +#: plugins/sudoers/def_data.c:139 msgid "Prompt for the target user's password, not the users's" msgstr "Надсилати запит щодо пароля потрібного користувача, але пароля самого користувача" -#: plugins/sudoers/def_data.c:139 +#: plugins/sudoers/def_data.c:143 msgid "Apply defaults in the target user's login class if there is one" msgstr "Застосовувати типові параметри у класі вказаного користувача, якщо такий клас є" -#: plugins/sudoers/def_data.c:143 +#: plugins/sudoers/def_data.c:147 msgid "Set the LOGNAME and USER environment variables" msgstr "Встановити значення змінних середовища LOGNAME і USER" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:151 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Встановлювати для потрібного користувача ефективний uid, а не справжній uid" -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:155 msgid "Don't initialize the group vector to that of the target user" msgstr "Не ініціалізувати вектор групи відповідно до вказаного користувача" -#: plugins/sudoers/def_data.c:155 +#: plugins/sudoers/def_data.c:159 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Позиція, на якій слід переносити рядки файла журналу (0 — без перенесення): %u" -#: plugins/sudoers/def_data.c:159 +#: plugins/sudoers/def_data.c:163 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Час очікування на часовий штамп розпізнавання: %.1f хвилина" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:167 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Час очікування на введення пароля: %.1f хвилина" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:171 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Кількість спроб введення пароля: %u" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:175 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "Потрібне значення umask або 0777 для користувачевого: 0%o" -#: plugins/sudoers/def_data.c:175 +#: plugins/sudoers/def_data.c:179 #, c-format msgid "Path to log file: %s" msgstr "Шлях до файла журналу: %s" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:183 #, c-format msgid "Path to mail program: %s" msgstr "Шлях до програми ел. пошти: %s" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:187 #, c-format msgid "Flags for mail program: %s" msgstr "Параметри програми ел. пошти: %s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:191 #, c-format msgid "Address to send mail to: %s" msgstr "Адреса, на яку надсилатимуться листи: %s" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:195 #, c-format msgid "Address to send mail from: %s" msgstr "Адреса, з якої надсилатимуться листи: %s" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:199 #, c-format msgid "Subject line for mail messages: %s" msgstr "Тема листів: %s" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:203 #, c-format msgid "Incorrect password message: %s" msgstr "Повідомлення про помилковий пароль: %s" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:207 #, c-format msgid "Path to lecture status dir: %s" msgstr "Шлях до каталогу стану отримання настанов: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:211 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Шлях до каталогу часових штампів розпізнавання: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:215 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Власник каталогу часових штампів розпізнавання: %s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:219 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Користувачів цієї групи звільнено від потреби у введенні пароля і PATH: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:223 #, c-format msgid "Default password prompt: %s" msgstr "Типовий запит пароля: %s" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:227 msgid "If set, passprompt will override system prompt in all cases." msgstr "Якщо встановлено, запит щодо паролю замінюватиме запит системи." -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:231 #, c-format msgid "Default user to run commands as: %s" msgstr "Типовий користувач для запуску команд: %s" -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:235 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Значення для заміни $PATH користувача: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:239 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Шлях до редактора, який використовуватиме visudo: %s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:243 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Умови запиту пароля для псевдокоманди «list»: %s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:247 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Умови запиту пароля для псевдокоманди «verify»: %s" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:251 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Попередньо завантажувати фіктивні функції виконання з бібліотеки sudo_noexec" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:255 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Чи слід ігнорувати локальний файл sudoers, якщо є доступ до каталогу LDAP" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:259 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Дескриптори файлів >= %d буде закрито перед виконанням команди" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:263 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "Якщо встановлено, користувачі можуть перевизначати значення «closefrom» за допомогою параметра -C" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:267 msgid "Allow users to set arbitrary environment variables" msgstr "Дозволити користувачам встановлювати значення довільних змінних середовища" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:271 msgid "Reset the environment to a default set of variables" msgstr "Відновити типовий набір змінних середовища" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to check for sanity:" msgstr "Змінні середовища, коректність яких слід перевіряти:" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to remove:" msgstr "Змінні середовища, які слід вилучити:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:283 msgid "Environment variables to preserve:" msgstr "Змінні середовища, які слід зберегти:" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:287 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "Роль SELinux, яку слід використати у новому контексті захисту: %s" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:291 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "Тип SELinux, який слід використати у новому контексті захисту: %s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:295 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Шлях до специфічного для sudo файла середовища: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:299 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Локаль, яку слід використати під час обробки sudoers: %s" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:303 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Дозволити sudo надсилати запит щодо пароля, навіть якщо цей пароль буде видимим" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:307 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Супроводжувати введення користувачем пароля показом замінників символів пароля" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:311 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Швидше встановлення відповідності, менш точне, але без доступу до файлової системи" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:315 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:315 +#: plugins/sudoers/def_data.c:319 msgid "Log user's input for the command being run" msgstr "Записувати дані, вказані користувачем під час виконання команди" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:323 msgid "Log the output of the command being run" msgstr "Записувати дані, виведені командою під час виконання" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:327 msgid "Compress I/O logs using zlib" msgstr "Стискати журнали за допомогою zlib" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:331 msgid "Always run commands in a pseudo-tty" msgstr "Завжди запускати команди у псевдо-tty" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:335 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "Додаток для підтримки не-Unix груп: %s" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:339 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Каталог, у якому слід зберігати журнали введення/виведення: %s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:343 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Файл, у якому слід зберігати журнал введення/виведення даних: %s" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:347 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Додати запис до файла utmp/utmpx під час розміщення pty" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:351 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Встановити користувача у utmp у значення користувача, від імені якого виконується команда" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:355 msgid "Set of permitted privileges" msgstr "Набір дозвільних прав доступу" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:359 msgid "Set of limit privileges" msgstr "Набір обмежувальних прав доступу" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:363 msgid "Run commands on a pty in the background" msgstr "Виконувати команди у pty у фоновому режимі" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:367 msgid "PAM service name to use" msgstr "Назва служби PAM, якою слід скористатися" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:371 msgid "PAM service name to use for login shells" msgstr "Назва служби PAM, якою слід скористатися для оболонок входу до системи" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:375 msgid "Attempt to establish PAM credentials for the target user" msgstr "Спробувати встановити реєстраційні дані PAM для користувача, від імені якого виконуватимуться дії" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:379 msgid "Create a new PAM session for the command to run in" msgstr "Створити сеанс PAM для виконання команди" -#: plugins/sudoers/def_data.c:379 +#: plugins/sudoers/def_data.c:383 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Максимальний номер у послідовності журналу введення-виведення: %u" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:387 msgid "Enable sudoers netgroup support" msgstr "Увімкнути підтримку мережевих груп у sudoers" -#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:601 -#: plugins/sudoers/visudo_json.c:642 plugins/sudoers/visudo_json.c:677 +#: plugins/sudoers/def_data.c:391 +msgid "Check parent directories for writability when editing files with sudoedit" +msgstr "Перевіряти можливість запису до батьківського каталогу під час редагування фалів за допомогою sudoedit" + +#: plugins/sudoers/def_data.c:395 +msgid "Follow symbolic links when editing files with sudoedit" +msgstr "Переходити за символічними посиланнями під час редагування файлів за допомогою sudoedit" + +#: plugins/sudoers/def_data.c:399 +msgid "Query the group plugin for unknown system groups" +msgstr "Надсилати запит до додатка груп щодо невідомих груп системи" + +#: plugins/sudoers/def_data.c:403 +msgid "Match netgroups based on the entire tuple: user, host and domain" +msgstr "Встановлювати відповідність мережевим групам за усім кортежем даних: користувачем, вузлом і доменом" + +#: plugins/sudoers/defaults.c:199 plugins/sudoers/defaults.c:610 +#: plugins/sudoers/visudo_json.c:633 plugins/sudoers/visudo_json.c:668 #, c-format msgid "unknown defaults entry `%s'" msgstr "невідомий запис типових параметрів «%s»" -#: plugins/sudoers/defaults.c:218 plugins/sudoers/defaults.c:228 -#: plugins/sudoers/defaults.c:248 plugins/sudoers/defaults.c:261 -#: plugins/sudoers/defaults.c:274 plugins/sudoers/defaults.c:287 -#: plugins/sudoers/defaults.c:300 plugins/sudoers/defaults.c:320 -#: plugins/sudoers/defaults.c:330 +#: plugins/sudoers/defaults.c:207 plugins/sudoers/defaults.c:217 +#: plugins/sudoers/defaults.c:241 plugins/sudoers/defaults.c:256 +#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 +#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 +#: plugins/sudoers/defaults.c:325 #, c-format msgid "value `%s' is invalid for option `%s'" msgstr "значення «%s» є некоректним для параметра «%s»" -#: plugins/sudoers/defaults.c:221 plugins/sudoers/defaults.c:231 -#: plugins/sudoers/defaults.c:239 plugins/sudoers/defaults.c:256 -#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 -#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 -#: plugins/sudoers/defaults.c:326 +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:220 +#: plugins/sudoers/defaults.c:228 plugins/sudoers/defaults.c:251 +#: plugins/sudoers/defaults.c:264 plugins/sudoers/defaults.c:277 +#: plugins/sudoers/defaults.c:290 plugins/sudoers/defaults.c:310 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "no value specified for `%s'" msgstr "не вказано значення для «%s»" -#: plugins/sudoers/defaults.c:244 +#: plugins/sudoers/defaults.c:233 #, c-format msgid "values for `%s' must start with a '/'" msgstr "значення для «%s» має починатися з «/»" -#: plugins/sudoers/defaults.c:306 +#: plugins/sudoers/defaults.c:301 #, c-format msgid "option `%s' does not take a value" msgstr "параметру «%s» не потрібно передавати значення" -#: plugins/sudoers/env.c:276 plugins/sudoers/env.c:283 -#: plugins/sudoers/env.c:386 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:918 plugins/sudoers/policy.c:461 -#: plugins/sudoers/policy.c:470 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:708 plugins/sudoers/testsudoers.c:242 -#: plugins/sudoers/toke_util.c:174 +#: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 +#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:450 +#: plugins/sudoers/ldap.c:540 plugins/sudoers/ldap.c:1166 +#: plugins/sudoers/ldap.c:1388 plugins/sudoers/ldap.c:1704 +#: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:929 +#: plugins/sudoers/policy.c:511 plugins/sudoers/policy.c:520 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:815 +#: plugins/sudoers/testsudoers.c:236 plugins/sudoers/toke_util.c:162 #, c-format msgid "internal error, %s overflow" msgstr "внутрішня помилка, переповнення %s" -#: plugins/sudoers/env.c:359 +#: plugins/sudoers/env.c:377 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: помилкове значення envp, невідповідність довжин" -#: plugins/sudoers/env.c:1054 +#: plugins/sudoers/env.c:1083 +msgid "unable to rebuild the environment" +msgstr "не вдалося перебудувати середовище" + +#: plugins/sudoers/env.c:1157 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "вибачте, вам не дозволено встановлювати такі змінні середовища: %s" -#: plugins/sudoers/group_plugin.c:94 +#: plugins/sudoers/group_plugin.c:86 #, c-format msgid "%s must be owned by uid %d" msgstr "%s має належати користувачеві з uid %d" -#: plugins/sudoers/group_plugin.c:98 +#: plugins/sudoers/group_plugin.c:90 #, c-format msgid "%s must only be writable by owner" msgstr "%s має бути доступним до запису лише для власника" -#: plugins/sudoers/group_plugin.c:105 plugins/sudoers/sssd.c:251 +#: plugins/sudoers/group_plugin.c:98 plugins/sudoers/sssd.c:331 #, c-format msgid "unable to load %s: %s" msgstr "не вдалося завантажити %s: %s" -#: plugins/sudoers/group_plugin.c:110 +#: plugins/sudoers/group_plugin.c:104 #, 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:109 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s: несумісна основна версія додатка обробки груп %d, мало бути — %d" -#: plugins/sudoers/interfaces.c:116 +#: plugins/sudoers/interfaces.c:117 msgid "Local IP address and netmask pairs:\n" msgstr "Пари локальних IP-адрес і масок мережі:\n" -#: plugins/sudoers/iolog.c:101 plugins/sudoers/iolog.c:119 -#: plugins/sudoers/timestamp.c:233 +#: plugins/sudoers/iolog.c:92 plugins/sudoers/iolog.c:110 +#: plugins/sudoers/timestamp.c:169 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s існує, але не є каталогом (0%o)" -#: plugins/sudoers/iolog.c:112 plugins/sudoers/iolog.c:133 -#: plugins/sudoers/iolog.c:140 plugins/sudoers/timestamp.c:227 -#: plugins/sudoers/timestamp.c:248 +#: plugins/sudoers/iolog.c:103 plugins/sudoers/iolog.c:124 +#: plugins/sudoers/iolog.c:131 plugins/sudoers/timestamp.c:163 +#: plugins/sudoers/timestamp.c:184 #, c-format msgid "unable to mkdir %s" msgstr "не вдалося створити каталог %s" -#: plugins/sudoers/iolog.c:209 plugins/sudoers/sudoers.c:764 -#: plugins/sudoers/sudoreplay.c:348 plugins/sudoers/sudoreplay.c:819 -#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/timestamp.c:357 -#: plugins/sudoers/visudo.c:832 plugins/sudoers/visudo_json.c:1025 -#: plugins/sudoers/visudo_json.c:1038 +#: plugins/sudoers/iolog.c:200 plugins/sudoers/sudoers.c:871 +#: plugins/sudoers/sudoreplay.c:300 plugins/sudoers/sudoreplay.c:769 +#: plugins/sudoers/sudoreplay.c:973 plugins/sudoers/timestamp.c:399 +#: plugins/sudoers/visudo.c:904 plugins/sudoers/visudo_json.c:1012 +#: plugins/sudoers/visudo_json.c:1025 #, c-format msgid "unable to open %s" msgstr "не вдалося відкрити %s" -#: plugins/sudoers/iolog.c:250 plugins/sudoers/sudoers.c:768 -#: plugins/sudoers/sudoreplay.c:1123 +#: plugins/sudoers/iolog.c:241 plugins/sudoers/sudoers.c:875 +#: plugins/sudoers/sudoreplay.c:1084 #, c-format msgid "unable to read %s" msgstr "не вдалося прочитати %s" -#: plugins/sudoers/iolog.c:282 plugins/sudoers/sudoreplay.c:588 -#: plugins/sudoers/timestamp.c:186 plugins/sudoers/timestamp.c:189 +#: plugins/sudoers/iolog.c:277 plugins/sudoers/sudoreplay.c:550 +#: plugins/sudoers/timestamp.c:298 plugins/sudoers/timestamp.c:301 #, c-format msgid "unable to write to %s" msgstr "не вдалося виконати запис до %s" -#: plugins/sudoers/iolog.c:347 plugins/sudoers/iolog.c:545 +#: plugins/sudoers/iolog.c:342 plugins/sudoers/iolog.c:540 #, c-format msgid "unable to create %s" msgstr "не вдалося створити %s" -#: plugins/sudoers/ldap.c:406 +#: plugins/sudoers/iolog.c:723 +#, c-format +msgid "%s: internal error, file index %d not open" +msgstr "%s: внутрішня помилка, не вдалося відкрити файл з індексом %d" + +#: plugins/sudoers/ldap.c:428 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: занадто великий номер порту" -#: plugins/sudoers/ldap.c:431 -msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" -msgstr "sudo_ldap_conf_add_ports: вихід за межі розширеного буфера вузла" - -#: plugins/sudoers/ldap.c:464 +#: plugins/sudoers/ldap.c:488 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "непідтримуваний тип адреси LDAP: %s" -#: plugins/sudoers/ldap.c:495 +#: plugins/sudoers/ldap.c:515 msgid "unable to mix ldap and ldaps URIs" msgstr "не можна використовувати суміш з адрес ldap і ldaps" -#: plugins/sudoers/ldap.c:499 plugins/sudoers/ldap.c:532 +#: plugins/sudoers/ldap.c:519 plugins/sudoers/ldap.c:555 msgid "starttls not supported when using ldaps" msgstr "підтримки starttls, якщо використовується ldaps, не передбачено" -#: plugins/sudoers/ldap.c:517 -msgid "sudo_ldap_parse_uri: out of space building hostbuf" -msgstr "sudo_ldap_parse_uri: вихід за межі пам’яті під час побудови буфера вузла" - -#: plugins/sudoers/ldap.c:599 +#: plugins/sudoers/ldap.c:626 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "не вдалося ініціалізувати базу даних сертифікатів і ключів SSL: %s" -#: plugins/sudoers/ldap.c:602 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "щоб скористатися SSL, вам слід встановити для TLS_CERT значення %s" -#: plugins/sudoers/ldap.c:1093 +#: plugins/sudoers/ldap.c:1152 msgid "unable to get GMT time" msgstr "не вдалося отримати гринвіцький час" -#: plugins/sudoers/ldap.c:1099 +#: plugins/sudoers/ldap.c:1158 msgid "unable to format timestamp" msgstr "не вдалося виконати форматування часового штампа" -#: plugins/sudoers/ldap.c:1107 -msgid "unable to build time filter" -msgstr "не вдалося побудувати фільтр часу" - -#: plugins/sudoers/ldap.c:1326 -msgid "sudo_ldap_build_pass1 allocation mismatch" -msgstr "sudo_ldap_build_pass1: невідповідність розміщення" - -#: plugins/sudoers/ldap.c:1469 +#: plugins/sudoers/ldap.c:1853 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:1963 +#: plugins/sudoers/ldap.c:2394 #, c-format msgid "" "\n" @@ -851,7 +992,7 @@ "\n" "Роль LDAP: %s\n" -#: plugins/sudoers/ldap.c:1965 +#: plugins/sudoers/ldap.c:2396 #, c-format msgid "" "\n" @@ -860,108 +1001,108 @@ "\n" "Роль у LDAP: НЕВІДОМА\n" -#: plugins/sudoers/ldap.c:2012 +#: plugins/sudoers/ldap.c:2443 #, c-format msgid " Order: %s\n" msgstr " Порядок: %s\n" -#: plugins/sudoers/ldap.c:2020 plugins/sudoers/parse.c:512 -#: plugins/sudoers/sssd.c:1297 +#: plugins/sudoers/ldap.c:2451 plugins/sudoers/parse.c:555 +#: plugins/sudoers/sssd.c:1429 #, c-format msgid " Commands:\n" msgstr " Команди:\n" -#: plugins/sudoers/ldap.c:2570 +#: plugins/sudoers/ldap.c:3015 #, c-format msgid "unable to initialize LDAP: %s" msgstr "не вдалося ініціалізувати LDAP: %s" -#: plugins/sudoers/ldap.c:2612 +#: plugins/sudoers/ldap.c:3051 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:2845 +#: plugins/sudoers/ldap.c:3305 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "некоректний атрибут sudoOrder: %s" -#: plugins/sudoers/linux_audit.c:57 +#: plugins/sudoers/linux_audit.c:52 msgid "unable to open audit system" msgstr "не вдалося відкрити систему аудита" -#: plugins/sudoers/linux_audit.c:94 +#: plugins/sudoers/linux_audit.c:93 msgid "unable to send audit message" msgstr "не вдалося надіслати повідомлення аудита" -#: plugins/sudoers/logging.c:134 +#: plugins/sudoers/logging.c:106 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: plugins/sudoers/logging.c:162 +#: plugins/sudoers/logging.c:134 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s : (команда продовжується) %s" -#: plugins/sudoers/logging.c:187 +#: plugins/sudoers/logging.c:159 #, c-format msgid "unable to open log file: %s: %s" msgstr "не вдалося відкрити файл журналу: %s: %s" -#: plugins/sudoers/logging.c:190 +#: plugins/sudoers/logging.c:162 #, c-format msgid "unable to lock log file: %s: %s" msgstr "не вдалося заблокувати файл журналу: %s: %s" -#: plugins/sudoers/logging.c:242 +#: plugins/sudoers/logging.c:211 msgid "No user or host" msgstr "Немає користувача або вузла" -#: plugins/sudoers/logging.c:244 +#: plugins/sudoers/logging.c:213 msgid "validation failure" msgstr "помилка під час спроби перевірки" -#: plugins/sudoers/logging.c:251 +#: plugins/sudoers/logging.c:220 msgid "user NOT in sudoers" msgstr "користувача немає у списку sudoers" -#: plugins/sudoers/logging.c:253 +#: plugins/sudoers/logging.c:222 msgid "user NOT authorized on host" msgstr "користувача не уповноважено на дії на вузлі" -#: plugins/sudoers/logging.c:255 +#: plugins/sudoers/logging.c:224 msgid "command not allowed" msgstr "виконання команди заборонено" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:259 #, 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:262 #, 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:266 #, 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:269 #, 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:407 -#: plugins/sudoers/sudoers.c:409 plugins/sudoers/sudoers.c:411 -#: plugins/sudoers/sudoers.c:413 plugins/sudoers/sudoers.c:1128 -#: plugins/sudoers/sudoers.c:1129 +#: plugins/sudoers/logging.c:306 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1222 +#: plugins/sudoers/sudoers.c:1224 #, c-format msgid "%s: command not found" msgstr "%s: команду не знайдено" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:403 +#: plugins/sudoers/logging.c:308 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring `%s' found in '.'\n" @@ -970,15 +1111,15 @@ "пропущено «%s» знайдений у «.»\n" "Скористайтеся командою «sudo ./%s», якщо вам потрібно виконати саме «%s»." -#: plugins/sudoers/logging.c:353 +#: plugins/sudoers/logging.c:325 msgid "authentication failure" msgstr "помилка під час спроби розпізнавання" -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:351 msgid "a password is required" msgstr "слід вказати пароль" -#: plugins/sudoers/logging.c:446 plugins/sudoers/logging.c:501 +#: plugins/sudoers/logging.c:422 plugins/sudoers/logging.c:484 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" @@ -987,56 +1128,56 @@ msgstr[2] "%u невдалих спроб введення пароля" msgstr[3] "одна невдала спроба введення пароля" -#: plugins/sudoers/logging.c:584 +#: plugins/sudoers/logging.c:572 msgid "unable to fork" msgstr "не вдалося створити відгалуження" -#: plugins/sudoers/logging.c:592 plugins/sudoers/logging.c:648 +#: plugins/sudoers/logging.c:580 plugins/sudoers/logging.c:640 #, c-format msgid "unable to fork: %m" msgstr "не вдалося створити відгалуження: %m" -#: plugins/sudoers/logging.c:638 +#: plugins/sudoers/logging.c:630 #, c-format msgid "unable to open pipe: %m" msgstr "не вдалося відкрити канал: %m" -#: plugins/sudoers/logging.c:663 +#: plugins/sudoers/logging.c:655 #, c-format msgid "unable to dup stdin: %m" msgstr "не вдалося здублювати stdin: %m" -#: plugins/sudoers/logging.c:698 +#: plugins/sudoers/logging.c:693 #, c-format msgid "unable to execute %s: %m" msgstr "не вдалося виконати %s: %m" -#: plugins/sudoers/match.c:627 +#: plugins/sudoers/match.c:616 #, c-format msgid "unsupported digest type %d for %s" msgstr "непідтримуваний тип контрольної суми, %d, для %s" -#: plugins/sudoers/match.c:656 +#: plugins/sudoers/match.c:657 #, c-format msgid "%s: read error" msgstr "%s: помилка читання" -#: plugins/sudoers/match.c:670 +#: plugins/sudoers/match.c:692 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "контрольну суму для %s (%s) подано не у формі %s" -#: plugins/sudoers/parse.c:123 +#: plugins/sudoers/parse.c:114 #, c-format msgid "parse error in %s near line %d" msgstr "помилка обробки у %s поблизу рядка %d" -#: plugins/sudoers/parse.c:126 +#: plugins/sudoers/parse.c:117 #, c-format msgid "parse error in %s" msgstr "помилка обробки у %s" -#: plugins/sudoers/parse.c:459 +#: plugins/sudoers/parse.c:502 #, c-format msgid "" "\n" @@ -1045,49 +1186,41 @@ "\n" "Запис sudoers:\n" -#: plugins/sudoers/parse.c:460 +#: plugins/sudoers/parse.c:503 #, c-format msgid " RunAsUsers: " msgstr " Користувачі для запуску: " -#: plugins/sudoers/parse.c:474 +#: plugins/sudoers/parse.c:517 #, c-format msgid " RunAsGroups: " msgstr " Групи для запуску: " -#: plugins/sudoers/parse.c:483 +#: plugins/sudoers/parse.c:526 #, c-format msgid " Options: " msgstr " Параметри: " -#: plugins/sudoers/policy.c:109 plugins/sudoers/policy.c:118 -#: plugins/sudoers/policy.c:127 plugins/sudoers/policy.c:151 -#: plugins/sudoers/policy.c:263 plugins/sudoers/policy.c:283 -#: plugins/sudoers/policy.c:292 plugins/sudoers/policy.c:322 -#: plugins/sudoers/policy.c:332 plugins/sudoers/policy.c:341 -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" +#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:253 +msgid "unable to parse network address list" +msgstr "не вдалося обробити список мережевих адрес" -#: plugins/sudoers/policy.c:569 plugins/sudoers/visudo.c:773 +#: plugins/sudoers/policy.c:659 plugins/sudoers/visudo.c:841 #, c-format msgid "unable to execute %s" msgstr "не вдалося виконати %s" -#: plugins/sudoers/policy.c:701 +#: plugins/sudoers/policy.c:792 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Додаток правил sudoers версії %s\n" -#: plugins/sudoers/policy.c:703 +#: plugins/sudoers/policy.c:794 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Граматична перевірка файла sudoers версії %d\n" -#: plugins/sudoers/policy.c:707 +#: plugins/sudoers/policy.c:798 #, c-format msgid "" "\n" @@ -1096,374 +1229,411 @@ "\n" "Шлях до sudoers: %s\n" -#: plugins/sudoers/policy.c:710 +#: plugins/sudoers/policy.c:801 #, c-format msgid "nsswitch path: %s\n" msgstr "Шлях до nsswitch: %s\n" -#: plugins/sudoers/policy.c:712 +#: plugins/sudoers/policy.c:803 #, c-format msgid "ldap.conf path: %s\n" msgstr "Шлях до ldap.conf: %s\n" -#: plugins/sudoers/policy.c:713 +#: plugins/sudoers/policy.c:804 #, c-format msgid "ldap.secret path: %s\n" msgstr "Шлях до ldap.secret: %s\n" -#: plugins/sudoers/pwutil.c:149 +#: plugins/sudoers/policy.c:837 +#, c-format +msgid "unable to register hook of type %d (version %d.%d)" +msgstr "неможливо зареєструвати процедуру перехоплення типу %d (версія %d.%d)" + +#: plugins/sudoers/pwutil.c:158 plugins/sudoers/pwutil.c:176 +#, c-format +msgid "unable to cache uid %u, out of memory" +msgstr "не вдалося кешувати uid %u, не вистачає пам’яті" + +#: plugins/sudoers/pwutil.c:170 #, c-format msgid "unable to cache uid %u, already exists" msgstr "не вдалося кешувати uid %u, запис вже існує" -#: plugins/sudoers/pwutil.c:194 +#: plugins/sudoers/pwutil.c:222 plugins/sudoers/pwutil.c:239 +#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:334 +#, c-format +msgid "unable to cache user %s, out of memory" +msgstr "не вдалося кешувати користувача %s, не вистачає пам’яті" + +#: plugins/sudoers/pwutil.c:234 #, c-format msgid "unable to cache user %s, already exists" msgstr "не вдалося кешувати користувача %s, запис вже існує" -#: plugins/sudoers/pwutil.c:400 +#: plugins/sudoers/pwutil.c:474 plugins/sudoers/pwutil.c:492 +#, c-format +msgid "unable to cache gid %u, out of memory" +msgstr "не вдалося кешувати gid %u, не вистачає пам’яті" + +#: plugins/sudoers/pwutil.c:486 #, c-format msgid "unable to cache gid %u, already exists" msgstr "не вдалося кешувати gid %u, запис вже існує" -#: plugins/sudoers/pwutil.c:439 +#: plugins/sudoers/pwutil.c:532 plugins/sudoers/pwutil.c:549 +#: plugins/sudoers/pwutil.c:584 plugins/sudoers/pwutil.c:626 +#, c-format +msgid "unable to cache group %s, out of memory" +msgstr "не вдалося кешувати групу %s, не вистачає пам’яті" + +#: plugins/sudoers/pwutil.c:544 #, c-format msgid "unable to cache group %s, already exists" msgstr "не вдалося кешувати групу %s, запис вже існує" -#: plugins/sudoers/pwutil.c:605 plugins/sudoers/pwutil.c:631 +#: plugins/sudoers/pwutil.c:739 plugins/sudoers/pwutil.c:783 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "не вдалося кешувати список груп %s, запис вже існує" -#: plugins/sudoers/pwutil.c:627 +#: plugins/sudoers/pwutil.c:745 plugins/sudoers/pwutil.c:788 +#, c-format +msgid "unable to cache group list for %s, out of memory" +msgstr "не вдалося кешувати список груп %s, не вистачає пам’яті" + +#: plugins/sudoers/pwutil.c:777 #, c-format msgid "unable to parse groups for %s" msgstr "не вдалося обробити записи груп %s" -#: plugins/sudoers/set_perms.c:122 plugins/sudoers/set_perms.c:447 -#: plugins/sudoers/set_perms.c:850 plugins/sudoers/set_perms.c:1147 -#: plugins/sudoers/set_perms.c:1439 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 +#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 +#: plugins/sudoers/set_perms.c:1430 msgid "perm stack overflow" msgstr "переповнення стека доступу" -#: plugins/sudoers/set_perms.c:130 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:1076 -#: plugins/sudoers/set_perms.c:1155 plugins/sudoers/set_perms.c:1372 -#: plugins/sudoers/set_perms.c:1447 plugins/sudoers/set_perms.c:1536 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 +#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 +#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 +#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 +#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 msgid "perm stack underflow" msgstr "вичерпання стека доступу" -#: plugins/sudoers/set_perms.c:189 plugins/sudoers/set_perms.c:502 -#: plugins/sudoers/set_perms.c:1206 plugins/sudoers/set_perms.c:1479 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:493 +#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 msgid "unable to change to root gid" msgstr "не вдалося змінити ідентифікатор групи (gid) root" -#: plugins/sudoers/set_perms.c:278 plugins/sudoers/set_perms.c:599 -#: plugins/sudoers/set_perms.c:987 plugins/sudoers/set_perms.c:1283 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:590 +#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 msgid "unable to change to runas gid" msgstr "не вдалося змінити gid на runas" -#: plugins/sudoers/set_perms.c:283 plugins/sudoers/set_perms.c:604 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:595 +#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 msgid "unable to set runas group vector" msgstr "не вдалося встановити вектор групи виконання" -#: plugins/sudoers/set_perms.c:294 plugins/sudoers/set_perms.c:615 -#: plugins/sudoers/set_perms.c:1001 plugins/sudoers/set_perms.c:1297 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:606 +#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 msgid "unable to change to runas uid" msgstr "не вдалося змінити uid на runas" -#: plugins/sudoers/set_perms.c:312 plugins/sudoers/set_perms.c:633 -#: plugins/sudoers/set_perms.c:1017 plugins/sudoers/set_perms.c:1313 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:624 +#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 msgid "unable to change to sudoers gid" msgstr "не вдалося змінити gid на sudoers" -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 msgid "too many processes" msgstr "забагато процесів" -#: plugins/sudoers/solaris_audit.c:47 +#: plugins/sudoers/solaris_audit.c:51 msgid "unable to get current working directory" msgstr "не вдалося отримати поточний робочий каталог" -#: plugins/sudoers/solaris_audit.c:55 +#: plugins/sudoers/solaris_audit.c:59 #, c-format msgid "truncated audit path user_cmnd: %s" msgstr "обрізаний шлях аудиту user_cmnd: %s" -#: plugins/sudoers/solaris_audit.c:62 +#: plugins/sudoers/solaris_audit.c:66 #, c-format msgid "truncated audit path argv[0]: %s" msgstr "обрізаний шлях аудиту argv[0]: %s" -#: plugins/sudoers/solaris_audit.c:111 +#: plugins/sudoers/solaris_audit.c:115 msgid "audit_failure message too long" msgstr "повідомлення audit_failure є надто довгим" -#: plugins/sudoers/sssd.c:252 +#: plugins/sudoers/sssd.c:333 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "Не вдалося ініціалізувати джерело SSS. Чи встановлено у вашій системі SSSD?" -#: plugins/sudoers/sssd.c:259 plugins/sudoers/sssd.c:267 -#: plugins/sudoers/sssd.c:275 plugins/sudoers/sssd.c:283 -#: plugins/sudoers/sssd.c:291 +#: plugins/sudoers/sssd.c:341 plugins/sudoers/sssd.c:350 +#: plugins/sudoers/sssd.c:359 plugins/sudoers/sssd.c:368 +#: plugins/sudoers/sssd.c:377 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "не вдалося знайти символ «%s» у %s" -#: plugins/sudoers/sudo_nss.c:296 +#: plugins/sudoers/sudo_nss.c:290 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Відповідність записів Defaults для %s на %s:\n" -#: plugins/sudoers/sudo_nss.c:309 +#: plugins/sudoers/sudo_nss.c:308 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Типові значення для запуску від імені і команд для %s:\n" -#: plugins/sudoers/sudo_nss.c:322 +#: plugins/sudoers/sudo_nss.c:326 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "Користувач %s має право виконувати на %s такі команди:\n" -#: plugins/sudoers/sudo_nss.c:331 +#: plugins/sudoers/sudo_nss.c:339 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Користувач %s не має права виконувати sudo на %s.\n" -#: plugins/sudoers/sudoers.c:160 plugins/sudoers/sudoers.c:201 -#: plugins/sudoers/sudoers.c:726 +#: plugins/sudoers/sudoers.c:172 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/visudo.c:223 plugins/sudoers/visudo.c:567 +msgid "unable to initialize sudoers default values" +msgstr "не вдалося ініціалізувати типові значення sudoers" + +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:239 +#: plugins/sudoers/sudoers.c:833 msgid "problem with defaults entries" msgstr "проблема з типовими записами" -#: plugins/sudoers/sudoers.c:167 +#: plugins/sudoers/sudoers.c:205 msgid "no valid sudoers sources found, quitting" msgstr "не знайдено коректних джерел даних sudoers, завершення роботи" -#: plugins/sudoers/sudoers.c:233 +#: plugins/sudoers/sudoers.c:275 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers вказує, що sudo не можна користуватися для виконання команд від root" -#: plugins/sudoers/sudoers.c:278 +#: plugins/sudoers/sudoers.c:332 msgid "you are not permitted to use the -C option" msgstr "вам не дозволено використовувати параметр -C" -#: plugins/sudoers/sudoers.c:336 +#: plugins/sudoers/sudoers.c:396 #, c-format msgid "timestamp owner (%s): No such user" msgstr "власник часового штампа (%s): не знайдено користувача з таким іменем" -#: plugins/sudoers/sudoers.c:350 +#: plugins/sudoers/sudoers.c:410 msgid "no tty" msgstr "немає tty" -#: plugins/sudoers/sudoers.c:351 +#: plugins/sudoers/sudoers.c:411 msgid "sorry, you must have a tty to run sudo" msgstr "вибачте, для виконання sudo вашому користувачеві потрібен tty" -#: plugins/sudoers/sudoers.c:402 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "команда у поточному каталозі" -#: plugins/sudoers/sudoers.c:422 +#: plugins/sudoers/sudoers.c:486 msgid "sorry, you are not allowed to preserve the environment" msgstr "вибачте, вам не дозволено зберігати середовище" -#: plugins/sudoers/sudoers.c:674 +#: plugins/sudoers/sudoers.c:778 msgid "command too long" msgstr "надто довга команда" -#: plugins/sudoers/sudoers.c:779 plugins/sudoers/visudo.c:333 -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/sudoers.c:886 plugins/sudoers/visudo.c:427 +#: plugins/sudoers/visudo.c:667 #, c-format msgid "unable to stat %s" msgstr "не вдалося виконати stat для %s" -#: plugins/sudoers/sudoers.c:783 +#: plugins/sudoers/sudoers.c:890 #, c-format msgid "%s is not a regular file" msgstr "%s не є звичайним файлом" -#: plugins/sudoers/sudoers.c:787 plugins/sudoers/timestamp.c:289 toke.l:945 +#: plugins/sudoers/sudoers.c:894 plugins/sudoers/timestamp.c:225 toke.l:947 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s належить uid %u, має належати %u" -#: plugins/sudoers/sudoers.c:791 toke.l:952 +#: plugins/sudoers/sudoers.c:898 toke.l:954 #, c-format msgid "%s is world writable" msgstr "Запис до «%s» можливий для довільного користувача" -#: plugins/sudoers/sudoers.c:795 toke.l:957 +#: plugins/sudoers/sudoers.c:902 toke.l:959 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s належить gid %u, має належати %u" -#: plugins/sudoers/sudoers.c:826 +#: plugins/sudoers/sudoers.c:933 #, c-format msgid "only root can use `-c %s'" msgstr "використовувати «-c %s» може лише root" -#: plugins/sudoers/sudoers.c:845 +#: plugins/sudoers/sudoers.c:952 #, c-format msgid "unknown login class: %s" msgstr "невідомий клас входу: %s" -#: plugins/sudoers/sudoers.c:889 plugins/sudoers/sudoers.c:904 +#: plugins/sudoers/sudoers.c:1031 plugins/sudoers/sudoers.c:1059 #, c-format msgid "unable to resolve host %s" msgstr "не вдалося визначити адресу вузла %s" -#: plugins/sudoers/sudoers.c:986 plugins/sudoers/testsudoers.c:388 +#: plugins/sudoers/sudoers.c:1126 plugins/sudoers/testsudoers.c:385 #, c-format msgid "unknown group: %s" msgstr "невідома група: %s" -#: plugins/sudoers/sudoreplay.c:280 +#: plugins/sudoers/sudoreplay.c:232 #, c-format msgid "invalid filter option: %s" msgstr "некоректний параметр фільтрування: %s" -#: plugins/sudoers/sudoreplay.c:293 +#: plugins/sudoers/sudoreplay.c:245 #, c-format msgid "invalid max wait: %s" msgstr "некоректне значення макс. очікування: %s" -#: plugins/sudoers/sudoreplay.c:299 +#: plugins/sudoers/sudoreplay.c:251 #, c-format msgid "invalid speed factor: %s" msgstr "некоректний коефіцієнт швидкості: %s" -#: plugins/sudoers/sudoreplay.c:302 plugins/sudoers/visudo.c:190 +#: plugins/sudoers/sudoreplay.c:254 plugins/sudoers/visudo.c:180 #, c-format msgid "%s version %s\n" msgstr "%s, версія %s\n" -#: plugins/sudoers/sudoreplay.c:334 +#: plugins/sudoers/sudoreplay.c:286 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/timing: %s" -#: plugins/sudoers/sudoreplay.c:340 +#: plugins/sudoers/sudoreplay.c:292 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/timing: %s" -#: plugins/sudoers/sudoreplay.c:356 +#: plugins/sudoers/sudoreplay.c:308 #, c-format msgid "Replaying sudo session: %s\n" msgstr "Відтворення сеансу sudo: %s\n" -#: plugins/sudoers/sudoreplay.c:362 +#: plugins/sudoers/sudoreplay.c:314 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Попередження: розміри вашого термінала є замалими для належного показу журналу.\n" -#: plugins/sudoers/sudoreplay.c:363 +#: plugins/sudoers/sudoreplay.c:315 #, 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:418 +#: plugins/sudoers/sudoreplay.c:368 msgid "unable to set tty to raw mode" msgstr "не вдалося перевести tty у режим без обробки даних" -#: plugins/sudoers/sudoreplay.c:449 +#: plugins/sudoers/sudoreplay.c:401 #, c-format msgid "invalid timing file line: %s" msgstr "некоректний рядок у файлі timing: %s" -#: plugins/sudoers/sudoreplay.c:655 plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:611 plugins/sudoers/sudoreplay.c:636 #, c-format msgid "ambiguous expression \"%s\"" msgstr "неоднозначний вираз «%s»" -#: plugins/sudoers/sudoreplay.c:702 +#: plugins/sudoers/sudoreplay.c:658 msgid "unmatched ')' in expression" msgstr "зайва дужка, «)», у виразі" -#: plugins/sudoers/sudoreplay.c:706 +#: plugins/sudoers/sudoreplay.c:662 #, c-format msgid "unknown search term \"%s\"" msgstr "невідомий ключ пошуку «%s»" -#: plugins/sudoers/sudoreplay.c:720 +#: plugins/sudoers/sudoreplay.c:677 #, c-format msgid "%s requires an argument" msgstr "%s потребує визначення аргументу" -#: plugins/sudoers/sudoreplay.c:724 plugins/sudoers/sudoreplay.c:1096 +#: plugins/sudoers/sudoreplay.c:680 plugins/sudoers/sudoreplay.c:1060 #, c-format msgid "invalid regular expression: %s" msgstr "некоректний формальний вираз: %s" -#: plugins/sudoers/sudoreplay.c:730 +#: plugins/sudoers/sudoreplay.c:684 #, c-format msgid "could not parse date \"%s\"" msgstr "не вдалося обробити дату «%s»" -#: plugins/sudoers/sudoreplay.c:739 +#: plugins/sudoers/sudoreplay.c:693 msgid "unmatched '(' in expression" msgstr "зайва дужка, «(», у виразі" -#: plugins/sudoers/sudoreplay.c:741 +#: plugins/sudoers/sudoreplay.c:695 msgid "illegal trailing \"or\"" msgstr "помилкове завершальне «or»" -#: plugins/sudoers/sudoreplay.c:743 +#: plugins/sudoers/sudoreplay.c:697 msgid "illegal trailing \"!\"" msgstr "помилкове завершальне «!»" -#: plugins/sudoers/sudoreplay.c:796 +#: plugins/sudoers/sudoreplay.c:746 #, c-format msgid "unknown search type %d" msgstr "невідомий тип пошуку %d" -#: plugins/sudoers/sudoreplay.c:833 +#: plugins/sudoers/sudoreplay.c:784 #, c-format msgid "%s: invalid log file" msgstr "%s: некоректний файл журналу" -#: plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:802 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: не вказано даних щодо часової позначки" -#: plugins/sudoers/sudoreplay.c:858 +#: plugins/sudoers/sudoreplay.c:809 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: часова позначка %s: %s" -#: plugins/sudoers/sudoreplay.c:865 +#: plugins/sudoers/sudoreplay.c:816 #, c-format msgid "%s: user field is missing" msgstr "%s: не вказано даних щодо користувача" -#: plugins/sudoers/sudoreplay.c:873 +#: plugins/sudoers/sudoreplay.c:825 #, c-format msgid "%s: runas user field is missing" msgstr "%s: не вказано даних щодо користувача, від імені якого відбуватиметься виконання" -#: plugins/sudoers/sudoreplay.c:881 +#: plugins/sudoers/sudoreplay.c:834 #, c-format msgid "%s: runas group field is missing" msgstr "%s: не вказано даних щодо групи, від імені якої відбуватиметься виконання" -#: plugins/sudoers/sudoreplay.c:1236 +#: plugins/sudoers/sudoreplay.c:1197 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "користування: %s [-h] [-d каталог] [-m число] [-s число] ідентифікатор\n" -#: plugins/sudoers/sudoreplay.c:1239 +#: plugins/sudoers/sudoreplay.c:1200 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "використання: %s [-h] [-d каталог] -l [вираз для пошуку]\n" -#: plugins/sudoers/sudoreplay.c:1248 +#: plugins/sudoers/sudoreplay.c:1209 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1472,7 +1642,7 @@ "%s — відтворення журналів сеансів sudo\n" "\n" -#: plugins/sudoers/sudoreplay.c:1250 +#: plugins/sudoers/sudoreplay.c:1211 msgid "" "\n" "Options:\n" @@ -1494,11 +1664,11 @@ " -s, --speed=коеф_швидк коефіцієнт прискорення або сповільнення виводу даних\n" " -V, --version показати дані щодо версії і завершити роботу" -#: plugins/sudoers/testsudoers.c:327 +#: plugins/sudoers/testsudoers.c:324 msgid "\thost unmatched" msgstr "\tвідповідника вузла не знайдено" -#: plugins/sudoers/testsudoers.c:330 +#: plugins/sudoers/testsudoers.c:327 msgid "" "\n" "Command allowed" @@ -1506,7 +1676,7 @@ "\n" "Команду дозволено" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command denied" @@ -1514,7 +1684,7 @@ "\n" "Команду заборонено" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command unmatched" @@ -1522,114 +1692,129 @@ "\n" "Не знайдено відповідника команди" -#: plugins/sudoers/timestamp.c:197 -#, c-format -msgid "unable to truncate time stamp file to %lld bytes" -msgstr "не вдалося обрізати файл часової позначки до %lld байтів" - -#: plugins/sudoers/timestamp.c:297 +#: plugins/sudoers/timestamp.c:233 #, c-format msgid "%s is group writable" msgstr "%s доступний до запису учасниками групи" -#: plugins/sudoers/timestamp.c:318 +#: plugins/sudoers/timestamp.c:309 #, c-format -msgid "timestamp path too long: %s/%s" -msgstr "надто довгий шлях до часової позначки: %s/%s" +msgid "unable to truncate time stamp file to %lld bytes" +msgstr "не вдалося обрізати файл часової позначки до %lld байтів" + +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:488 plugins/sudoers/visudo.c:494 +msgid "unable to read the clock" +msgstr "не вдалося прочитати час на годиннику" -#: plugins/sudoers/timestamp.c:498 +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "ігноруємо часову позначку з майбутнього" -#: plugins/sudoers/timestamp.c:510 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "занадто далека часова позначка у майбутньому: %20.20s" -#: plugins/sudoers/timestamp.c:613 plugins/sudoers/timestamp.c:634 +#: plugins/sudoers/timestamp.c:863 +#, c-format +msgid "unable to lock time stamp file %s" +msgstr "не вдалося заблокувати файл часової позначки %s" + +#: plugins/sudoers/timestamp.c:906 plugins/sudoers/timestamp.c:926 #, c-format msgid "lecture status path too long: %s/%s" msgstr "шлях до даних щодо стану отримання настанов є занадто довгим: %s/%s" -#: plugins/sudoers/visudo.c:192 +#: plugins/sudoers/visudo.c:182 #, c-format msgid "%s grammar version %d\n" msgstr "Граматична перевірка %s, версія %d\n" -#: plugins/sudoers/visudo.c:263 plugins/sudoers/visudo.c:552 +#: plugins/sudoers/visudo.c:254 plugins/sudoers/visudo.c:619 #, c-format msgid "press return to edit %s: " msgstr "натисніть Enter для редагування %s: " -#: plugins/sudoers/visudo.c:349 plugins/sudoers/visudo.c:355 +#: plugins/sudoers/visudo.c:320 +#, c-format +msgid "specified editor (%s) doesn't exist" +msgstr "вказаного редактора (%s) не існує" + +#: plugins/sudoers/visudo.c:338 +#, c-format +msgid "no editor found (editor path = %s)" +msgstr "не знайдено жодного редактора (шлях до редактора = %s)" + +#: plugins/sudoers/visudo.c:447 plugins/sudoers/visudo.c:455 msgid "write error" msgstr "помилка запису" -#: plugins/sudoers/visudo.c:439 +#: plugins/sudoers/visudo.c:501 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "не вдалося обробити stat файл тимчасових даних (%s), %s не змінено" -#: plugins/sudoers/visudo.c:444 +#: plugins/sudoers/visudo.c:508 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "файл тимчасових даних має нульовий об’єм (%s), %s не змінено" -#: plugins/sudoers/visudo.c:450 +#: plugins/sudoers/visudo.c:514 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "помилка редактора (%s), %s не змінено" -#: plugins/sudoers/visudo.c:472 +#: plugins/sudoers/visudo.c:536 #, c-format msgid "%s unchanged" msgstr "%s не змінено" -#: plugins/sudoers/visudo.c:497 +#: plugins/sudoers/visudo.c:562 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "не вдалося повторно відкрити файл тимчасових даних (%s), %s не змінено." -#: plugins/sudoers/visudo.c:507 +#: plugins/sudoers/visudo.c:573 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "не вдалося обробити файл тимчасових даних (%s), невідома помилка" -#: plugins/sudoers/visudo.c:543 +#: plugins/sudoers/visudo.c:610 #, c-format msgid "internal error, unable to find %s in list!" msgstr "внутрішня помилка, не вдалося знайти %s у списку!" -#: plugins/sudoers/visudo.c:601 plugins/sudoers/visudo.c:610 +#: plugins/sudoers/visudo.c:669 plugins/sudoers/visudo.c:678 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "не вдалося встановити (uid, gid) %s у значення (%u, %u)" -#: plugins/sudoers/visudo.c:605 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:673 plugins/sudoers/visudo.c:683 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "не вдалося змінити режим доступу до %s на значення 0%o" -#: plugins/sudoers/visudo.c:632 +#: plugins/sudoers/visudo.c:700 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s і %s не перебувають у одній файловій системі, використовуємо mv для перейменування" -#: plugins/sudoers/visudo.c:646 +#: plugins/sudoers/visudo.c:714 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "помилка команди: «%s %s %s», %s не змінено" -#: plugins/sudoers/visudo.c:656 +#: plugins/sudoers/visudo.c:724 #, c-format msgid "error renaming %s, %s unchanged" msgstr "помилка перейменування %s, %s не змінено" -#: plugins/sudoers/visudo.c:718 +#: plugins/sudoers/visudo.c:786 msgid "What now? " msgstr "А зараз що? " -#: plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:800 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1641,87 +1826,72 @@ " (x) — вийти без внесення змін до файла sudoers\n" " (Q) — вийти зі збереженням файла sudoers (НЕБЕЗПЕЧНО!)\n" -#: plugins/sudoers/visudo.c:780 +#: plugins/sudoers/visudo.c:848 #, c-format msgid "unable to run %s" msgstr "не вдалося виконати %s" -#: plugins/sudoers/visudo.c:806 +#: plugins/sudoers/visudo.c:878 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: помилковий власник (uid, gid), має бути (%u, %u)\n" -#: plugins/sudoers/visudo.c:813 +#: plugins/sudoers/visudo.c:885 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: помилкові права доступу, режим доступу має бути 0%o\n" -#: plugins/sudoers/visudo.c:838 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:910 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "failed to parse %s file, unknown error" msgstr "не вдалося обробити файл %s, невідома помилка" -#: plugins/sudoers/visudo.c:854 plugins/sudoers/visudo_json.c:1054 +#: plugins/sudoers/visudo.c:926 plugins/sudoers/visudo_json.c:1041 #, c-format msgid "parse error in %s near line %d\n" msgstr "помилка обробки у %s поблизу рядка %d\n" -#: plugins/sudoers/visudo.c:857 plugins/sudoers/visudo_json.c:1057 +#: plugins/sudoers/visudo.c:929 plugins/sudoers/visudo_json.c:1044 #, c-format msgid "parse error in %s\n" msgstr "помилка обробки у %s\n" -#: plugins/sudoers/visudo.c:865 plugins/sudoers/visudo.c:872 +#: plugins/sudoers/visudo.c:937 plugins/sudoers/visudo.c:944 #, c-format msgid "%s: parsed OK\n" msgstr "%s: вдала обробка\n" -#: plugins/sudoers/visudo.c:918 +#: plugins/sudoers/visudo.c:991 #, c-format msgid "%s busy, try again later" msgstr "%s зайнято, повторіть спробу пізніше" -#: plugins/sudoers/visudo.c:962 -#, c-format -msgid "specified editor (%s) doesn't exist" -msgstr "вказаного редактора (%s) не існує" - -#: plugins/sudoers/visudo.c:985 -#, c-format -msgid "unable to stat editor (%s)" -msgstr "не вдалося виконати stat для редактора (%s)" - -#: plugins/sudoers/visudo.c:1033 -#, c-format -msgid "no editor found (editor path = %s)" -msgstr "не знайдено жодного редактора (шлях до редактора = %s)" - -#: plugins/sudoers/visudo.c:1136 +#: plugins/sudoers/visudo.c:1087 #, c-format msgid "Error: cycle in %s `%s'" msgstr "Помилка: цикл у %s «%s»" -#: plugins/sudoers/visudo.c:1137 +#: plugins/sudoers/visudo.c:1088 #, c-format msgid "Warning: cycle in %s `%s'" msgstr "Попередження: цикл у %s «%s»" -#: plugins/sudoers/visudo.c:1141 +#: plugins/sudoers/visudo.c:1092 #, c-format msgid "Error: %s `%s' referenced but not defined" msgstr "Помилка: виявлено посилання %s «%s», яке не визначено" -#: plugins/sudoers/visudo.c:1142 +#: plugins/sudoers/visudo.c:1093 #, c-format msgid "Warning: %s `%s' referenced but not defined" msgstr "Попередження: виявлено посилання %s «%s», яке не визначено" -#: plugins/sudoers/visudo.c:1281 +#: plugins/sudoers/visudo.c:1236 #, c-format msgid "Warning: unused %s `%s'" msgstr "Попередження: не використано %s «%s»" -#: plugins/sudoers/visudo.c:1394 +#: plugins/sudoers/visudo.c:1349 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -1730,7 +1900,7 @@ "%s — безпечне редагування файла sudoers\n" "\n" -#: plugins/sudoers/visudo.c:1396 +#: plugins/sudoers/visudo.c:1351 msgid "" "\n" "Options:\n" @@ -1752,15 +1922,33 @@ " -V, --version показати дані щодо версії і завершити роботу\n" " -x, --export=файл експортувати sudoers у форматі JSON до файла" -#: plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo_json.c:1018 #, c-format msgid "%s: input and output files must be different" msgstr "%s: файли вхідних і вихідних даних мають бути різними файлами" -#: toke.l:915 +#: toke.l:918 msgid "too many levels of includes" msgstr "занадто високий рівень вкладеності" +#~ msgid "unable allocate memory" +#~ msgstr "не вдалося отримати потрібний об’єм пам’яті" + +#~ msgid "timestamp path too long: %s/%s" +#~ msgstr "надто довгий шлях до часової позначки: %s/%s" + +#~ msgid "unable to stat editor (%s)" +#~ msgstr "не вдалося виконати stat для редактора (%s)" + +#~ msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" +#~ msgstr "sudo_ldap_conf_add_ports: вихід за межі розширеного буфера вузла" + +#~ msgid "sudo_ldap_parse_uri: out of space building hostbuf" +#~ msgstr "sudo_ldap_parse_uri: вихід за межі пам’яті під час побудови буфера вузла" + +#~ msgid "sudo_ldap_build_pass1 allocation mismatch" +#~ msgstr "sudo_ldap_build_pass1: невідповідність розміщення" + #~ msgid "Password:" #~ msgstr "Пароль:" @@ -1854,9 +2042,6 @@ #~ msgid ">>> %s: %s near line %d <<<" #~ msgstr ">>> %s: %s поблизу рядка %d <<<" -#~ msgid "unable to allocate memory" -#~ msgstr "не вдалося отримати потрібний об’єм пам’яті" - #~ msgid "unable to set locale to \"%s\", using \"C\"" #~ msgstr "не вдалося встановити локаль у значення «%s», використовуємо локаль «C»" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/plugins/sudoers/po/vi.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/plugins/sudoers/po/vi.mo differ diff -Nru sudo-1.8.12/plugins/sudoers/po/vi.po sudo-1.8.16/plugins/sudoers/po/vi.po --- sudo-1.8.12/plugins/sudoers/po/vi.po 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/po/vi.po 2016-03-17 16:13:10.000000000 +0000 @@ -1,14 +1,14 @@ # Vietnamese translation for sudo. # Bản dịch tiếng Việt dành cho sudo. # This file is put in the public domain. -# Trần Ngọc Quân , 2012-2014. +# Trần Ngọc Quân , 2012-2014, 2015, 2016. # msgid "" msgstr "" -"Project-Id-Version: sudoers-1.8.12b3\n" -"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-11-20 13:33-0700\n" -"PO-Revision-Date: 2014-11-22 14:08+0700\n" +"Project-Id-Version: sudoers 1.8.16b1\n" +"Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" +"POT-Creation-Date: 2016-02-19 15:48-0700\n" +"PO-Revision-Date: 2016-02-26 13:43+0700\n" "Last-Translator: Trần Ngọc Quân \n" "Language-Team: Vietnamese \n" "Language: vi\n" @@ -18,6 +18,7 @@ "Plural-Forms: nplurals=1; plural=0;\n" "X-Language-Team-Website: \n" "X-Poedit-SourceCharset: UTF-8\n" +"X-Generator: Gtranslator 2.91.7\n" #: confstr.sh:1 msgid "syntax error" @@ -43,46 +44,172 @@ msgid "Sorry, try again." msgstr "Rất tiếc, hãy thử lại." -#: gram.y:379 +#: gram.y:183 gram.y:201 gram.y:207 gram.y:213 gram.y:219 gram.y:225 +#: gram.y:241 gram.y:248 gram.y:255 gram.y:262 gram.y:269 gram.y:285 +#: gram.y:308 gram.y:315 gram.y:322 gram.y:329 gram.y:336 gram.y:391 +#: gram.y:399 gram.y:409 gram.y:439 gram.y:446 gram.y:453 gram.y:460 +#: gram.y:572 gram.y:579 gram.y:588 gram.y:597 gram.y:614 gram.y:670 +#: gram.y:677 gram.y:684 gram.y:692 gram.y:784 gram.y:791 gram.y:798 +#: gram.y:805 gram.y:812 gram.y:838 gram.y:845 gram.y:852 gram.y:1136 +#: gram.y:1143 plugins/sudoers/alias.c:123 plugins/sudoers/alias.c:136 +#: plugins/sudoers/auth/bsdauth.c:141 plugins/sudoers/auth/kerb5.c:119 +#: plugins/sudoers/auth/kerb5.c:145 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/auth/sia.c:59 +#: plugins/sudoers/defaults.c:518 plugins/sudoers/defaults.c:722 +#: plugins/sudoers/defaults.c:882 plugins/sudoers/editor.c:64 +#: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:92 +#: plugins/sudoers/env.c:234 plugins/sudoers/gc.c:52 +#: plugins/sudoers/group_plugin.c:134 plugins/sudoers/iolog.c:586 +#: plugins/sudoers/iolog.c:618 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:446 plugins/sudoers/ldap.c:477 +#: plugins/sudoers/ldap.c:529 plugins/sudoers/ldap.c:562 +#: plugins/sudoers/ldap.c:917 plugins/sudoers/ldap.c:1064 +#: plugins/sudoers/ldap.c:1384 plugins/sudoers/ldap.c:1542 +#: plugins/sudoers/ldap.c:1620 plugins/sudoers/ldap.c:1756 +#: plugins/sudoers/ldap.c:1780 plugins/sudoers/ldap.c:1810 +#: plugins/sudoers/ldap.c:1863 plugins/sudoers/ldap.c:1878 +#: plugins/sudoers/ldap.c:1974 plugins/sudoers/ldap.c:2007 +#: plugins/sudoers/ldap.c:2160 plugins/sudoers/ldap.c:2257 +#: plugins/sudoers/ldap.c:3063 plugins/sudoers/ldap.c:3096 +#: plugins/sudoers/ldap.c:3407 plugins/sudoers/ldap.c:3435 +#: plugins/sudoers/ldap.c:3451 plugins/sudoers/ldap.c:3540 +#: plugins/sudoers/ldap.c:3556 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:666 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:508 +#: plugins/sudoers/match.c:544 plugins/sudoers/match.c:742 +#: plugins/sudoers/match.c:799 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:393 +#: plugins/sudoers/policy.c:602 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/sssd.c:160 plugins/sudoers/sssd.c:192 +#: plugins/sudoers/sssd.c:235 plugins/sudoers/sssd.c:242 +#: plugins/sudoers/sssd.c:278 plugins/sudoers/sssd.c:323 +#: plugins/sudoers/sssd.c:920 plugins/sudoers/sssd.c:1053 +#: plugins/sudoers/sudoers.c:159 plugins/sudoers/sudoers.c:294 +#: plugins/sudoers/sudoers.c:304 plugins/sudoers/sudoers.c:312 +#: plugins/sudoers/sudoers.c:365 plugins/sudoers/sudoers.c:663 +#: plugins/sudoers/sudoers.c:749 plugins/sudoers/sudoers.c:793 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:472 +#: plugins/sudoers/sudoreplay.c:668 plugins/sudoers/sudoreplay.c:780 +#: plugins/sudoers/sudoreplay.c:820 plugins/sudoers/sudoreplay.c:829 +#: plugins/sudoers/sudoreplay.c:839 plugins/sudoers/sudoreplay.c:847 +#: plugins/sudoers/sudoreplay.c:851 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1011 plugins/sudoers/testsudoers.c:130 +#: plugins/sudoers/testsudoers.c:188 plugins/sudoers/testsudoers.c:215 +#: plugins/sudoers/testsudoers.c:232 plugins/sudoers/timestamp.c:390 +#: plugins/sudoers/timestamp.c:426 plugins/sudoers/timestamp.c:838 +#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 +#: plugins/sudoers/toke_util.c:147 plugins/sudoers/visudo.c:152 +#: plugins/sudoers/visudo.c:213 plugins/sudoers/visudo.c:298 +#: plugins/sudoers/visudo.c:304 plugins/sudoers/visudo.c:434 +#: plugins/sudoers/visudo.c:980 plugins/sudoers/visudo.c:1024 +#: plugins/sudoers/visudo.c:1120 toke.l:785 toke.l:806 toke.l:816 toke.l:924 +#: toke.l:1082 +msgid "unable to allocate memory" +msgstr "không thể cấp phát bộ nhớ" + +#: gram.y:471 msgid "a digest requires a path name" msgstr "tóm lược yêu cầu một đối số là tên đường dẫn" -#: plugins/sudoers/alias.c:136 +#: gram.y:1136 gram.y:1143 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/rfc1938.c:109 plugins/sudoers/defaults.c:518 +#: plugins/sudoers/defaults.c:722 plugins/sudoers/defaults.c:882 +#: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 +#: plugins/sudoers/editor.c:92 plugins/sudoers/env.c:234 +#: plugins/sudoers/gc.c:52 plugins/sudoers/group_plugin.c:134 +#: plugins/sudoers/iolog.c:586 plugins/sudoers/iolog.c:618 +#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:446 +#: plugins/sudoers/ldap.c:477 plugins/sudoers/ldap.c:529 +#: plugins/sudoers/ldap.c:562 plugins/sudoers/ldap.c:917 +#: plugins/sudoers/ldap.c:1064 plugins/sudoers/ldap.c:1384 +#: plugins/sudoers/ldap.c:1542 plugins/sudoers/ldap.c:1620 +#: plugins/sudoers/ldap.c:1756 plugins/sudoers/ldap.c:1780 +#: plugins/sudoers/ldap.c:1810 plugins/sudoers/ldap.c:1863 +#: plugins/sudoers/ldap.c:1878 plugins/sudoers/ldap.c:1974 +#: plugins/sudoers/ldap.c:2007 plugins/sudoers/ldap.c:2160 +#: plugins/sudoers/ldap.c:2257 plugins/sudoers/ldap.c:3063 +#: plugins/sudoers/ldap.c:3096 plugins/sudoers/ldap.c:3407 +#: plugins/sudoers/ldap.c:3434 plugins/sudoers/ldap.c:3450 +#: plugins/sudoers/ldap.c:3540 plugins/sudoers/ldap.c:3556 +#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:508 +#: plugins/sudoers/match.c:544 plugins/sudoers/match.c:742 +#: plugins/sudoers/match.c:799 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:97 +#: plugins/sudoers/policy.c:106 plugins/sudoers/policy.c:115 +#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:250 +#: plugins/sudoers/policy.c:277 plugins/sudoers/policy.c:286 +#: plugins/sudoers/policy.c:325 plugins/sudoers/policy.c:335 +#: plugins/sudoers/policy.c:344 plugins/sudoers/policy.c:393 +#: plugins/sudoers/policy.c:602 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:160 +#: plugins/sudoers/sssd.c:192 plugins/sudoers/sssd.c:235 +#: plugins/sudoers/sssd.c:242 plugins/sudoers/sssd.c:278 +#: plugins/sudoers/sssd.c:323 plugins/sudoers/sssd.c:920 +#: plugins/sudoers/sssd.c:1053 plugins/sudoers/sudoers.c:159 +#: plugins/sudoers/sudoers.c:294 plugins/sudoers/sudoers.c:304 +#: plugins/sudoers/sudoers.c:312 plugins/sudoers/sudoers.c:365 +#: plugins/sudoers/sudoers.c:663 plugins/sudoers/sudoers.c:749 +#: plugins/sudoers/sudoers.c:793 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sudoreplay.c:472 plugins/sudoers/sudoreplay.c:668 +#: plugins/sudoers/sudoreplay.c:780 plugins/sudoers/sudoreplay.c:820 +#: plugins/sudoers/sudoreplay.c:829 plugins/sudoers/sudoreplay.c:839 +#: plugins/sudoers/sudoreplay.c:847 plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:1007 plugins/sudoers/sudoreplay.c:1011 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:188 +#: plugins/sudoers/testsudoers.c:215 plugins/sudoers/testsudoers.c:232 +#: plugins/sudoers/timestamp.c:390 plugins/sudoers/timestamp.c:426 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:147 +#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:213 +#: plugins/sudoers/visudo.c:298 plugins/sudoers/visudo.c:304 +#: plugins/sudoers/visudo.c:434 plugins/sudoers/visudo.c:980 +#: plugins/sudoers/visudo.c:1024 plugins/sudoers/visudo.c:1120 toke.l:785 +#: toke.l:806 toke.l:816 toke.l:924 toke.l:1082 +#, c-format +msgid "%s: %s" +msgstr "%s: %s" + +#: plugins/sudoers/alias.c:132 #, c-format msgid "Alias `%s' already defined" msgstr "Bí danh “%s” đã được định nghĩa rồi" -#: plugins/sudoers/auth/bsdauth.c:75 +#: plugins/sudoers/auth/bsdauth.c:68 #, c-format msgid "unable to get login class for user %s" msgstr "không thể lấy lớp đăng nhập cho tài khoản %s" -#: plugins/sudoers/auth/bsdauth.c:80 +#: plugins/sudoers/auth/bsdauth.c:73 msgid "unable to begin bsd authentication" msgstr "không thể khởi chạy xác thực kiểu bsd" -#: plugins/sudoers/auth/bsdauth.c:88 +#: plugins/sudoers/auth/bsdauth.c:81 msgid "invalid authentication type" msgstr "kiểu xác thực không hợp lệ" -#: plugins/sudoers/auth/bsdauth.c:97 +#: plugins/sudoers/auth/bsdauth.c:90 msgid "unable to initialize BSD authentication" msgstr "không thể khởi tạo xác thực kiểu BSD" -#: plugins/sudoers/auth/fwtk.c:59 +#: plugins/sudoers/auth/fwtk.c:52 msgid "unable to read fwtk config" msgstr "không thể đọc cấu hình fwtk" -#: plugins/sudoers/auth/fwtk.c:64 +#: plugins/sudoers/auth/fwtk.c:57 msgid "unable to connect to authentication server" msgstr "không thể kết nối tới máy chủ xác thực" -#: plugins/sudoers/auth/fwtk.c:70 plugins/sudoers/auth/fwtk.c:94 -#: plugins/sudoers/auth/fwtk.c:127 +#: plugins/sudoers/auth/fwtk.c:63 plugins/sudoers/auth/fwtk.c:87 +#: plugins/sudoers/auth/fwtk.c:121 msgid "lost connection to authentication server" msgstr "mất kết nối đến máy phục vụ xác thực" -#: plugins/sudoers/auth/fwtk.c:74 +#: plugins/sudoers/auth/fwtk.c:67 #, c-format msgid "" "authentication server error:\n" @@ -91,155 +218,155 @@ "lỗi máy phục vụ xác thực:\n" "%s" -#: plugins/sudoers/auth/kerb5.c:116 +#: plugins/sudoers/auth/kerb5.c:111 #, c-format msgid "%s: unable to convert principal to string ('%s'): %s" msgstr "%s: không thể chuyển đổi người ủy nhiệm sang chuỗi (“%s”): %s" -#: plugins/sudoers/auth/kerb5.c:158 +#: plugins/sudoers/auth/kerb5.c:161 #, c-format msgid "%s: unable to parse '%s': %s" msgstr "%s: không thể phân tích “%s”: %s" -#: plugins/sudoers/auth/kerb5.c:167 +#: plugins/sudoers/auth/kerb5.c:170 #, c-format msgid "%s: unable to resolve credential cache: %s" msgstr "%s: không thể phân giải bộ nhớ đệm “credential”: %s" -#: plugins/sudoers/auth/kerb5.c:214 +#: plugins/sudoers/auth/kerb5.c:217 #, c-format msgid "%s: unable to allocate options: %s" msgstr "%s: không thể phân bổ các tùy chọn: %s" -#: plugins/sudoers/auth/kerb5.c:229 +#: plugins/sudoers/auth/kerb5.c:232 #, c-format msgid "%s: unable to get credentials: %s" msgstr "%s: không thể lấy giấy ủy nhiệm: %s" -#: plugins/sudoers/auth/kerb5.c:242 +#: plugins/sudoers/auth/kerb5.c:245 #, c-format msgid "%s: unable to initialize credential cache: %s" msgstr "%s: không thể khởi tạo bộ nhớ đệm “credential”: %s" -#: plugins/sudoers/auth/kerb5.c:245 +#: plugins/sudoers/auth/kerb5.c:248 #, c-format msgid "%s: unable to store credential in cache: %s" msgstr "%s: không thể cất giữ “credential” trong bộ nhớ tạm: %s" -#: plugins/sudoers/auth/kerb5.c:309 +#: plugins/sudoers/auth/kerb5.c:312 #, c-format msgid "%s: unable to get host principal: %s" msgstr "%s: không thể lấy tên máy chủ chính: %s" -#: plugins/sudoers/auth/kerb5.c:323 +#: plugins/sudoers/auth/kerb5.c:326 #, c-format msgid "%s: Cannot verify TGT! Possible attack!: %s" msgstr "%s: Không thể thẩm tra TGT! Gần như chắc chắn là bị tấn công!: %s" -#: plugins/sudoers/auth/pam.c:98 +#: plugins/sudoers/auth/pam.c:92 msgid "unable to initialize PAM" msgstr "không thể khởi tạo PAM" -#: plugins/sudoers/auth/pam.c:149 +#: plugins/sudoers/auth/pam.c:164 msgid "account validation failure, is your account locked?" msgstr "xác thực tài khoản gặp lỗi nghiêm trọng, có phải tài khoản của bạn đã bị khóa?" -#: plugins/sudoers/auth/pam.c:153 +#: plugins/sudoers/auth/pam.c:168 msgid "Account or password is expired, reset your password and try again" msgstr "Mật khẩu hay tài khoản đã hết hạn sử dụng, hãy đặt lại mật khẩu của bạn và thử lại" -#: plugins/sudoers/auth/pam.c:161 +#: plugins/sudoers/auth/pam.c:176 #, c-format msgid "unable to change expired password: %s" msgstr "không thể thay đổi mật khẩu đã hết hạn: %s" -#: plugins/sudoers/auth/pam.c:166 +#: plugins/sudoers/auth/pam.c:181 msgid "Password expired, contact your system administrator" msgstr "Mật khẩu đã hết hạn dùng, hãy liên lạc với người quản trị hệ thống của bạn" -#: plugins/sudoers/auth/pam.c:170 +#: plugins/sudoers/auth/pam.c:185 msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator" msgstr "Tài khoản hết hạn hoặc cấu hình PAM không có phiên “tài khoản” cho sudo, hãy liên hệ với người quản trị hệ thống của bạn" -#: plugins/sudoers/auth/pam.c:187 +#: plugins/sudoers/auth/pam.c:199 #, c-format msgid "PAM authentication error: %s" msgstr "lỗi xác thực PAM: %s" -#: plugins/sudoers/auth/rfc1938.c:103 plugins/sudoers/visudo.c:228 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:218 #, c-format msgid "you do not exist in the %s database" msgstr "bạn không tồn tại trong cơ sở dữ liệu %s" -#: plugins/sudoers/auth/securid5.c:80 +#: plugins/sudoers/auth/securid5.c:73 msgid "failed to initialise the ACE API library" msgstr "gặp lỗi khi khởi tạo thư viện “ACE API”" -#: plugins/sudoers/auth/securid5.c:106 +#: plugins/sudoers/auth/securid5.c:99 msgid "unable to contact the SecurID server" msgstr "không thể liên lạc được với máy chủ SecurID" -#: plugins/sudoers/auth/securid5.c:115 +#: plugins/sudoers/auth/securid5.c:108 msgid "User ID locked for SecurID Authentication" msgstr "ID người dùng bị khóa với “SecurID Authentication”" -#: plugins/sudoers/auth/securid5.c:119 plugins/sudoers/auth/securid5.c:170 +#: plugins/sudoers/auth/securid5.c:112 plugins/sudoers/auth/securid5.c:163 msgid "invalid username length for SecurID" msgstr "sai chiều dài tên tài khoản cho SecurID" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:175 +#: plugins/sudoers/auth/securid5.c:116 plugins/sudoers/auth/securid5.c:168 msgid "invalid Authentication Handle for SecurID" msgstr "sai Bộ Tiếp Hợp Xác Thực cho SecurID" -#: plugins/sudoers/auth/securid5.c:127 +#: plugins/sudoers/auth/securid5.c:120 msgid "SecurID communication failed" msgstr "Truyền thông với SecurID gặp lỗi" -#: plugins/sudoers/auth/securid5.c:131 plugins/sudoers/auth/securid5.c:214 +#: plugins/sudoers/auth/securid5.c:124 plugins/sudoers/auth/securid5.c:211 msgid "unknown SecurID error" msgstr "không hiểu lỗi SecurID" -#: plugins/sudoers/auth/securid5.c:165 +#: plugins/sudoers/auth/securid5.c:158 msgid "invalid passcode length for SecurID" msgstr "sai chiều dài passcode cho SecurID" -#: plugins/sudoers/auth/sia.c:123 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:125 msgid "unable to initialize SIA session" msgstr "không thể khởi tạo phiên SIA" -#: plugins/sudoers/auth/sudo_auth.c:115 +#: plugins/sudoers/auth/sudo_auth.c:126 msgid "invalid authentication methods" msgstr "Phương thức xác thực không hợp lệ" -#: plugins/sudoers/auth/sudo_auth.c:117 +#: plugins/sudoers/auth/sudo_auth.c:128 msgid "Invalid authentication methods compiled into sudo! You may not mix standalone and non-standalone authentication." msgstr "Phương thức xác thực không hợp lệ được biên dịch vào trong sudo! Bạn không thể pha trộn kiểu xác thực giữa standalone và non-standalone" -#: plugins/sudoers/auth/sudo_auth.c:203 plugins/sudoers/auth/sudo_auth.c:252 +#: plugins/sudoers/auth/sudo_auth.c:224 plugins/sudoers/auth/sudo_auth.c:274 msgid "no authentication methods" msgstr "chưa có phương thức xác thực" -#: plugins/sudoers/auth/sudo_auth.c:205 +#: plugins/sudoers/auth/sudo_auth.c:226 msgid "There are no authentication methods compiled into sudo! If you want to turn off authentication, use the --disable-authentication configure option." msgstr "Ở đây không có phương thức xác thực nào được dịch vào trong sudo! Nếu bạn muốn tắt xác thực, sử dụng tùy chọn cấu hình --disable-authentication" -#: plugins/sudoers/auth/sudo_auth.c:254 +#: plugins/sudoers/auth/sudo_auth.c:276 msgid "Unable to initialize authentication methods." msgstr "Không thể khởi tạo phương thức xác thực." -#: plugins/sudoers/auth/sudo_auth.c:412 +#: plugins/sudoers/auth/sudo_auth.c:442 msgid "Authentication methods:" msgstr "Phương thức xác thực:" -#: plugins/sudoers/bsm_audit.c:95 plugins/sudoers/bsm_audit.c:184 +#: plugins/sudoers/bsm_audit.c:111 plugins/sudoers/bsm_audit.c:200 msgid "Could not determine audit condition" msgstr "Không thể phân giải điều kiện audit" -#: plugins/sudoers/bsm_audit.c:156 plugins/sudoers/bsm_audit.c:244 +#: plugins/sudoers/bsm_audit.c:172 plugins/sudoers/bsm_audit.c:260 msgid "unable to commit audit record" msgstr "không thể chuyển giao bản ghi “audit”" -#: plugins/sudoers/check.c:197 +#: plugins/sudoers/check.c:252 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -259,15 +386,15 @@ " #3) Quyền lực lớn đi kèm với trách nhiệm lớn.\n" "\n" -#: plugins/sudoers/check.c:240 plugins/sudoers/check.c:250 -#: plugins/sudoers/sudoers.c:599 plugins/sudoers/sudoers.c:628 +#: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 +#: plugins/sudoers/sudoers.c:699 plugins/sudoers/sudoers.c:728 #, c-format msgid "unknown uid: %u" msgstr "không biết mã số người dùng: %u" -#: plugins/sudoers/check.c:245 plugins/sudoers/policy.c:683 -#: plugins/sudoers/sudoers.c:955 plugins/sudoers/testsudoers.c:212 -#: plugins/sudoers/testsudoers.c:364 +#: plugins/sudoers/check.c:300 plugins/sudoers/policy.c:774 +#: plugins/sudoers/sudoers.c:1095 plugins/sudoers/testsudoers.c:206 +#: plugins/sudoers/testsudoers.c:361 #, c-format msgid "unknown user: %s" msgstr "không biết người dùng: %s" @@ -316,535 +443,550 @@ msgstr "Gửi thư nếu người dùng không được phép chạy lệnh nào đó" #: plugins/sudoers/def_data.c:67 +msgid "Send mail if the user tries to run a command" +msgstr "Gửi thư nếu người cố chạy lệnh nào đó" + +#: plugins/sudoers/def_data.c:71 msgid "Use a separate timestamp for each user/tty combo" msgstr "Sử dụng dấu vết thời gian riêng rẽ cho từng cặp tkhoản/tty" -#: plugins/sudoers/def_data.c:71 +#: plugins/sudoers/def_data.c:75 msgid "Lecture user the first time they run sudo" msgstr "Hướng dẫn người dùng lần đầu tiên họ chạy lệnh sudo" -#: plugins/sudoers/def_data.c:75 +#: plugins/sudoers/def_data.c:79 #, c-format msgid "File containing the sudo lecture: %s" msgstr "TẬP-TIN chứa thuyết trình về “sudo”: %s" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:83 msgid "Require users to authenticate by default" msgstr "Yêu cầu người dùng chứng thực theo mặc định" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:87 msgid "Root may run sudo" msgstr "Siêu người dùng (root) có thể chạy lệnh sudo" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:91 msgid "Log the hostname in the (non-syslog) log file" msgstr "Ghi nhật ký tên-máy-chủ vào tập tin nhật ký (không dùng syslog)" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:95 msgid "Log the year in the (non-syslog) log file" msgstr "Ghi nhật ký năm vào tập tin nhật ký (không dùng syslog)" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:99 msgid "If sudo is invoked with no arguments, start a shell" msgstr "Nếu lệnh sudo được triệu gọi mà không đưa ra tham số thì khởi chạy hệ vỏ" -#: plugins/sudoers/def_data.c:99 +#: plugins/sudoers/def_data.c:103 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "Đặt biến $HOME cho người dùng đích khi sử dụng hệ vỏ (shell) với tùy chọn -s" -#: plugins/sudoers/def_data.c:103 +#: plugins/sudoers/def_data.c:107 msgid "Always set $HOME to the target user's home directory" msgstr "Luôn đặt biến $HOME cho thư mục cá nhân của người dùng đích" -#: plugins/sudoers/def_data.c:107 +#: plugins/sudoers/def_data.c:111 msgid "Allow some information gathering to give useful error messages" msgstr "Cho phép một số thông tin được thu thập để đưa ra các thông tin về lỗi hữu dụng" -#: plugins/sudoers/def_data.c:111 +#: plugins/sudoers/def_data.c:115 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "Yêu cầu tên máy chủ dạng đầy đủ trong tập tin sudoers" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:119 msgid "Insult the user when they enter an incorrect password" msgstr "Lăng mạ người dùng khi họ nhập vào mật khẩu sai" -#: plugins/sudoers/def_data.c:119 +#: plugins/sudoers/def_data.c:123 msgid "Only allow the user to run sudo if they have a tty" msgstr "Chỉ cho phép người dùng chạy lệnh sudo nếu họ có tty" -#: plugins/sudoers/def_data.c:123 +#: plugins/sudoers/def_data.c:127 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo sẽ tôn trọng biến môi trường EDITOR" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:131 msgid "Prompt for root's password, not the users's" msgstr "Hỏi mật khẩu của siêu người dùng, chứ không phải của người dùng" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:135 msgid "Prompt for the runas_default user's password, not the users's" msgstr "Nhắc mật khẩu của người dùng runas_mặc_định, không phải của người dùng" -#: plugins/sudoers/def_data.c:135 +#: plugins/sudoers/def_data.c:139 msgid "Prompt for the target user's password, not the users's" msgstr "Nhắc mật khẩu của người dùng đích, không phải cái hiện tại" -#: plugins/sudoers/def_data.c:139 +#: plugins/sudoers/def_data.c:143 msgid "Apply defaults in the target user's login class if there is one" msgstr "Áp dụng mặc định trong lớp đăng nhập người dùng đích nếu ở đây có một" -#: plugins/sudoers/def_data.c:143 +#: plugins/sudoers/def_data.c:147 msgid "Set the LOGNAME and USER environment variables" msgstr "Đặt biến môi trường LOGNAME và USER" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:151 msgid "Only set the effective uid to the target user, not the real uid" msgstr "Chỉ đặt uid đang có hiệu lực cho người dùng đích, không sử dụng uid thật" -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:155 msgid "Don't initialize the group vector to that of the target user" msgstr "Không khởi tạo véc-tơ nhóm cho người dùng đích" -#: plugins/sudoers/def_data.c:155 +#: plugins/sudoers/def_data.c:159 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "Độ dài mà tại đó các dòng trong tập tin nhật ký được ngắt dòng (0 là không ngắt dòng): %u" -#: plugins/sudoers/def_data.c:159 +#: plugins/sudoers/def_data.c:163 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "Thời gian chờ dấu vết thời gian xác thực tối đa: %.1f phút" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:167 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "Thời gian chờ nhắc mật khẩu tối đa: %.1f phút" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:171 #, c-format msgid "Number of tries to enter a password: %u" msgstr "Số lần nhập mật khẩu: %u" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:175 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "Umask để sử dụng hoặc 0777 để sử dụng của người dùng: 0%o" -#: plugins/sudoers/def_data.c:175 +#: plugins/sudoers/def_data.c:179 #, c-format msgid "Path to log file: %s" msgstr "Đường dẫn tới tập tin nhật ký: “%s”" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:183 #, c-format msgid "Path to mail program: %s" msgstr "Đường dẫn tới chương trình gửi thư (mail) %s" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:187 #, c-format msgid "Flags for mail program: %s" msgstr "Các cờ dành cho chương trình gửi thư (mail): %s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:191 #, c-format msgid "Address to send mail to: %s" msgstr "Địa chỉ để gửi thư đến: %s" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:195 #, c-format msgid "Address to send mail from: %s" msgstr "Địa chỉ dùng để gửi thư từ: %s" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:199 #, c-format msgid "Subject line for mail messages: %s" msgstr "Chủ đề cho thư: %s" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:203 #, c-format msgid "Incorrect password message: %s" msgstr "Mật khẩu không đúng: %s" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:207 #, c-format msgid "Path to lecture status dir: %s" msgstr "Đường dẫn đến thư mục trạng thái thuyết trình: %s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:211 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "Đường dẫn thư mục dấu vết thời gian xác thực: %s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:215 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "Chủ sở hữu đường dẫn thư mục dấu vết thời gian xác thực: %s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:219 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "Những tài khoản trong nhóm này được miễn mật khẩu và yêu cầu PATH: %s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:223 #, c-format msgid "Default password prompt: %s" msgstr "Lời nhắc nhập mật khẩu mặc định: %s" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:227 msgid "If set, passprompt will override system prompt in all cases." msgstr "Nếu được đặt, lời nhắc mật khẩu sẽ đè lên dấu nhắc hệ thống trong mọi trường hợp." -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:231 #, c-format msgid "Default user to run commands as: %s" msgstr "Tài khoản mặc định chạy lệnh như là: %s" -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:235 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "Giá trị dùng để ghi đè lên $PATH của người dùng: %s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:239 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "Đường dẫn tới trình biên soạn để sử dụng cho lệnh visudo: %s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:243 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "Khi được yêu cầu mật khẩu cho “liệt kê” lệnh-giả: %s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:247 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "Khi được yêu cầu mật khẩu cho lệnh-giả “verify” (“thẩm tra”): %s" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:251 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "Tải trước các hàm thi hành giả được chứa trong thư viện sudo_noexec" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:255 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "Nếu thư mục LDAP đã bật, chúng tôi sẽ lờ đi tập tin sudoers phải không" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:259 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr "Các bộ mô tả tập tin >= %d sẽ bị đóng trước khi chạy một lệnh" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:263 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "Nếu được đặt, người dùng có thể ghi đè lên giá trị của “closefrom” bằng tùy chọn -C" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:267 msgid "Allow users to set arbitrary environment variables" msgstr "Cho phép người dùng đặt biến môi trường tùy ý" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:271 msgid "Reset the environment to a default set of variables" msgstr "Đặt lại biến môi trường thành giá trị mặc định của chúng" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to check for sanity:" msgstr "Các biến môi trường được kiểm tra xem có đúng mực không:" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to remove:" msgstr "Các biến môi trường bị gỡ bỏ:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:283 msgid "Environment variables to preserve:" msgstr "Các biến môi trường được giữ lại:" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:287 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "Vai trò SELinux được dùng trong ngữ cảnh an ninh mới: %s" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:291 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "Kiểu SELinux được dùng trong ngữ cảnh an ninh mới: %s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:295 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "Đường dẫn tới tập tin môi trường đặc-tả-sudo: %s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:299 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "Miền địa phương sẽ sử dụng khi phân tích sudoers: %s" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:303 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "Cho phép sudo hỏi mật khẩu thậm chí ngay cả khi nó đã rõ ràng" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:307 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "Cung cấp phản hồi ảo lúc nhắc mật khẩu khi đây là đầu nhập người dùng" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:311 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "Sử dụng globbing kiểu nhanh hơn mà nó thì kém chính xác hơn nhưng lại không cần truy cập hệ thống tập tin" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:315 msgid "The umask specified in sudoers will override the user's, even if it is more permissive" msgstr "Giá trị umask được chỉ định trong sudoers sẽ ghi đè lên giá trị này của người dùng, thậm chí nó còn dễ dãi hơn" -#: plugins/sudoers/def_data.c:315 +#: plugins/sudoers/def_data.c:319 msgid "Log user's input for the command being run" msgstr "Ghi nhật ký kết xuất từ người dùng cho lệnh đang chạy" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:323 msgid "Log the output of the command being run" msgstr "Ghi lại nhật ký kết xuất của lệnh đang chạy" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:327 msgid "Compress I/O logs using zlib" msgstr "Nén nhật ký V/R sử dụng định dạng zlib" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:331 msgid "Always run commands in a pseudo-tty" msgstr "Luôn chạy lệnh ở tty-giả" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:335 #, c-format msgid "Plugin for non-Unix group support: %s" -msgstr "Phần bổ xung cho hỗ trợ nhóm không-Unix: %s" +msgstr "Phần bổ sung cho hỗ trợ nhóm không-Unix: %s" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:339 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "Thư mục mà nó sẽ lưu nhật ký vào/ra: %s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:343 #, c-format msgid "File in which to store the input/output log: %s" msgstr "Tập tin mà nó sẽ lưu nhật ký vào/ra: %s" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:347 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "Thêm một mục vào tập tin utmp/utmpx khi phân bổ một pty" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:351 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "Đặt người dùng trong utmp thành người dùng runasr, không phải người dùng gọi" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:355 msgid "Set of permitted privileges" msgstr "Tập hợp các đặc quyền được phép" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:359 msgid "Set of limit privileges" msgstr "Tập hợp các quyền bị giới hạn" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:363 msgid "Run commands on a pty in the background" msgstr "Chạy các câu lệnh trên một pty trong nền hệ thống" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:367 msgid "PAM service name to use" msgstr "Tên dịch vụ PAM được dùng" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:371 msgid "PAM service name to use for login shells" msgstr "Tên dịch vụ PAM được dùng cho các hệ vỏ đăng nhập" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:375 msgid "Attempt to establish PAM credentials for the target user" msgstr "Thử thiết lập ủy nhiệm PAM cho người dùng đích" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:379 msgid "Create a new PAM session for the command to run in" msgstr "Tạo một phiên PAM mới để lệnh chạy với nó" -#: plugins/sudoers/def_data.c:379 +#: plugins/sudoers/def_data.c:383 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "Số lượng nhật ký I/O tối đa: %u" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:387 msgid "Enable sudoers netgroup support" msgstr "Bật hỗ trợ nhóm-mạng “sudoers”" -#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:601 -#: plugins/sudoers/visudo_json.c:642 plugins/sudoers/visudo_json.c:677 +#: plugins/sudoers/def_data.c:391 +msgid "Check parent directories for writability when editing files with sudoedit" +msgstr "Kiểm tra xem các thư mục cha có ghi được hay không khi sửa các tập tin bằng sudoedit" + +#: plugins/sudoers/def_data.c:395 +msgid "Follow symbolic links when editing files with sudoedit" +msgstr "Theo các liên kết mềm khi sửa các tập tin bằng sudoedit" + +#: plugins/sudoers/def_data.c:399 +msgid "Query the group plugin for unknown system groups" +msgstr "Truy vấn các phần bổ sung nhóm cho các nhóm hệ thống chưa biết" + +#: plugins/sudoers/def_data.c:403 +msgid "Match netgroups based on the entire tuple: user, host and domain" +msgstr "Khớp nhóm mạng trên cơ sở toàn thể bộ dữ liệu : tài khoản, tên máy và tên miền" + +#: plugins/sudoers/defaults.c:199 plugins/sudoers/defaults.c:610 +#: plugins/sudoers/visudo_json.c:633 plugins/sudoers/visudo_json.c:668 #, c-format msgid "unknown defaults entry `%s'" msgstr "không hiểu mục tin mặc định “%s”" -#: plugins/sudoers/defaults.c:218 plugins/sudoers/defaults.c:228 -#: plugins/sudoers/defaults.c:248 plugins/sudoers/defaults.c:261 -#: plugins/sudoers/defaults.c:274 plugins/sudoers/defaults.c:287 -#: plugins/sudoers/defaults.c:300 plugins/sudoers/defaults.c:320 -#: plugins/sudoers/defaults.c:330 +#: plugins/sudoers/defaults.c:207 plugins/sudoers/defaults.c:217 +#: plugins/sudoers/defaults.c:241 plugins/sudoers/defaults.c:256 +#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 +#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 +#: plugins/sudoers/defaults.c:325 #, c-format msgid "value `%s' is invalid for option `%s'" msgstr "giá trị “%s” là không hợp lệ đối với tùy chọn “%s”" -#: plugins/sudoers/defaults.c:221 plugins/sudoers/defaults.c:231 -#: plugins/sudoers/defaults.c:239 plugins/sudoers/defaults.c:256 -#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 -#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 -#: plugins/sudoers/defaults.c:326 +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:220 +#: plugins/sudoers/defaults.c:228 plugins/sudoers/defaults.c:251 +#: plugins/sudoers/defaults.c:264 plugins/sudoers/defaults.c:277 +#: plugins/sudoers/defaults.c:290 plugins/sudoers/defaults.c:310 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "no value specified for `%s'" msgstr "chưa chỉ ra giá trị cho “%s”" -#: plugins/sudoers/defaults.c:244 +#: plugins/sudoers/defaults.c:233 #, c-format msgid "values for `%s' must start with a '/'" msgstr "giá trị cho “%s” phải bắt đầu bằng dấu “/”" -#: plugins/sudoers/defaults.c:306 +#: plugins/sudoers/defaults.c:301 #, c-format msgid "option `%s' does not take a value" msgstr "tùy chọn “%s” không nhận giá trị" -#: plugins/sudoers/env.c:276 plugins/sudoers/env.c:283 -#: plugins/sudoers/env.c:386 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:918 plugins/sudoers/policy.c:461 -#: plugins/sudoers/policy.c:470 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:708 plugins/sudoers/testsudoers.c:242 -#: plugins/sudoers/toke_util.c:174 +#: plugins/sudoers/env.c:296 plugins/sudoers/env.c:303 +#: plugins/sudoers/env.c:408 plugins/sudoers/ldap.c:450 +#: plugins/sudoers/ldap.c:540 plugins/sudoers/ldap.c:1166 +#: plugins/sudoers/ldap.c:1388 plugins/sudoers/ldap.c:1704 +#: plugins/sudoers/linux_audit.c:82 plugins/sudoers/logging.c:929 +#: plugins/sudoers/policy.c:511 plugins/sudoers/policy.c:520 +#: plugins/sudoers/prompt.c:161 plugins/sudoers/sudoers.c:815 +#: plugins/sudoers/testsudoers.c:236 plugins/sudoers/toke_util.c:162 #, c-format msgid "internal error, %s overflow" msgstr "lỗi nội bộ, %s bị tràn" -#: plugins/sudoers/env.c:359 +#: plugins/sudoers/env.c:377 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv: envp sai hỏng, chiều dài không khớp" -#: plugins/sudoers/env.c:1054 +#: plugins/sudoers/env.c:1083 +msgid "unable to rebuild the environment" +msgstr "không thể xây dựng lại môi trường" + +#: plugins/sudoers/env.c:1157 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "rất tiếc, bạn không được phép đặt các biến môi trường sau đây: %1s" -#: plugins/sudoers/group_plugin.c:94 +#: plugins/sudoers/group_plugin.c:86 #, c-format msgid "%s must be owned by uid %d" msgstr "%s phải được sở hữu bởi uid %d" -#: plugins/sudoers/group_plugin.c:98 +#: plugins/sudoers/group_plugin.c:90 #, c-format msgid "%s must only be writable by owner" msgstr "%s phải là những thứ chỉ có thể ghi bởi chủ sở hữu" -#: plugins/sudoers/group_plugin.c:105 plugins/sudoers/sssd.c:251 +#: plugins/sudoers/group_plugin.c:98 plugins/sudoers/sssd.c:331 #, c-format msgid "unable to load %s: %s" msgstr "không thể tải %s: %s" -#: plugins/sudoers/group_plugin.c:110 +#: plugins/sudoers/group_plugin.c:104 #, c-format msgid "unable to find symbol \"group_plugin\" in %s" msgstr "không tìm thấy ký hiệu “group_plugin” trong %s" -#: plugins/sudoers/group_plugin.c:115 +#: plugins/sudoers/group_plugin.c:109 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" -msgstr "%s: phiên bản số lớn phần bổ xung nhóm không tương thích %d, mong đợi %d" +msgstr "%s: phiên bản số lớn phần bổ sung nhóm không tương thích %d, mong đợi %d" -#: plugins/sudoers/interfaces.c:116 +#: plugins/sudoers/interfaces.c:117 msgid "Local IP address and netmask pairs:\n" msgstr "Cặp địa chỉ IP và mặt nạ cục bộ:\n" -#: plugins/sudoers/iolog.c:101 plugins/sudoers/iolog.c:119 -#: plugins/sudoers/timestamp.c:233 +#: plugins/sudoers/iolog.c:92 plugins/sudoers/iolog.c:110 +#: plugins/sudoers/timestamp.c:169 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s có tồn tại nhưng nó không phải là một thư mục (0%o)" -#: plugins/sudoers/iolog.c:112 plugins/sudoers/iolog.c:133 -#: plugins/sudoers/iolog.c:140 plugins/sudoers/timestamp.c:227 -#: plugins/sudoers/timestamp.c:248 +#: plugins/sudoers/iolog.c:103 plugins/sudoers/iolog.c:124 +#: plugins/sudoers/iolog.c:131 plugins/sudoers/timestamp.c:163 +#: plugins/sudoers/timestamp.c:184 #, c-format msgid "unable to mkdir %s" msgstr "không thể tạo thư mục “%s”" -#: plugins/sudoers/iolog.c:209 plugins/sudoers/sudoers.c:764 -#: plugins/sudoers/sudoreplay.c:348 plugins/sudoers/sudoreplay.c:819 -#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/timestamp.c:357 -#: plugins/sudoers/visudo.c:832 plugins/sudoers/visudo_json.c:1025 -#: plugins/sudoers/visudo_json.c:1038 +#: plugins/sudoers/iolog.c:200 plugins/sudoers/sudoers.c:871 +#: plugins/sudoers/sudoreplay.c:300 plugins/sudoers/sudoreplay.c:769 +#: plugins/sudoers/sudoreplay.c:973 plugins/sudoers/timestamp.c:399 +#: plugins/sudoers/visudo.c:904 plugins/sudoers/visudo_json.c:1012 +#: plugins/sudoers/visudo_json.c:1025 #, c-format msgid "unable to open %s" -msgstr "không mở được %s" +msgstr "không thể mở “%s”" -#: plugins/sudoers/iolog.c:250 plugins/sudoers/sudoers.c:768 -#: plugins/sudoers/sudoreplay.c:1123 +#: plugins/sudoers/iolog.c:241 plugins/sudoers/sudoers.c:875 +#: plugins/sudoers/sudoreplay.c:1084 #, c-format msgid "unable to read %s" msgstr "không thể đọc %s" -#: plugins/sudoers/iolog.c:282 plugins/sudoers/sudoreplay.c:588 -#: plugins/sudoers/timestamp.c:186 plugins/sudoers/timestamp.c:189 +#: plugins/sudoers/iolog.c:277 plugins/sudoers/sudoreplay.c:550 +#: plugins/sudoers/timestamp.c:298 plugins/sudoers/timestamp.c:301 #, c-format msgid "unable to write to %s" msgstr "không thể ghi vào %s" -#: plugins/sudoers/iolog.c:347 plugins/sudoers/iolog.c:545 +#: plugins/sudoers/iolog.c:342 plugins/sudoers/iolog.c:540 #, c-format msgid "unable to create %s" msgstr "không thể tạo “%s”" -#: plugins/sudoers/ldap.c:406 +#: plugins/sudoers/iolog.c:723 +#, c-format +msgid "%s: internal error, file index %d not open" +msgstr "%s: lỗi hệ thống, tập tin mục lục %d chưa được mở" + +#: plugins/sudoers/ldap.c:428 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports: cổng quá lớn" -#: plugins/sudoers/ldap.c:431 -msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" -msgstr "sudo_ldap_conf_add_ports: hết bộ nhớ để mở rộng hostbuf" - -#: plugins/sudoers/ldap.c:464 +#: plugins/sudoers/ldap.c:488 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "không hỗ trợ kiểu “LDAP uri”: %s" -#: plugins/sudoers/ldap.c:495 +#: plugins/sudoers/ldap.c:515 msgid "unable to mix ldap and ldaps URIs" msgstr "không thể trộn ldap và ldaps URIs" -#: plugins/sudoers/ldap.c:499 plugins/sudoers/ldap.c:532 +#: plugins/sudoers/ldap.c:519 plugins/sudoers/ldap.c:555 msgid "starttls not supported when using ldaps" msgstr "“starttls” chỉ được hỗ trợ khi dùng với “ldaps”" -#: plugins/sudoers/ldap.c:517 -msgid "sudo_ldap_parse_uri: out of space building hostbuf" -msgstr "sudo_ldap_parse_uri: hết bộ nhớ để biên dịch “hostbuf”" - -#: plugins/sudoers/ldap.c:599 +#: plugins/sudoers/ldap.c:626 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "không thể khởi tạo chứng nhận SSL và csdl khóa: %s" -#: plugins/sudoers/ldap.c:602 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "bạn phải đặt TLS_CERT trong %s để sử dụng SSL" -#: plugins/sudoers/ldap.c:1093 +#: plugins/sudoers/ldap.c:1152 msgid "unable to get GMT time" msgstr "không thể lấy giờ quốc tế (GMT)" -#: plugins/sudoers/ldap.c:1099 +#: plugins/sudoers/ldap.c:1158 msgid "unable to format timestamp" msgstr "không thể định dạng dấu-vết-thời-gian" -#: plugins/sudoers/ldap.c:1107 -msgid "unable to build time filter" -msgstr "không thể xây dựng bộ lọc thời gian" - -#: plugins/sudoers/ldap.c:1326 -msgid "sudo_ldap_build_pass1 allocation mismatch" -msgstr "sudo_ldap_build_pass1 phân bổ không khớp" - -#: plugins/sudoers/ldap.c:1469 +#: plugins/sudoers/ldap.c:1853 #, c-format msgid "%s: %s: %s: %s" msgstr "%s: %s: %s: %s" -#: plugins/sudoers/ldap.c:1963 +#: plugins/sudoers/ldap.c:2394 #, c-format msgid "" "\n" @@ -853,7 +995,7 @@ "\n" "Vai trò LDAP: %s\n" -#: plugins/sudoers/ldap.c:1965 +#: plugins/sudoers/ldap.c:2396 #, c-format msgid "" "\n" @@ -862,108 +1004,108 @@ "\n" "Vai trò LDAP: KHÔNG HIỂU\n" -#: plugins/sudoers/ldap.c:2012 +#: plugins/sudoers/ldap.c:2443 #, c-format msgid " Order: %s\n" msgstr " Thứ tự: %s\n" -#: plugins/sudoers/ldap.c:2020 plugins/sudoers/parse.c:512 -#: plugins/sudoers/sssd.c:1297 +#: plugins/sudoers/ldap.c:2451 plugins/sudoers/parse.c:555 +#: plugins/sudoers/sssd.c:1429 #, c-format msgid " Commands:\n" msgstr " Lệnh:\n" -#: plugins/sudoers/ldap.c:2570 +#: plugins/sudoers/ldap.c:3015 #, c-format msgid "unable to initialize LDAP: %s" msgstr "không thể khởi tạo LDAP: %s" -#: plugins/sudoers/ldap.c:2612 +#: plugins/sudoers/ldap.c:3051 msgid "start_tls specified but LDAP libs do not support ldap_start_tls_s() or ldap_start_tls_s_np()" msgstr "start_tls được chỉ ra nhưng thư viện LDAP không hỗ trợ ldap_start_tls_s() hoặc ldap_start_tls_s_np()" -#: plugins/sudoers/ldap.c:2845 +#: plugins/sudoers/ldap.c:3305 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "thuộc tính sudoOrder không hợp lệ: %s" -#: plugins/sudoers/linux_audit.c:57 +#: plugins/sudoers/linux_audit.c:52 msgid "unable to open audit system" msgstr "không thể mở hệ thống audit" -#: plugins/sudoers/linux_audit.c:94 +#: plugins/sudoers/linux_audit.c:93 msgid "unable to send audit message" msgstr "không thể gửi thông tin audit" -#: plugins/sudoers/logging.c:134 +#: plugins/sudoers/logging.c:106 #, c-format msgid "%8s : %s" msgstr "%8s : %s" -#: plugins/sudoers/logging.c:162 +#: plugins/sudoers/logging.c:134 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s : (lệnh tiếp tục) %s" -#: plugins/sudoers/logging.c:187 +#: plugins/sudoers/logging.c:159 #, c-format msgid "unable to open log file: %s: %s" msgstr "không thể mở tập tin nhật ký: %s: %s" -#: plugins/sudoers/logging.c:190 +#: plugins/sudoers/logging.c:162 #, c-format msgid "unable to lock log file: %s: %s" msgstr "không thể khóa tập tin nhật ký: %s: %s" -#: plugins/sudoers/logging.c:242 +#: plugins/sudoers/logging.c:211 msgid "No user or host" msgstr "Không có tài khoản hay tên máy chủ" -#: plugins/sudoers/logging.c:244 +#: plugins/sudoers/logging.c:213 msgid "validation failure" msgstr "việc phê chuẩn thất bại" -#: plugins/sudoers/logging.c:251 +#: plugins/sudoers/logging.c:220 msgid "user NOT in sudoers" msgstr "tài khoản KHÔNG có trong sudoers" -#: plugins/sudoers/logging.c:253 +#: plugins/sudoers/logging.c:222 msgid "user NOT authorized on host" msgstr "tài khoản KHÔNG được cho phép sử dụng trên máy chủ" -#: plugins/sudoers/logging.c:255 +#: plugins/sudoers/logging.c:224 msgid "command not allowed" msgstr "lệnh không được phép" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:259 #, c-format msgid "%s is not in the sudoers file. This incident will be reported.\n" msgstr "%s không trong tập tin sudoers. Sự việc này sẽ được báo cáo.\n" -#: plugins/sudoers/logging.c:291 +#: plugins/sudoers/logging.c:262 #, c-format msgid "%s is not allowed to run sudo on %s. This incident will be reported.\n" msgstr "%s không được phép chạy lệnh sudo trên %s. Sự việc này sẽ được báo cáo.\n" -#: plugins/sudoers/logging.c:295 +#: plugins/sudoers/logging.c:266 #, c-format msgid "Sorry, user %s may not run sudo on %s.\n" -msgstr "Rất tiếc, tài khoảnr %s không được chạy lệnh sudo trên %s.\n" +msgstr "Rất tiếc, tài khoản %s không được chạy lệnh sudo trên %s.\n" -#: plugins/sudoers/logging.c:298 +#: plugins/sudoers/logging.c:269 #, c-format msgid "Sorry, user %s is not allowed to execute '%s%s%s' as %s%s%s on %s.\n" msgstr "Rất tiếc, tài khoản %s không được phép thi hành “%s%s%s” như là %s%s%s trên %s.\n" -#: plugins/sudoers/logging.c:335 plugins/sudoers/sudoers.c:407 -#: plugins/sudoers/sudoers.c:409 plugins/sudoers/sudoers.c:411 -#: plugins/sudoers/sudoers.c:413 plugins/sudoers/sudoers.c:1128 -#: plugins/sudoers/sudoers.c:1129 +#: plugins/sudoers/logging.c:306 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1222 +#: plugins/sudoers/sudoers.c:1224 #, c-format msgid "%s: command not found" msgstr "%s: không tìm thấy lệnh" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:403 +#: plugins/sudoers/logging.c:308 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring `%s' found in '.'\n" @@ -972,70 +1114,70 @@ "đang bỏ qua “%s” được tìm thấy trong “.”\n" "Sử dụng “sudo ./%s” nếu đây là “%s” bạn muốn chạy." -#: plugins/sudoers/logging.c:353 +#: plugins/sudoers/logging.c:325 msgid "authentication failure" msgstr "xác thực gặp lỗi nghiêm trọng" -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:351 msgid "a password is required" msgstr "bắt buộc phải có mật khẩu" -#: plugins/sudoers/logging.c:446 plugins/sudoers/logging.c:501 +#: plugins/sudoers/logging.c:422 plugins/sudoers/logging.c:484 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "đã sai mật khẩu %u lần" -#: plugins/sudoers/logging.c:584 +#: plugins/sudoers/logging.c:572 msgid "unable to fork" msgstr "không thể tạo tiến trình con" -#: plugins/sudoers/logging.c:592 plugins/sudoers/logging.c:648 +#: plugins/sudoers/logging.c:580 plugins/sudoers/logging.c:640 #, c-format msgid "unable to fork: %m" msgstr "không thể tạo tiến trình con: %m" -#: plugins/sudoers/logging.c:638 +#: plugins/sudoers/logging.c:630 #, c-format msgid "unable to open pipe: %m" msgstr "không thể mở ống dẫn lệnh: %m" -#: plugins/sudoers/logging.c:663 +#: plugins/sudoers/logging.c:655 #, c-format msgid "unable to dup stdin: %m" msgstr "không thể dup (nhân đôi) stdin: %m" -#: plugins/sudoers/logging.c:698 +#: plugins/sudoers/logging.c:693 #, c-format msgid "unable to execute %s: %m" msgstr "không thể thực thi %s: %m" -#: plugins/sudoers/match.c:627 +#: plugins/sudoers/match.c:616 #, c-format msgid "unsupported digest type %d for %s" msgstr "không hỗ trợ kiểu tóm lược %d dành cho %s" -#: plugins/sudoers/match.c:656 +#: plugins/sudoers/match.c:657 #, c-format msgid "%s: read error" msgstr "%s: lỗi đọc" -#: plugins/sudoers/match.c:670 +#: plugins/sudoers/match.c:692 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "tóm lược cho %s (%s) không ở dạng thức %s" -#: plugins/sudoers/parse.c:123 +#: plugins/sudoers/parse.c:114 #, c-format msgid "parse error in %s near line %d" msgstr "lỗi phân tích trong %s gần dòng %d" -#: plugins/sudoers/parse.c:126 +#: plugins/sudoers/parse.c:117 #, c-format msgid "parse error in %s" msgstr "gặp lỗi phân tích trong %s" -#: plugins/sudoers/parse.c:459 +#: plugins/sudoers/parse.c:502 #, c-format msgid "" "\n" @@ -1044,49 +1186,41 @@ "\n" "Mục Sudoers:\n" -#: plugins/sudoers/parse.c:460 +#: plugins/sudoers/parse.c:503 #, c-format msgid " RunAsUsers: " msgstr " ChạyVớiTưCáchNgườiDùng: " -#: plugins/sudoers/parse.c:474 +#: plugins/sudoers/parse.c:517 #, c-format msgid " RunAsGroups: " msgstr " ChạyVớiTưCáchNhóm: " -#: plugins/sudoers/parse.c:483 +#: plugins/sudoers/parse.c:526 #, c-format msgid " Options: " -msgstr " Tùy chọn:" +msgstr " Tùy chọn: " -#: plugins/sudoers/policy.c:109 plugins/sudoers/policy.c:118 -#: plugins/sudoers/policy.c:127 plugins/sudoers/policy.c:151 -#: plugins/sudoers/policy.c:263 plugins/sudoers/policy.c:283 -#: plugins/sudoers/policy.c:292 plugins/sudoers/policy.c:322 -#: plugins/sudoers/policy.c:332 plugins/sudoers/policy.c:341 -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" +#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:253 +msgid "unable to parse network address list" +msgstr "không thể phân tích danh sách địa chỉ mạng" -#: plugins/sudoers/policy.c:569 plugins/sudoers/visudo.c:773 +#: plugins/sudoers/policy.c:659 plugins/sudoers/visudo.c:841 #, c-format msgid "unable to execute %s" msgstr "không thể thực thi %s" -#: plugins/sudoers/policy.c:701 +#: plugins/sudoers/policy.c:792 #, c-format msgid "Sudoers policy plugin version %s\n" -msgstr "Phiên bản của phần bổ xung chính sách Sudoers %s\n" +msgstr "Phiên bản của phần bổ sung chính sách Sudoers %s\n" -#: plugins/sudoers/policy.c:703 +#: plugins/sudoers/policy.c:794 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Phiên bản ngữ pháp tập tin Sudoers %d\n" -#: plugins/sudoers/policy.c:707 +#: plugins/sudoers/policy.c:798 #, c-format msgid "" "\n" @@ -1095,374 +1229,411 @@ "\n" "Đường dẫn Sudoers: %s\n" -#: plugins/sudoers/policy.c:710 +#: plugins/sudoers/policy.c:801 #, c-format msgid "nsswitch path: %s\n" msgstr "đường dẫn nsswitch: %s\n" -#: plugins/sudoers/policy.c:712 +#: plugins/sudoers/policy.c:803 #, c-format msgid "ldap.conf path: %s\n" msgstr "đường dẫn ldap.conf: %s\n" -#: plugins/sudoers/policy.c:713 +#: plugins/sudoers/policy.c:804 #, c-format msgid "ldap.secret path: %s\n" msgstr "đường dẫn ldap.secret: %s\n" -#: plugins/sudoers/pwutil.c:149 +#: plugins/sudoers/policy.c:837 +#, c-format +msgid "unable to register hook of type %d (version %d.%d)" +msgstr "không thể đăng ký móc kiểu %d (phiên bản %d.%d)" + +#: plugins/sudoers/pwutil.c:158 plugins/sudoers/pwutil.c:176 +#, c-format +msgid "unable to cache uid %u, out of memory" +msgstr "không thể lưu nhớ tạm uid %u, hết bộ nhớ rồi" + +#: plugins/sudoers/pwutil.c:170 #, c-format msgid "unable to cache uid %u, already exists" msgstr "không thể lưu nhớ tạm uid %u, đã có sẵn rồi" -#: plugins/sudoers/pwutil.c:194 +#: plugins/sudoers/pwutil.c:222 plugins/sudoers/pwutil.c:239 +#: plugins/sudoers/pwutil.c:289 plugins/sudoers/pwutil.c:334 +#, c-format +msgid "unable to cache user %s, out of memory" +msgstr "không thể lưu nhớ tạm tài khoản %s, hết bộ nhớ rồi" + +#: plugins/sudoers/pwutil.c:234 #, c-format msgid "unable to cache user %s, already exists" msgstr "không thể lưu nhớ tạm tài khoản %s, đã có sẵn rồi" -#: plugins/sudoers/pwutil.c:400 +#: plugins/sudoers/pwutil.c:474 plugins/sudoers/pwutil.c:492 +#, c-format +msgid "unable to cache gid %u, out of memory" +msgstr "không thể lưu nhớ tạm gid %u, đã hết bộ nhớ rồi" + +#: plugins/sudoers/pwutil.c:486 #, c-format msgid "unable to cache gid %u, already exists" msgstr "không thể lưu nhớ tạm gid %u, đã có sẵn rồi" -#: plugins/sudoers/pwutil.c:439 +#: plugins/sudoers/pwutil.c:532 plugins/sudoers/pwutil.c:549 +#: plugins/sudoers/pwutil.c:584 plugins/sudoers/pwutil.c:626 +#, c-format +msgid "unable to cache group %s, out of memory" +msgstr "không thể lưu nhớ tạm nhóm %s, đã hết bộ nhớ rồi" + +#: plugins/sudoers/pwutil.c:544 #, c-format msgid "unable to cache group %s, already exists" msgstr "không thể lưu nhớ tạm nhóm %s, đã có sẵn rồi" -#: plugins/sudoers/pwutil.c:605 plugins/sudoers/pwutil.c:631 +#: plugins/sudoers/pwutil.c:739 plugins/sudoers/pwutil.c:783 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "không thể lưu nhớ tạm danh sách nhóm cho %s, đã có sẵn rồi" -#: plugins/sudoers/pwutil.c:627 +#: plugins/sudoers/pwutil.c:745 plugins/sudoers/pwutil.c:788 +#, c-format +msgid "unable to cache group list for %s, out of memory" +msgstr "không thể lưu nhớ tạm danh sách nhóm cho %s, đã hết bộ nhớ rồi" + +#: plugins/sudoers/pwutil.c:777 #, c-format msgid "unable to parse groups for %s" msgstr "không thể phân tích nhóm cho %s" -#: plugins/sudoers/set_perms.c:122 plugins/sudoers/set_perms.c:447 -#: plugins/sudoers/set_perms.c:850 plugins/sudoers/set_perms.c:1147 -#: plugins/sudoers/set_perms.c:1439 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 +#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 +#: plugins/sudoers/set_perms.c:1430 msgid "perm stack overflow" msgstr "ngăn xếp perm bị tràn" -#: plugins/sudoers/set_perms.c:130 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:1076 -#: plugins/sudoers/set_perms.c:1155 plugins/sudoers/set_perms.c:1372 -#: plugins/sudoers/set_perms.c:1447 plugins/sudoers/set_perms.c:1536 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 +#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 +#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 +#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 +#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 msgid "perm stack underflow" msgstr "ngăn xếp stack tràn ngầm" -#: plugins/sudoers/set_perms.c:189 plugins/sudoers/set_perms.c:502 -#: plugins/sudoers/set_perms.c:1206 plugins/sudoers/set_perms.c:1479 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:493 +#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 msgid "unable to change to root gid" msgstr "không thể thay đổi mã số nhóm của siêu người dùng root" -#: plugins/sudoers/set_perms.c:278 plugins/sudoers/set_perms.c:599 -#: plugins/sudoers/set_perms.c:987 plugins/sudoers/set_perms.c:1283 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:590 +#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 msgid "unable to change to runas gid" msgstr "không thể thay đổi thành runas gid" -#: plugins/sudoers/set_perms.c:283 plugins/sudoers/set_perms.c:604 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:595 +#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 msgid "unable to set runas group vector" msgstr "không thể đặt véc-tơ nhóm runas" -#: plugins/sudoers/set_perms.c:294 plugins/sudoers/set_perms.c:615 -#: plugins/sudoers/set_perms.c:1001 plugins/sudoers/set_perms.c:1297 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:606 +#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 msgid "unable to change to runas uid" msgstr "không thể thay đổi thành runas uid" -#: plugins/sudoers/set_perms.c:312 plugins/sudoers/set_perms.c:633 -#: plugins/sudoers/set_perms.c:1017 plugins/sudoers/set_perms.c:1313 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:624 +#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 msgid "unable to change to sudoers gid" -msgstr "không thể thay đổi thành gid sudoers" +msgstr "không thể thay đổi thành mã số nhóm sudoers" -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 msgid "too many processes" msgstr "quá nhiều tiến trình" -#: plugins/sudoers/solaris_audit.c:47 +#: plugins/sudoers/solaris_audit.c:51 msgid "unable to get current working directory" msgstr "không thể lấy thư mục làm việc hiện tại" -#: plugins/sudoers/solaris_audit.c:55 +#: plugins/sudoers/solaris_audit.c:59 #, c-format msgid "truncated audit path user_cmnd: %s" msgstr "đã cắt ngắn đường dẫn audit user_cmnd: %s" -#: plugins/sudoers/solaris_audit.c:62 +#: plugins/sudoers/solaris_audit.c:66 #, c-format msgid "truncated audit path argv[0]: %s" msgstr "đã cắt ngắn đường dẫn audit argv[0]: %s" -#: plugins/sudoers/solaris_audit.c:111 +#: plugins/sudoers/solaris_audit.c:115 msgid "audit_failure message too long" msgstr "thông điệp audit_failure quá dài" -#: plugins/sudoers/sssd.c:252 +#: plugins/sudoers/sssd.c:333 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "không thể khởi tạo nguồn SSS. SSSD đã được cài đặt trên máy của bạn chưa vậy?" -#: plugins/sudoers/sssd.c:259 plugins/sudoers/sssd.c:267 -#: plugins/sudoers/sssd.c:275 plugins/sudoers/sssd.c:283 -#: plugins/sudoers/sssd.c:291 +#: plugins/sudoers/sssd.c:341 plugins/sudoers/sssd.c:350 +#: plugins/sudoers/sssd.c:359 plugins/sudoers/sssd.c:368 +#: plugins/sudoers/sssd.c:377 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "không thể tìm thấy ký hiệu “%s” trong %s" -#: plugins/sudoers/sudo_nss.c:296 +#: plugins/sudoers/sudo_nss.c:290 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "Các mục mặc định khớp cho %s trên máy %s:\n" -#: plugins/sudoers/sudo_nss.c:309 +#: plugins/sudoers/sudo_nss.c:308 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "Runas và Đặc-tả-lệnh mặc định cho %s:\n" -#: plugins/sudoers/sudo_nss.c:322 +#: plugins/sudoers/sudo_nss.c:326 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "Người dùng %s có thể chạy những lệnh sau trên máy %s:\n" -#: plugins/sudoers/sudo_nss.c:331 +#: plugins/sudoers/sudo_nss.c:339 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "Tài khoản %s không được phép thi hành sudo trên %s.\n" -#: plugins/sudoers/sudoers.c:160 plugins/sudoers/sudoers.c:201 -#: plugins/sudoers/sudoers.c:726 +#: plugins/sudoers/sudoers.c:172 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/visudo.c:223 plugins/sudoers/visudo.c:567 +msgid "unable to initialize sudoers default values" +msgstr "không thể khởi giá trị mặc định sudoers" + +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:239 +#: plugins/sudoers/sudoers.c:833 msgid "problem with defaults entries" msgstr "trục trặc với các mục mặc định" -#: plugins/sudoers/sudoers.c:167 +#: plugins/sudoers/sudoers.c:205 msgid "no valid sudoers sources found, quitting" msgstr "không có người dùng hợp lệ nào được tìm thấy, đang thoát ra" -#: plugins/sudoers/sudoers.c:233 +#: plugins/sudoers/sudoers.c:275 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers đã ghi rõ là siêu người dùng (root) không được phép chạy sudo" -#: plugins/sudoers/sudoers.c:278 +#: plugins/sudoers/sudoers.c:332 msgid "you are not permitted to use the -C option" msgstr "bạn không được phép sử dụng tùy chọn -C" -#: plugins/sudoers/sudoers.c:336 +#: plugins/sudoers/sudoers.c:396 #, c-format msgid "timestamp owner (%s): No such user" msgstr "người sở hữu dấu vết thời gian (%s): Không có người dùng nào như vậy" -#: plugins/sudoers/sudoers.c:350 +#: plugins/sudoers/sudoers.c:410 msgid "no tty" msgstr "không có tty" -#: plugins/sudoers/sudoers.c:351 +#: plugins/sudoers/sudoers.c:411 msgid "sorry, you must have a tty to run sudo" msgstr "rất tiếc, bạn phải có tty mới có thể chạy sudo" -#: plugins/sudoers/sudoers.c:402 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "lệnh trong thư mục hiện hành" -#: plugins/sudoers/sudoers.c:422 +#: plugins/sudoers/sudoers.c:486 msgid "sorry, you are not allowed to preserve the environment" msgstr "rất tiếc, bạn không được phép giữ lại môi trường" -#: plugins/sudoers/sudoers.c:674 +#: plugins/sudoers/sudoers.c:778 msgid "command too long" msgstr "lệnh quá dài" -#: plugins/sudoers/sudoers.c:779 plugins/sudoers/visudo.c:333 -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/sudoers.c:886 plugins/sudoers/visudo.c:427 +#: plugins/sudoers/visudo.c:667 #, c-format msgid "unable to stat %s" msgstr "không thể lấy thống kê %s" -#: plugins/sudoers/sudoers.c:783 +#: plugins/sudoers/sudoers.c:890 #, c-format msgid "%s is not a regular file" msgstr "%s không phải tập tin thường" -#: plugins/sudoers/sudoers.c:787 plugins/sudoers/timestamp.c:289 toke.l:945 +#: plugins/sudoers/sudoers.c:894 plugins/sudoers/timestamp.c:225 toke.l:947 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s được sở hữu bởi người dùng mang mã số %u, nên là %u" -#: plugins/sudoers/sudoers.c:791 toke.l:952 +#: plugins/sudoers/sudoers.c:898 toke.l:954 #, c-format msgid "%s is world writable" msgstr "%s ai ghi cũng được" -#: plugins/sudoers/sudoers.c:795 toke.l:957 +#: plugins/sudoers/sudoers.c:902 toke.l:959 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s được sở hữu bởi nhóm mang mã số %u, nên là %u" -#: plugins/sudoers/sudoers.c:826 +#: plugins/sudoers/sudoers.c:933 #, c-format msgid "only root can use `-c %s'" msgstr "chỉ có siêu người dùng (root) mới có thể sử dụng tùy chọn “-c %s”" -#: plugins/sudoers/sudoers.c:845 +#: plugins/sudoers/sudoers.c:952 #, c-format msgid "unknown login class: %s" msgstr "không rõ lớp đăng nhập: %s" -#: plugins/sudoers/sudoers.c:889 plugins/sudoers/sudoers.c:904 +#: plugins/sudoers/sudoers.c:1031 plugins/sudoers/sudoers.c:1059 #, c-format msgid "unable to resolve host %s" msgstr "không thể phân giải địa chỉ của máy %s" -#: plugins/sudoers/sudoers.c:986 plugins/sudoers/testsudoers.c:388 +#: plugins/sudoers/sudoers.c:1126 plugins/sudoers/testsudoers.c:385 #, c-format msgid "unknown group: %s" msgstr "không nhận ra nhóm: %s" -#: plugins/sudoers/sudoreplay.c:280 +#: plugins/sudoers/sudoreplay.c:232 #, c-format msgid "invalid filter option: %s" msgstr "tùy chọn lọc không hợp lệ: %s" -#: plugins/sudoers/sudoreplay.c:293 +#: plugins/sudoers/sudoreplay.c:245 #, c-format msgid "invalid max wait: %s" msgstr "thời gian chờ tối đa không hợp lệ: %s" -#: plugins/sudoers/sudoreplay.c:299 +#: plugins/sudoers/sudoreplay.c:251 #, c-format msgid "invalid speed factor: %s" msgstr "sai hệ số nhân tốc độ: %s" -#: plugins/sudoers/sudoreplay.c:302 plugins/sudoers/visudo.c:190 +#: plugins/sudoers/sudoreplay.c:254 plugins/sudoers/visudo.c:180 #, c-format msgid "%s version %s\n" msgstr "%s phiên bản %s\n" -#: plugins/sudoers/sudoreplay.c:334 +#: plugins/sudoers/sudoreplay.c:286 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/thời-gian: %s" -#: plugins/sudoers/sudoreplay.c:340 +#: plugins/sudoers/sudoreplay.c:292 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/thời-gian: %s" -#: plugins/sudoers/sudoreplay.c:356 +#: plugins/sudoers/sudoreplay.c:308 #, c-format msgid "Replaying sudo session: %s\n" msgstr "Đang chạy lại phiên sudo: %s\n" -#: plugins/sudoers/sudoreplay.c:362 +#: plugins/sudoers/sudoreplay.c:314 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "Cảnh báo: thiết bị cuối quá nhỏ để có thể chạy nhật ký một cách đúng đắn.\n" -#: plugins/sudoers/sudoreplay.c:363 +#: plugins/sudoers/sudoreplay.c:315 #, c-format msgid "Log geometry is %d x %d, your terminal's geometry is %d x %d." msgstr "Định dạng của nhật ký là %d x %d, định dạng của thiết bị cuối là %d x %d." -#: plugins/sudoers/sudoreplay.c:418 +#: plugins/sudoers/sudoreplay.c:368 msgid "unable to set tty to raw mode" msgstr "không thể đặt thiết bị tty chế độ thô (raw)" -#: plugins/sudoers/sudoreplay.c:449 +#: plugins/sudoers/sudoreplay.c:401 #, c-format msgid "invalid timing file line: %s" msgstr "sai dòng ghi thời gian trong tập tin: %s" -#: plugins/sudoers/sudoreplay.c:655 plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:611 plugins/sudoers/sudoreplay.c:636 #, c-format msgid "ambiguous expression \"%s\"" msgstr "biểu thức không rõ ràng “%s”" -#: plugins/sudoers/sudoreplay.c:702 +#: plugins/sudoers/sudoreplay.c:658 msgid "unmatched ')' in expression" msgstr "thiếu “)” trong biểu thức" -#: plugins/sudoers/sudoreplay.c:706 +#: plugins/sudoers/sudoreplay.c:662 #, c-format msgid "unknown search term \"%s\"" msgstr "không hiểu giới hạn tìm kiếm “%s”" -#: plugins/sudoers/sudoreplay.c:720 +#: plugins/sudoers/sudoreplay.c:677 #, c-format msgid "%s requires an argument" msgstr "%s yêu cầu một đối số" -#: plugins/sudoers/sudoreplay.c:724 plugins/sudoers/sudoreplay.c:1096 +#: plugins/sudoers/sudoreplay.c:680 plugins/sudoers/sudoreplay.c:1060 #, c-format msgid "invalid regular expression: %s" msgstr "biểu thức chính quy không hợp lệ: %s" -#: plugins/sudoers/sudoreplay.c:730 +#: plugins/sudoers/sudoreplay.c:684 #, c-format msgid "could not parse date \"%s\"" msgstr "không thể phân tích ngày tháng “%s”" -#: plugins/sudoers/sudoreplay.c:739 +#: plugins/sudoers/sudoreplay.c:693 msgid "unmatched '(' in expression" msgstr "thiếu “(” trong biểu thức" -#: plugins/sudoers/sudoreplay.c:741 +#: plugins/sudoers/sudoreplay.c:695 msgid "illegal trailing \"or\"" msgstr "thừa “or” ở cuối" -#: plugins/sudoers/sudoreplay.c:743 +#: plugins/sudoers/sudoreplay.c:697 msgid "illegal trailing \"!\"" msgstr "thừa “!” ở cuối" -#: plugins/sudoers/sudoreplay.c:796 +#: plugins/sudoers/sudoreplay.c:746 #, c-format msgid "unknown search type %d" msgstr "không hiểu kiểu tìm kiếm “%d”" -#: plugins/sudoers/sudoreplay.c:833 +#: plugins/sudoers/sudoreplay.c:784 #, c-format msgid "%s: invalid log file" msgstr "%s: tập tin nhật ký không hợp lệ" -#: plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:802 #, c-format msgid "%s: time stamp field is missing" msgstr "%s: thiếu trường dấu vết thời gian" -#: plugins/sudoers/sudoreplay.c:858 +#: plugins/sudoers/sudoreplay.c:809 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s: dấu vết thời gian “%s”: %s" -#: plugins/sudoers/sudoreplay.c:865 +#: plugins/sudoers/sudoreplay.c:816 #, c-format msgid "%s: user field is missing" msgstr "%s: thiếu trường tài khoản người dùng" -#: plugins/sudoers/sudoreplay.c:873 +#: plugins/sudoers/sudoreplay.c:825 #, c-format msgid "%s: runas user field is missing" msgstr "%s: thiếu trường “runas user” (chạy với tư cách tài khoản này)" -#: plugins/sudoers/sudoreplay.c:881 +#: plugins/sudoers/sudoreplay.c:834 #, c-format msgid "%s: runas group field is missing" msgstr "%s: thiếu trường “runas group” (chạy dưới danh nghĩa nhóm này)" -#: plugins/sudoers/sudoreplay.c:1236 +#: plugins/sudoers/sudoreplay.c:1197 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "cách dùng: %s [-h] [-d thư-mục] [-m số] [-s số] ID\n" -#: plugins/sudoers/sudoreplay.c:1239 +#: plugins/sudoers/sudoreplay.c:1200 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "cách dùng: %s [-h] [-d th.mục] -l [biểu thức tìm kiếm]\n" -#: plugins/sudoers/sudoreplay.c:1248 +#: plugins/sudoers/sudoreplay.c:1209 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1471,7 +1642,7 @@ "%s - chạy lại nhật ký phiên sudo\n" "\n" -#: plugins/sudoers/sudoreplay.c:1250 +#: plugins/sudoers/sudoreplay.c:1211 msgid "" "\n" "Options:\n" @@ -1493,11 +1664,11 @@ " -s, --speed=số tăng hoặc giảm tốc độ kết xuất\n" " -V, --version hiển thị thông tin về phiên bản rồi thoát" -#: plugins/sudoers/testsudoers.c:327 +#: plugins/sudoers/testsudoers.c:324 msgid "\thost unmatched" msgstr "\tmáy chủ không khớp" -#: plugins/sudoers/testsudoers.c:330 +#: plugins/sudoers/testsudoers.c:327 msgid "" "\n" "Command allowed" @@ -1505,7 +1676,7 @@ "\n" "Lệnh được phép" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command denied" @@ -1513,7 +1684,7 @@ "\n" "Lệnh bị cấm" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command unmatched" @@ -1521,114 +1692,129 @@ "\n" "Lệnh không khớp" -#: plugins/sudoers/timestamp.c:197 -#, c-format -msgid "unable to truncate time stamp file to %lld bytes" -msgstr "không thể cắt ngắn tập tin dấu-vết-thời-gian thành %lld byte" - -#: plugins/sudoers/timestamp.c:297 +#: plugins/sudoers/timestamp.c:233 #, c-format msgid "%s is group writable" msgstr "%s là người cùng nhóm được ghi" -#: plugins/sudoers/timestamp.c:318 +#: plugins/sudoers/timestamp.c:309 #, c-format -msgid "timestamp path too long: %s/%s" -msgstr "đường dẫn dấu vết thời gian quá dài: %s/%s" +msgid "unable to truncate time stamp file to %lld bytes" +msgstr "không thể cắt ngắn tập tin dấu-vết-thời-gian thành %lld byte" + +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:488 plugins/sudoers/visudo.c:494 +msgid "unable to read the clock" +msgstr "không thể đọc khóa" -#: plugins/sudoers/timestamp.c:498 +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "bỏ qua dấu vết thời gian nằm ở thì tương lai" -#: plugins/sudoers/timestamp.c:510 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "dấu vết thời gian nằm ở thì tương lai: %20.20s" -#: plugins/sudoers/timestamp.c:613 plugins/sudoers/timestamp.c:634 +#: plugins/sudoers/timestamp.c:863 +#, c-format +msgid "unable to lock time stamp file %s" +msgstr "không thể khóa tập tin dấu-vết-thời-gian %s" + +#: plugins/sudoers/timestamp.c:906 plugins/sudoers/timestamp.c:926 #, c-format msgid "lecture status path too long: %s/%s" msgstr "đường dẫn đến thư mục thuyết trình quá dài: %s/%s" -#: plugins/sudoers/visudo.c:192 +#: plugins/sudoers/visudo.c:182 #, c-format msgid "%s grammar version %d\n" msgstr "Ngữ pháp %s phiên bản %d\n" -#: plugins/sudoers/visudo.c:263 plugins/sudoers/visudo.c:552 +#: plugins/sudoers/visudo.c:254 plugins/sudoers/visudo.c:619 #, c-format msgid "press return to edit %s: " msgstr "bấm phím để trở về chỉnh sửa %s:" -#: plugins/sudoers/visudo.c:349 plugins/sudoers/visudo.c:355 +#: plugins/sudoers/visudo.c:320 +#, c-format +msgid "specified editor (%s) doesn't exist" +msgstr "trình biên soạn đã chỉ ra (%s) không tồn tại" + +#: plugins/sudoers/visudo.c:338 +#, c-format +msgid "no editor found (editor path = %s)" +msgstr "không tìm thấy trình biên soạn (đường dẫn của nó = %s)" + +#: plugins/sudoers/visudo.c:447 plugins/sudoers/visudo.c:455 msgid "write error" msgstr "lỗi ghi" -#: plugins/sudoers/visudo.c:439 +#: plugins/sudoers/visudo.c:501 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "không thể lấy thống kê tập tin tạm (%s), %s không thay đổi gì." -#: plugins/sudoers/visudo.c:444 +#: plugins/sudoers/visudo.c:508 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "tập tin tạm (%s) có kích cỡ bằng không, %s không thay đổi gì" -#: plugins/sudoers/visudo.c:450 +#: plugins/sudoers/visudo.c:514 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "trình biên soạn (%s) gặp lỗi, %s không thay đổi gì" -#: plugins/sudoers/visudo.c:472 +#: plugins/sudoers/visudo.c:536 #, c-format msgid "%s unchanged" msgstr "%s không thay đổi" -#: plugins/sudoers/visudo.c:497 +#: plugins/sudoers/visudo.c:562 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "không thể mở lại tập tin tạm (%s), %s không thay đổi gì." -#: plugins/sudoers/visudo.c:507 +#: plugins/sudoers/visudo.c:573 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "không thể phân tích tập tin tạm (%s), lỗi chưa được biết" -#: plugins/sudoers/visudo.c:543 +#: plugins/sudoers/visudo.c:610 #, c-format msgid "internal error, unable to find %s in list!" msgstr "lỗi hệ thống, không thể tìm thấy %s trong danh sách!" -#: plugins/sudoers/visudo.c:601 plugins/sudoers/visudo.c:610 +#: plugins/sudoers/visudo.c:669 plugins/sudoers/visudo.c:678 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "không thể đặt (uid, gid) của %s thành (%u, %u)" -#: plugins/sudoers/visudo.c:605 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:673 plugins/sudoers/visudo.c:683 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "không thể chuyển đổi chế độ của %s thành 0%o" -#: plugins/sudoers/visudo.c:632 +#: plugins/sudoers/visudo.c:700 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s và %s không ở trên cùng một hệ thống tập tin, sử dụng lệnh mv để đổi tên" -#: plugins/sudoers/visudo.c:646 +#: plugins/sudoers/visudo.c:714 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "thực hiện lệnh gặp lỗi: “%s %s %s”, %s không thay đổi" -#: plugins/sudoers/visudo.c:656 +#: plugins/sudoers/visudo.c:724 #, c-format msgid "error renaming %s, %s unchanged" msgstr "gặp lỗi khi đổi tên %s, %s không thay đổi" -#: plugins/sudoers/visudo.c:718 +#: plugins/sudoers/visudo.c:786 msgid "What now? " msgstr "Vậy làm gì bây giờ? " -#: plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:800 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1640,87 +1826,72 @@ " (x) thoát ra mà không ghi lại tập tin sudoerse\n" " (q) thoát ra và ghi lại tập tin sudoers (NGUY HIỂM!)\n" -#: plugins/sudoers/visudo.c:780 +#: plugins/sudoers/visudo.c:848 #, c-format msgid "unable to run %s" msgstr "không thể chạy %s" -#: plugins/sudoers/visudo.c:806 +#: plugins/sudoers/visudo.c:878 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s: sai sở hữu (uid, gid) đáng lẽ là (%u, %u)\n" -#: plugins/sudoers/visudo.c:813 +#: plugins/sudoers/visudo.c:885 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s: phân quyền sai, phải ở chế độ 0%o\n" -#: plugins/sudoers/visudo.c:838 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:910 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "failed to parse %s file, unknown error" msgstr "gặp lỗi khi phân tích tập tin %s, không rõ bị lỗi gì" -#: plugins/sudoers/visudo.c:854 plugins/sudoers/visudo_json.c:1054 +#: plugins/sudoers/visudo.c:926 plugins/sudoers/visudo_json.c:1041 #, c-format msgid "parse error in %s near line %d\n" msgstr "lỗi cú pháp trong %s gần dòng %d\n" -#: plugins/sudoers/visudo.c:857 plugins/sudoers/visudo_json.c:1057 +#: plugins/sudoers/visudo.c:929 plugins/sudoers/visudo_json.c:1044 #, c-format msgid "parse error in %s\n" msgstr "lỗi cú pháp trong %s\n" -#: plugins/sudoers/visudo.c:865 plugins/sudoers/visudo.c:872 +#: plugins/sudoers/visudo.c:937 plugins/sudoers/visudo.c:944 #, c-format msgid "%s: parsed OK\n" msgstr "%s: vượt qua kiểm duyệt\n" -#: plugins/sudoers/visudo.c:918 +#: plugins/sudoers/visudo.c:991 #, c-format msgid "%s busy, try again later" msgstr "%s đang bận, hãy thử lại sau" -#: plugins/sudoers/visudo.c:962 -#, c-format -msgid "specified editor (%s) doesn't exist" -msgstr "trình biên soạn đã chỉ ra (%s) không tồn tại" - -#: plugins/sudoers/visudo.c:985 -#, c-format -msgid "unable to stat editor (%s)" -msgstr "không thể lấy thống kê trình biên soạn (%s)" - -#: plugins/sudoers/visudo.c:1033 -#, c-format -msgid "no editor found (editor path = %s)" -msgstr "không tìm thấy trình biên soạn (đường dẫn của nó = %s)" - -#: plugins/sudoers/visudo.c:1136 +#: plugins/sudoers/visudo.c:1087 #, c-format msgid "Error: cycle in %s `%s'" msgstr "Lỗi: bị quẩn tròn trong %s “%s”" -#: plugins/sudoers/visudo.c:1137 +#: plugins/sudoers/visudo.c:1088 #, c-format msgid "Warning: cycle in %s `%s'" msgstr "Cảnh báo: quẩn tròn trong %s “%s”" -#: plugins/sudoers/visudo.c:1141 +#: plugins/sudoers/visudo.c:1092 #, c-format msgid "Error: %s `%s' referenced but not defined" msgstr "Lỗi: %s “%s” được tham chiếu nhưng chưa được định nghĩa" -#: plugins/sudoers/visudo.c:1142 +#: plugins/sudoers/visudo.c:1093 #, c-format msgid "Warning: %s `%s' referenced but not defined" msgstr "Cảnh báo: %s “%s” được tham chiếu nhưng chưa được định nghĩa" -#: plugins/sudoers/visudo.c:1281 +#: plugins/sudoers/visudo.c:1236 #, c-format msgid "Warning: unused %s `%s'" msgstr "Cảnh báo: chưa được dùng %s “%s”" -#: plugins/sudoers/visudo.c:1394 +#: plugins/sudoers/visudo.c:1349 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -1729,7 +1900,7 @@ "%s - sửa tập tin sudoers một cách an toàn\n" "\n" -#: plugins/sudoers/visudo.c:1396 +#: plugins/sudoers/visudo.c:1351 msgid "" "\n" "Options:\n" @@ -1751,15 +1922,33 @@ " -V, --version hiển thị thông tin về phiên bản rồi thoát\n" " -x, --export=tập-tin-ra xuất sudoers theo định dạng JSON" -#: plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo_json.c:1018 #, c-format msgid "%s: input and output files must be different" msgstr "%s: các tập tin đầu vào và đầu ra phải khác nhau" -#: toke.l:915 +#: toke.l:918 msgid "too many levels of includes" msgstr "quá nhiều cấp bao gồm (include)" +#~ msgid "unable allocate memory" +#~ msgstr "không thể cấp phát bộ nhớ" + +#~ msgid "timestamp path too long: %s/%s" +#~ msgstr "đường dẫn dấu vết thời gian quá dài: %s/%s" + +#~ msgid "unable to stat editor (%s)" +#~ msgstr "không thể lấy thống kê trình biên soạn (%s)" + +#~ msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" +#~ msgstr "sudo_ldap_conf_add_ports: hết bộ nhớ để mở rộng hostbuf" + +#~ msgid "sudo_ldap_parse_uri: out of space building hostbuf" +#~ msgstr "sudo_ldap_parse_uri: hết bộ nhớ để biên dịch “hostbuf”" + +#~ msgid "sudo_ldap_build_pass1 allocation mismatch" +#~ msgstr "sudo_ldap_build_pass1 phân bổ không khớp" + #~ msgid "Password:" #~ msgstr "Mật khẩu:" @@ -1850,9 +2039,6 @@ #~ msgid ">>> %s: %s near line %d <<<" #~ msgstr ">>> %s: %s gần dòng %d <<<" -#~ msgid "unable to allocate memory" -#~ msgstr "không thể cấp phát bộ nhớ" - #~ msgid "unable to set locale to \"%s\", using \"C\"" #~ msgstr "không thể đặt địa phương thành “%s”, sẽ dùng “C”" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/plugins/sudoers/po/zh_CN.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/plugins/sudoers/po/zh_CN.mo differ diff -Nru sudo-1.8.12/plugins/sudoers/po/zh_CN.po sudo-1.8.16/plugins/sudoers/po/zh_CN.po --- sudo-1.8.12/plugins/sudoers/po/zh_CN.po 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/po/zh_CN.po 2015-10-31 23:35:24.000000000 +0000 @@ -1,13 +1,13 @@ # Chinese simplified translation for sudoers. # This file is put in the public domain. -# Wylmer Wang , 2011, 2012, 2013, 2014. +# Wylmer Wang , 2011, 2012, 2013, 2014, 2015. # msgid "" msgstr "" -"Project-Id-Version: sudoers 1.8.12b3\n" +"Project-Id-Version: sudoers 1.8.15rc3\n" "Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-11-20 13:33-0700\n" -"PO-Revision-Date: 2014-11-22 09:17+0800\n" +"POT-Creation-Date: 2015-10-24 06:26-0600\n" +"PO-Revision-Date: 2015-10-29 21:02+0800\n" "Last-Translator: Wylmer Wang \n" "Language-Team: Chinese (simplified) \n" "Language: zh_CN\n" @@ -40,46 +40,172 @@ msgid "Sorry, try again." msgstr "对不起,请重试。" -#: gram.y:379 +#: gram.y:183 gram.y:201 gram.y:207 gram.y:213 gram.y:219 gram.y:225 +#: gram.y:241 gram.y:248 gram.y:255 gram.y:262 gram.y:269 gram.y:285 +#: gram.y:308 gram.y:315 gram.y:322 gram.y:329 gram.y:336 gram.y:391 +#: gram.y:399 gram.y:409 gram.y:439 gram.y:446 gram.y:453 gram.y:460 +#: gram.y:572 gram.y:579 gram.y:588 gram.y:597 gram.y:614 gram.y:670 +#: gram.y:677 gram.y:684 gram.y:692 gram.y:784 gram.y:791 gram.y:798 +#: gram.y:805 gram.y:812 gram.y:838 gram.y:845 gram.y:852 gram.y:1136 +#: gram.y:1143 plugins/sudoers/alias.c:123 plugins/sudoers/alias.c:136 +#: plugins/sudoers/auth/bsdauth.c:141 plugins/sudoers/auth/kerb5.c:119 +#: plugins/sudoers/auth/kerb5.c:145 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/pam.c:449 plugins/sudoers/auth/rfc1938.c:109 +#: plugins/sudoers/auth/sia.c:59 plugins/sudoers/defaults.c:516 +#: plugins/sudoers/defaults.c:720 plugins/sudoers/defaults.c:880 +#: plugins/sudoers/editor.c:64 plugins/sudoers/editor.c:82 +#: plugins/sudoers/editor.c:92 plugins/sudoers/env.c:233 +#: plugins/sudoers/group_plugin.c:133 plugins/sudoers/iolog.c:586 +#: plugins/sudoers/iolog.c:618 plugins/sudoers/iolog_path.c:167 +#: plugins/sudoers/ldap.c:446 plugins/sudoers/ldap.c:477 +#: plugins/sudoers/ldap.c:529 plugins/sudoers/ldap.c:562 +#: plugins/sudoers/ldap.c:914 plugins/sudoers/ldap.c:1061 +#: plugins/sudoers/ldap.c:1348 plugins/sudoers/ldap.c:1521 +#: plugins/sudoers/ldap.c:1597 plugins/sudoers/ldap.c:1733 +#: plugins/sudoers/ldap.c:1757 plugins/sudoers/ldap.c:1787 +#: plugins/sudoers/ldap.c:1840 plugins/sudoers/ldap.c:1855 +#: plugins/sudoers/ldap.c:1951 plugins/sudoers/ldap.c:1984 +#: plugins/sudoers/ldap.c:2137 plugins/sudoers/ldap.c:2234 +#: plugins/sudoers/ldap.c:3041 plugins/sudoers/ldap.c:3074 +#: plugins/sudoers/ldap.c:3388 plugins/sudoers/ldap.c:3416 +#: plugins/sudoers/ldap.c:3427 plugins/sudoers/ldap.c:3517 +#: plugins/sudoers/ldap.c:3533 plugins/sudoers/linux_audit.c:76 +#: plugins/sudoers/logging.c:188 plugins/sudoers/logging.c:666 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:501 +#: plugins/sudoers/match.c:537 plugins/sudoers/match.c:699 +#: plugins/sudoers/match.c:756 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:384 +#: plugins/sudoers/policy.c:583 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/sssd.c:160 plugins/sudoers/sssd.c:192 +#: plugins/sudoers/sssd.c:235 plugins/sudoers/sssd.c:242 +#: plugins/sudoers/sssd.c:278 plugins/sudoers/sssd.c:323 +#: plugins/sudoers/sssd.c:917 plugins/sudoers/sssd.c:1050 +#: plugins/sudoers/sudoers.c:159 plugins/sudoers/sudoers.c:294 +#: plugins/sudoers/sudoers.c:304 plugins/sudoers/sudoers.c:312 +#: plugins/sudoers/sudoers.c:365 plugins/sudoers/sudoers.c:663 +#: plugins/sudoers/sudoers.c:749 plugins/sudoers/sudoers.c:793 +#: plugins/sudoers/sudoers_debug.c:107 plugins/sudoers/sudoreplay.c:472 +#: plugins/sudoers/sudoreplay.c:668 plugins/sudoers/sudoreplay.c:780 +#: plugins/sudoers/sudoreplay.c:820 plugins/sudoers/sudoreplay.c:829 +#: plugins/sudoers/sudoreplay.c:839 plugins/sudoers/sudoreplay.c:847 +#: plugins/sudoers/sudoreplay.c:851 plugins/sudoers/sudoreplay.c:1007 +#: plugins/sudoers/sudoreplay.c:1011 plugins/sudoers/testsudoers.c:130 +#: plugins/sudoers/testsudoers.c:188 plugins/sudoers/testsudoers.c:215 +#: plugins/sudoers/testsudoers.c:232 plugins/sudoers/timestamp.c:390 +#: plugins/sudoers/timestamp.c:426 plugins/sudoers/timestamp.c:838 +#: plugins/sudoers/toke_util.c:56 plugins/sudoers/toke_util.c:109 +#: plugins/sudoers/toke_util.c:147 plugins/sudoers/visudo.c:152 +#: plugins/sudoers/visudo.c:213 plugins/sudoers/visudo.c:297 +#: plugins/sudoers/visudo.c:303 plugins/sudoers/visudo.c:433 +#: plugins/sudoers/visudo.c:979 plugins/sudoers/visudo.c:1023 +#: plugins/sudoers/visudo.c:1119 toke.l:785 toke.l:806 toke.l:816 toke.l:924 +#: toke.l:1082 +msgid "unable to allocate memory" +msgstr "无法分配内存" + +#: gram.y:471 msgid "a digest requires a path name" msgstr "摘要需要路径参数" -#: plugins/sudoers/alias.c:136 +#: gram.y:1136 gram.y:1143 plugins/sudoers/auth/pam.c:398 +#: plugins/sudoers/auth/pam.c:449 plugins/sudoers/auth/rfc1938.c:109 +#: plugins/sudoers/defaults.c:516 plugins/sudoers/defaults.c:720 +#: plugins/sudoers/defaults.c:880 plugins/sudoers/editor.c:64 +#: plugins/sudoers/editor.c:82 plugins/sudoers/editor.c:92 +#: plugins/sudoers/env.c:233 plugins/sudoers/group_plugin.c:133 +#: plugins/sudoers/iolog.c:586 plugins/sudoers/iolog.c:618 +#: plugins/sudoers/iolog_path.c:167 plugins/sudoers/ldap.c:446 +#: plugins/sudoers/ldap.c:477 plugins/sudoers/ldap.c:529 +#: plugins/sudoers/ldap.c:562 plugins/sudoers/ldap.c:914 +#: plugins/sudoers/ldap.c:1061 plugins/sudoers/ldap.c:1348 +#: plugins/sudoers/ldap.c:1521 plugins/sudoers/ldap.c:1597 +#: plugins/sudoers/ldap.c:1733 plugins/sudoers/ldap.c:1757 +#: plugins/sudoers/ldap.c:1787 plugins/sudoers/ldap.c:1840 +#: plugins/sudoers/ldap.c:1855 plugins/sudoers/ldap.c:1951 +#: plugins/sudoers/ldap.c:1984 plugins/sudoers/ldap.c:2137 +#: plugins/sudoers/ldap.c:2234 plugins/sudoers/ldap.c:3041 +#: plugins/sudoers/ldap.c:3074 plugins/sudoers/ldap.c:3388 +#: plugins/sudoers/ldap.c:3416 plugins/sudoers/ldap.c:3427 +#: plugins/sudoers/ldap.c:3517 plugins/sudoers/ldap.c:3533 +#: plugins/sudoers/linux_audit.c:76 plugins/sudoers/logging.c:188 +#: plugins/sudoers/logging.c:924 plugins/sudoers/match.c:501 +#: plugins/sudoers/match.c:537 plugins/sudoers/match.c:699 +#: plugins/sudoers/match.c:756 plugins/sudoers/parse.c:235 +#: plugins/sudoers/parse.c:247 plugins/sudoers/parse.c:262 +#: plugins/sudoers/parse.c:274 plugins/sudoers/policy.c:97 +#: plugins/sudoers/policy.c:106 plugins/sudoers/policy.c:115 +#: plugins/sudoers/policy.c:139 plugins/sudoers/policy.c:250 +#: plugins/sudoers/policy.c:271 plugins/sudoers/policy.c:280 +#: plugins/sudoers/policy.c:319 plugins/sudoers/policy.c:329 +#: plugins/sudoers/policy.c:338 plugins/sudoers/policy.c:384 +#: plugins/sudoers/policy.c:583 plugins/sudoers/prompt.c:93 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 plugins/sudoers/sssd.c:160 +#: plugins/sudoers/sssd.c:192 plugins/sudoers/sssd.c:235 +#: plugins/sudoers/sssd.c:242 plugins/sudoers/sssd.c:278 +#: plugins/sudoers/sssd.c:323 plugins/sudoers/sssd.c:917 +#: plugins/sudoers/sssd.c:1050 plugins/sudoers/sudoers.c:159 +#: plugins/sudoers/sudoers.c:294 plugins/sudoers/sudoers.c:304 +#: plugins/sudoers/sudoers.c:312 plugins/sudoers/sudoers.c:365 +#: plugins/sudoers/sudoers.c:663 plugins/sudoers/sudoers.c:749 +#: plugins/sudoers/sudoers.c:793 plugins/sudoers/sudoers_debug.c:106 +#: plugins/sudoers/sudoreplay.c:472 plugins/sudoers/sudoreplay.c:668 +#: plugins/sudoers/sudoreplay.c:780 plugins/sudoers/sudoreplay.c:820 +#: plugins/sudoers/sudoreplay.c:829 plugins/sudoers/sudoreplay.c:839 +#: plugins/sudoers/sudoreplay.c:847 plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:1007 plugins/sudoers/sudoreplay.c:1011 +#: plugins/sudoers/testsudoers.c:130 plugins/sudoers/testsudoers.c:188 +#: plugins/sudoers/testsudoers.c:215 plugins/sudoers/testsudoers.c:232 +#: plugins/sudoers/timestamp.c:390 plugins/sudoers/timestamp.c:426 +#: plugins/sudoers/timestamp.c:838 plugins/sudoers/toke_util.c:56 +#: plugins/sudoers/toke_util.c:109 plugins/sudoers/toke_util.c:147 +#: plugins/sudoers/visudo.c:152 plugins/sudoers/visudo.c:213 +#: plugins/sudoers/visudo.c:297 plugins/sudoers/visudo.c:303 +#: plugins/sudoers/visudo.c:433 plugins/sudoers/visudo.c:979 +#: plugins/sudoers/visudo.c:1023 plugins/sudoers/visudo.c:1119 toke.l:785 +#: toke.l:806 toke.l:816 toke.l:924 toke.l:1082 +#, c-format +msgid "%s: %s" +msgstr "%s:%s" + +#: plugins/sudoers/alias.c:132 #, c-format msgid "Alias `%s' already defined" msgstr "别名“%s”已定义" -#: plugins/sudoers/auth/bsdauth.c:75 +#: plugins/sudoers/auth/bsdauth.c:68 #, c-format msgid "unable to get login class for user %s" msgstr "无法获取用户 %s 的登录类别(login class)" -#: plugins/sudoers/auth/bsdauth.c:80 +#: plugins/sudoers/auth/bsdauth.c:73 msgid "unable to begin bsd authentication" msgstr "无法开始 bsd 认证" -#: plugins/sudoers/auth/bsdauth.c:88 +#: plugins/sudoers/auth/bsdauth.c:81 msgid "invalid authentication type" msgstr "无效的认证类型" -#: plugins/sudoers/auth/bsdauth.c:97 +#: plugins/sudoers/auth/bsdauth.c:90 msgid "unable to initialize BSD authentication" msgstr "无法初始化 bsd 认证" -#: plugins/sudoers/auth/fwtk.c:59 +#: plugins/sudoers/auth/fwtk.c:52 msgid "unable to read fwtk config" msgstr "无法读取 fwtk 配置" -#: plugins/sudoers/auth/fwtk.c:64 +#: plugins/sudoers/auth/fwtk.c:57 msgid "unable to connect to authentication server" msgstr "无法连接到认证服务器" -#: plugins/sudoers/auth/fwtk.c:70 plugins/sudoers/auth/fwtk.c:94 -#: plugins/sudoers/auth/fwtk.c:127 +#: plugins/sudoers/auth/fwtk.c:63 plugins/sudoers/auth/fwtk.c:87 +#: plugins/sudoers/auth/fwtk.c:120 msgid "lost connection to authentication server" msgstr "丢失了到认证服务器的连接" -#: plugins/sudoers/auth/fwtk.c:74 +#: plugins/sudoers/auth/fwtk.c:67 #, c-format msgid "" "authentication server error:\n" @@ -88,155 +214,155 @@ "认证服务器错误:\n" "%s" -#: plugins/sudoers/auth/kerb5.c:116 +#: plugins/sudoers/auth/kerb5.c:111 #, c-format msgid "%s: unable to convert principal to string ('%s'): %s" msgstr "%s:无法将主体(principal)转换为字符串(“%s”):%s" -#: plugins/sudoers/auth/kerb5.c:158 +#: plugins/sudoers/auth/kerb5.c:161 #, c-format msgid "%s: unable to parse '%s': %s" msgstr "%s:无法解析“%s”:%s" -#: plugins/sudoers/auth/kerb5.c:167 +#: plugins/sudoers/auth/kerb5.c:170 #, c-format msgid "%s: unable to resolve credential cache: %s" msgstr "%s:无法解析凭据缓存:%s" -#: plugins/sudoers/auth/kerb5.c:214 +#: plugins/sudoers/auth/kerb5.c:217 #, c-format msgid "%s: unable to allocate options: %s" msgstr "%s:无法分配选项:%s" -#: plugins/sudoers/auth/kerb5.c:229 +#: plugins/sudoers/auth/kerb5.c:232 #, c-format msgid "%s: unable to get credentials: %s" msgstr "%s:无法获取凭据:%s" -#: plugins/sudoers/auth/kerb5.c:242 +#: plugins/sudoers/auth/kerb5.c:245 #, c-format msgid "%s: unable to initialize credential cache: %s" msgstr "%s:无法初始化凭据缓存:%s" -#: plugins/sudoers/auth/kerb5.c:245 +#: plugins/sudoers/auth/kerb5.c:248 #, c-format msgid "%s: unable to store credential in cache: %s" msgstr "%s:无法在缓存中储存凭据:%s" -#: plugins/sudoers/auth/kerb5.c:309 +#: plugins/sudoers/auth/kerb5.c:312 #, c-format msgid "%s: unable to get host principal: %s" msgstr "%s:无法获取主机主体(principal):%s" -#: plugins/sudoers/auth/kerb5.c:323 +#: plugins/sudoers/auth/kerb5.c:326 #, c-format msgid "%s: Cannot verify TGT! Possible attack!: %s" msgstr "%s:无法验证目标!可能遭到了攻击!:%s" -#: plugins/sudoers/auth/pam.c:98 +#: plugins/sudoers/auth/pam.c:92 msgid "unable to initialize PAM" msgstr "无法初始化 PAM" -#: plugins/sudoers/auth/pam.c:149 +#: plugins/sudoers/auth/pam.c:164 msgid "account validation failure, is your account locked?" msgstr "账户验证失败,您的账户是不是上锁了?" -#: plugins/sudoers/auth/pam.c:153 +#: plugins/sudoers/auth/pam.c:168 msgid "Account or password is expired, reset your password and try again" msgstr "账户或密码过期,重置您的密码并重试" -#: plugins/sudoers/auth/pam.c:161 +#: plugins/sudoers/auth/pam.c:176 #, c-format msgid "unable to change expired password: %s" msgstr "无法更改过期的密码:%s" -#: plugins/sudoers/auth/pam.c:166 +#: plugins/sudoers/auth/pam.c:181 msgid "Password expired, contact your system administrator" msgstr "密码过期,联系您的系统管理员" -#: plugins/sudoers/auth/pam.c:170 +#: plugins/sudoers/auth/pam.c:185 msgid "Account expired or PAM config lacks an \"account\" section for sudo, contact your system administrator" msgstr "账户过期,或 PAM 配置缺少 sudo 使用的“account”节,联系您的系统管理员" -#: plugins/sudoers/auth/pam.c:187 +#: plugins/sudoers/auth/pam.c:199 #, c-format msgid "PAM authentication error: %s" msgstr "PAM 认证出错:%s" -#: plugins/sudoers/auth/rfc1938.c:103 plugins/sudoers/visudo.c:228 +#: plugins/sudoers/auth/rfc1938.c:97 plugins/sudoers/visudo.c:218 #, c-format msgid "you do not exist in the %s database" msgstr "%s 数据库中没有您" -#: plugins/sudoers/auth/securid5.c:80 +#: plugins/sudoers/auth/securid5.c:73 msgid "failed to initialise the ACE API library" msgstr "初始化 ACE API 库失败" -#: plugins/sudoers/auth/securid5.c:106 +#: plugins/sudoers/auth/securid5.c:99 msgid "unable to contact the SecurID server" msgstr "无法联络 SecurID 服务器" -#: plugins/sudoers/auth/securid5.c:115 +#: plugins/sudoers/auth/securid5.c:108 msgid "User ID locked for SecurID Authentication" msgstr "为进行 SecurID 认证,已锁定用户 ID" -#: plugins/sudoers/auth/securid5.c:119 plugins/sudoers/auth/securid5.c:170 +#: plugins/sudoers/auth/securid5.c:112 plugins/sudoers/auth/securid5.c:163 msgid "invalid username length for SecurID" msgstr "SecurID 的用户名长度无效" -#: plugins/sudoers/auth/securid5.c:123 plugins/sudoers/auth/securid5.c:175 +#: plugins/sudoers/auth/securid5.c:116 plugins/sudoers/auth/securid5.c:168 msgid "invalid Authentication Handle for SecurID" msgstr "SecurID 的认证句柄无效" -#: plugins/sudoers/auth/securid5.c:127 +#: plugins/sudoers/auth/securid5.c:120 msgid "SecurID communication failed" msgstr "SecurID 通讯失败" -#: plugins/sudoers/auth/securid5.c:131 plugins/sudoers/auth/securid5.c:214 +#: plugins/sudoers/auth/securid5.c:124 plugins/sudoers/auth/securid5.c:207 msgid "unknown SecurID error" msgstr "未知的 SecurID 错误" -#: plugins/sudoers/auth/securid5.c:165 +#: plugins/sudoers/auth/securid5.c:158 msgid "invalid passcode length for SecurID" msgstr "无效的 SecurID 密码长度" -#: plugins/sudoers/auth/sia.c:123 +#: plugins/sudoers/auth/sia.c:69 plugins/sudoers/auth/sia.c:124 msgid "unable to initialize SIA session" msgstr "无法初始化 SIA 会话" -#: plugins/sudoers/auth/sudo_auth.c:115 +#: plugins/sudoers/auth/sudo_auth.c:126 msgid "invalid authentication methods" msgstr "无效的认证方法" -#: plugins/sudoers/auth/sudo_auth.c:117 +#: plugins/sudoers/auth/sudo_auth.c:128 msgid "Invalid authentication methods compiled into sudo! You may not mix standalone and non-standalone authentication." msgstr "编译进 sudo 的认证方法无效!您不能混用独立和非独立认证。" -#: plugins/sudoers/auth/sudo_auth.c:203 plugins/sudoers/auth/sudo_auth.c:252 +#: plugins/sudoers/auth/sudo_auth.c:225 plugins/sudoers/auth/sudo_auth.c:274 msgid "no authentication methods" msgstr "无认证方法" -#: plugins/sudoers/auth/sudo_auth.c:205 +#: plugins/sudoers/auth/sudo_auth.c:227 msgid "There are no authentication methods compiled into sudo! If you want to turn off authentication, use the --disable-authentication configure option." msgstr "sudo 编译时没有加入任何认证方法!如果您想关闭认证,使用 --disable-authentication 配置选项。" -#: plugins/sudoers/auth/sudo_auth.c:254 +#: plugins/sudoers/auth/sudo_auth.c:276 msgid "Unable to initialize authentication methods." msgstr "无法初始化认证方法。" -#: plugins/sudoers/auth/sudo_auth.c:412 +#: plugins/sudoers/auth/sudo_auth.c:435 msgid "Authentication methods:" msgstr "认证方法:" -#: plugins/sudoers/bsm_audit.c:95 plugins/sudoers/bsm_audit.c:184 +#: plugins/sudoers/bsm_audit.c:111 plugins/sudoers/bsm_audit.c:200 msgid "Could not determine audit condition" msgstr "无法确定审核条件" -#: plugins/sudoers/bsm_audit.c:156 plugins/sudoers/bsm_audit.c:244 +#: plugins/sudoers/bsm_audit.c:172 plugins/sudoers/bsm_audit.c:260 msgid "unable to commit audit record" msgstr "无法提交审核记录" -#: plugins/sudoers/check.c:197 +#: plugins/sudoers/check.c:252 msgid "" "\n" "We trust you have received the usual lecture from the local System\n" @@ -256,15 +382,15 @@ " #3) 权力越大,责任越大。\n" "\n" -#: plugins/sudoers/check.c:240 plugins/sudoers/check.c:250 -#: plugins/sudoers/sudoers.c:599 plugins/sudoers/sudoers.c:628 +#: plugins/sudoers/check.c:295 plugins/sudoers/check.c:305 +#: plugins/sudoers/sudoers.c:699 plugins/sudoers/sudoers.c:728 #, c-format msgid "unknown uid: %u" msgstr "未知的用户 ID:%u" -#: plugins/sudoers/check.c:245 plugins/sudoers/policy.c:683 -#: plugins/sudoers/sudoers.c:955 plugins/sudoers/testsudoers.c:212 -#: plugins/sudoers/testsudoers.c:364 +#: plugins/sudoers/check.c:300 plugins/sudoers/policy.c:755 +#: plugins/sudoers/sudoers.c:1095 plugins/sudoers/testsudoers.c:206 +#: plugins/sudoers/testsudoers.c:361 #, c-format msgid "unknown user: %s" msgstr "未知用户:%s" @@ -313,535 +439,542 @@ msgstr "在用户不允许执行某个命令时发送邮件" #: plugins/sudoers/def_data.c:67 +msgid "Send mail if the user tries to run a command" +msgstr "在用户尝试执行某个命令时发送邮件" + +#: plugins/sudoers/def_data.c:71 msgid "Use a separate timestamp for each user/tty combo" msgstr "对每个用户/终端组合使用独立的时间戳" -#: plugins/sudoers/def_data.c:71 +#: plugins/sudoers/def_data.c:75 msgid "Lecture user the first time they run sudo" msgstr "在用户第一次运行 sudo 时向他致辞" -#: plugins/sudoers/def_data.c:75 +#: plugins/sudoers/def_data.c:79 #, c-format msgid "File containing the sudo lecture: %s" msgstr "包含 sudo 致辞的文件:%s" -#: plugins/sudoers/def_data.c:79 +#: plugins/sudoers/def_data.c:83 msgid "Require users to authenticate by default" msgstr "默认要求用户认证" -#: plugins/sudoers/def_data.c:83 +#: plugins/sudoers/def_data.c:87 msgid "Root may run sudo" msgstr "root 可以运行 sudo" -#: plugins/sudoers/def_data.c:87 +#: plugins/sudoers/def_data.c:91 msgid "Log the hostname in the (non-syslog) log file" msgstr "将主机名记录在(非 syslog)的日志文件中" -#: plugins/sudoers/def_data.c:91 +#: plugins/sudoers/def_data.c:95 msgid "Log the year in the (non-syslog) log file" msgstr "将年份记录在(非 syslog)的日志文件中" -#: plugins/sudoers/def_data.c:95 +#: plugins/sudoers/def_data.c:99 msgid "If sudo is invoked with no arguments, start a shell" msgstr "如果不带参数调用 sudo,启动一个 shell" -#: plugins/sudoers/def_data.c:99 +#: plugins/sudoers/def_data.c:103 msgid "Set $HOME to the target user when starting a shell with -s" msgstr "若使用 -s 选项启动 shell,将 $HOME 设为目标用户的主目录" -#: plugins/sudoers/def_data.c:103 +#: plugins/sudoers/def_data.c:107 msgid "Always set $HOME to the target user's home directory" msgstr "总是将 $HOME 设为目标用户的主目录" -#: plugins/sudoers/def_data.c:107 +#: plugins/sudoers/def_data.c:111 msgid "Allow some information gathering to give useful error messages" msgstr "允许收集一些信息,以提供有用的错误消息" -#: plugins/sudoers/def_data.c:111 +#: plugins/sudoers/def_data.c:115 msgid "Require fully-qualified hostnames in the sudoers file" msgstr "要求 sudoers 文件中包含完全限定的主机名" -#: plugins/sudoers/def_data.c:115 +#: plugins/sudoers/def_data.c:119 msgid "Insult the user when they enter an incorrect password" msgstr "在用户输入错误密码时对他们进行(玩笑式的)嘲讽" -#: plugins/sudoers/def_data.c:119 +#: plugins/sudoers/def_data.c:123 msgid "Only allow the user to run sudo if they have a tty" msgstr "只允许拥有终端的用户执行 sudo" -#: plugins/sudoers/def_data.c:123 +#: plugins/sudoers/def_data.c:127 msgid "Visudo will honor the EDITOR environment variable" msgstr "Visudo 将优先考虑 EDITOR 环境变量" -#: plugins/sudoers/def_data.c:127 +#: plugins/sudoers/def_data.c:131 msgid "Prompt for root's password, not the users's" msgstr "询问 root 用户的密码而非用户的密码" -#: plugins/sudoers/def_data.c:131 +#: plugins/sudoers/def_data.c:135 msgid "Prompt for the runas_default user's password, not the users's" msgstr "询问 runas_default 用户的密码,而非用户密码" -#: plugins/sudoers/def_data.c:135 +#: plugins/sudoers/def_data.c:139 msgid "Prompt for the target user's password, not the users's" msgstr "询问目标用户的密码,而非用户密码" -#: plugins/sudoers/def_data.c:139 +#: plugins/sudoers/def_data.c:143 msgid "Apply defaults in the target user's login class if there is one" msgstr "应用目标用户登录类别中的默认设置,如果没有设置的话" -#: plugins/sudoers/def_data.c:143 +#: plugins/sudoers/def_data.c:147 msgid "Set the LOGNAME and USER environment variables" msgstr "设置 LOGNAME 和 USER 环境变量" -#: plugins/sudoers/def_data.c:147 +#: plugins/sudoers/def_data.c:151 msgid "Only set the effective uid to the target user, not the real uid" msgstr "只将有效用户 ID 设为目标用户的,而不是实际用户 ID" -#: plugins/sudoers/def_data.c:151 +#: plugins/sudoers/def_data.c:155 msgid "Don't initialize the group vector to that of the target user" msgstr "不将组向量初始化为目标用户的" -#: plugins/sudoers/def_data.c:155 +#: plugins/sudoers/def_data.c:159 #, c-format msgid "Length at which to wrap log file lines (0 for no wrap): %u" msgstr "日志文件折行的长度(0 则不折行):%u" -#: plugins/sudoers/def_data.c:159 +#: plugins/sudoers/def_data.c:163 #, c-format msgid "Authentication timestamp timeout: %.1f minutes" msgstr "认证时间戳延时:%.1f 分钟" -#: plugins/sudoers/def_data.c:163 +#: plugins/sudoers/def_data.c:167 #, c-format msgid "Password prompt timeout: %.1f minutes" msgstr "密码提示延时:%.1f 分钟" -#: plugins/sudoers/def_data.c:167 +#: plugins/sudoers/def_data.c:171 #, c-format msgid "Number of tries to enter a password: %u" msgstr "输入密码的尝试次数:%u" -#: plugins/sudoers/def_data.c:171 +#: plugins/sudoers/def_data.c:175 #, c-format msgid "Umask to use or 0777 to use user's: 0%o" msgstr "要使用的 umask,或 0777 使用用户的:0%o" -#: plugins/sudoers/def_data.c:175 +#: plugins/sudoers/def_data.c:179 #, c-format msgid "Path to log file: %s" msgstr "日志文件路径:%s" -#: plugins/sudoers/def_data.c:179 +#: plugins/sudoers/def_data.c:183 #, c-format msgid "Path to mail program: %s" msgstr "邮件程序路径:%s" -#: plugins/sudoers/def_data.c:183 +#: plugins/sudoers/def_data.c:187 #, c-format msgid "Flags for mail program: %s" msgstr "邮件程序标志:%s" -#: plugins/sudoers/def_data.c:187 +#: plugins/sudoers/def_data.c:191 #, c-format msgid "Address to send mail to: %s" msgstr "发送邮件的地址:%s" -#: plugins/sudoers/def_data.c:191 +#: plugins/sudoers/def_data.c:195 #, c-format msgid "Address to send mail from: %s" msgstr "接收邮件的地址:%s" -#: plugins/sudoers/def_data.c:195 +#: plugins/sudoers/def_data.c:199 #, c-format msgid "Subject line for mail messages: %s" msgstr "邮件消息的主题行:%s" -#: plugins/sudoers/def_data.c:199 +#: plugins/sudoers/def_data.c:203 #, c-format msgid "Incorrect password message: %s" msgstr "密码错误消息:%s" -#: plugins/sudoers/def_data.c:203 +#: plugins/sudoers/def_data.c:207 #, c-format msgid "Path to lecture status dir: %s" msgstr "致辞(lecture)状态文件夹的路径:%s" -#: plugins/sudoers/def_data.c:207 +#: plugins/sudoers/def_data.c:211 #, c-format msgid "Path to authentication timestamp dir: %s" msgstr "认证时间戳文件夹的路径:%s" -#: plugins/sudoers/def_data.c:211 +#: plugins/sudoers/def_data.c:215 #, c-format msgid "Owner of the authentication timestamp dir: %s" msgstr "认证时间戳的所有者:%s" -#: plugins/sudoers/def_data.c:215 +#: plugins/sudoers/def_data.c:219 #, c-format msgid "Users in this group are exempt from password and PATH requirements: %s" msgstr "此组的用户不要求密码和 PATH:%s" -#: plugins/sudoers/def_data.c:219 +#: plugins/sudoers/def_data.c:223 #, c-format msgid "Default password prompt: %s" msgstr "默认密码提示:%s" -#: plugins/sudoers/def_data.c:223 +#: plugins/sudoers/def_data.c:227 msgid "If set, passprompt will override system prompt in all cases." msgstr "如果设置,密码提示将覆盖各种情况下的系统提示。" -#: plugins/sudoers/def_data.c:227 +#: plugins/sudoers/def_data.c:231 #, c-format msgid "Default user to run commands as: %s" msgstr "运行命令的默认用户:%s" -#: plugins/sudoers/def_data.c:231 +#: plugins/sudoers/def_data.c:235 #, c-format msgid "Value to override user's $PATH with: %s" msgstr "覆盖用户的 $PATH 变量的值:%s" -#: plugins/sudoers/def_data.c:235 +#: plugins/sudoers/def_data.c:239 #, c-format msgid "Path to the editor for use by visudo: %s" msgstr "visudo 所使用的编辑器的路径:%s" -#: plugins/sudoers/def_data.c:239 +#: plugins/sudoers/def_data.c:243 #, c-format msgid "When to require a password for 'list' pseudocommand: %s" msgstr "何时为“list”伪命令请求密码:%s" -#: plugins/sudoers/def_data.c:243 +#: plugins/sudoers/def_data.c:247 #, c-format msgid "When to require a password for 'verify' pseudocommand: %s" msgstr "何时为“verify”伪命令请求密码:%s" -#: plugins/sudoers/def_data.c:247 +#: plugins/sudoers/def_data.c:251 msgid "Preload the dummy exec functions contained in the sudo_noexec library" msgstr "预加载“sudo_noexec”库中包含的哑 exec 函数" -#: plugins/sudoers/def_data.c:251 +#: plugins/sudoers/def_data.c:255 msgid "If LDAP directory is up, do we ignore local sudoers file" msgstr "如果 LDAP 目录有效,是不是忽略本地的 sudoers 文件" -#: plugins/sudoers/def_data.c:255 +#: plugins/sudoers/def_data.c:259 #, c-format msgid "File descriptors >= %d will be closed before executing a command" msgstr ">= %d 的文件描述符将会在执行命令前关闭" -#: plugins/sudoers/def_data.c:259 +#: plugins/sudoers/def_data.c:263 msgid "If set, users may override the value of `closefrom' with the -C option" msgstr "如果设置,用户可以通过 -C 选项覆盖“closefrom”的值" -#: plugins/sudoers/def_data.c:263 +#: plugins/sudoers/def_data.c:267 msgid "Allow users to set arbitrary environment variables" msgstr "允许用户设置任意的环境变量" -#: plugins/sudoers/def_data.c:267 +#: plugins/sudoers/def_data.c:271 msgid "Reset the environment to a default set of variables" msgstr "将环境重设为默认的变量集" -#: plugins/sudoers/def_data.c:271 +#: plugins/sudoers/def_data.c:275 msgid "Environment variables to check for sanity:" msgstr "要检查完整性的环境变量:" -#: plugins/sudoers/def_data.c:275 +#: plugins/sudoers/def_data.c:279 msgid "Environment variables to remove:" msgstr "要移除的环境变量:" -#: plugins/sudoers/def_data.c:279 +#: plugins/sudoers/def_data.c:283 msgid "Environment variables to preserve:" msgstr "要保留的环境变量:" -#: plugins/sudoers/def_data.c:283 +#: plugins/sudoers/def_data.c:287 #, c-format msgid "SELinux role to use in the new security context: %s" msgstr "在新的安全环境中使用的 SELinux 角色:%s" -#: plugins/sudoers/def_data.c:287 +#: plugins/sudoers/def_data.c:291 #, c-format msgid "SELinux type to use in the new security context: %s" msgstr "在新的安全环境中使用的 SELinux 类型:%s" -#: plugins/sudoers/def_data.c:291 +#: plugins/sudoers/def_data.c:295 #, c-format msgid "Path to the sudo-specific environment file: %s" msgstr "sudo 特定环境文件的路径:%s" -#: plugins/sudoers/def_data.c:295 +#: plugins/sudoers/def_data.c:299 #, c-format msgid "Locale to use while parsing sudoers: %s" msgstr "解析 sudoers 时使用的区域设置:%s" -#: plugins/sudoers/def_data.c:299 +#: plugins/sudoers/def_data.c:303 msgid "Allow sudo to prompt for a password even if it would be visible" msgstr "允许 sudo 询问密码,即使它不可见" -#: plugins/sudoers/def_data.c:303 +#: plugins/sudoers/def_data.c:307 msgid "Provide visual feedback at the password prompt when there is user input" msgstr "用户在询问密码窗口输入时提供视觉反馈" -#: plugins/sudoers/def_data.c:307 +#: plugins/sudoers/def_data.c:311 msgid "Use faster globbing that is less accurate but does not access the filesystem" msgstr "使用不太精确但不访问文件系统的较快通配方法" -#: plugins/sudoers/def_data.c:311 +#: plugins/sudoers/def_data.c:315 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:315 +#: plugins/sudoers/def_data.c:319 msgid "Log user's input for the command being run" msgstr "记录用户在所执行命令中的输入" -#: plugins/sudoers/def_data.c:319 +#: plugins/sudoers/def_data.c:323 msgid "Log the output of the command being run" msgstr "记录所执行命令的输出" -#: plugins/sudoers/def_data.c:323 +#: plugins/sudoers/def_data.c:327 msgid "Compress I/O logs using zlib" msgstr "使用 zlib 压缩 I/O 日志" -#: plugins/sudoers/def_data.c:327 +#: plugins/sudoers/def_data.c:331 msgid "Always run commands in a pseudo-tty" msgstr "总是在伪终端中运行命令" -#: plugins/sudoers/def_data.c:331 +#: plugins/sudoers/def_data.c:335 #, c-format msgid "Plugin for non-Unix group support: %s" msgstr "用于非 Unix 组支持的插件:%s" -#: plugins/sudoers/def_data.c:335 +#: plugins/sudoers/def_data.c:339 #, c-format msgid "Directory in which to store input/output logs: %s" msgstr "用于保存输入/输出日志的目录:%s" -#: plugins/sudoers/def_data.c:339 +#: plugins/sudoers/def_data.c:343 #, c-format msgid "File in which to store the input/output log: %s" msgstr "用于保存输入/输出日志的文件:%s" -#: plugins/sudoers/def_data.c:343 +#: plugins/sudoers/def_data.c:347 msgid "Add an entry to the utmp/utmpx file when allocating a pty" msgstr "在分配伪终端时向 utmp/utmpx 文件中添加一条记录" -#: plugins/sudoers/def_data.c:347 +#: plugins/sudoers/def_data.c:351 msgid "Set the user in utmp to the runas user, not the invoking user" msgstr "将 utmp 中的用户设为 runas 用户,而不是调用用户" -#: plugins/sudoers/def_data.c:351 +#: plugins/sudoers/def_data.c:355 msgid "Set of permitted privileges" msgstr "允许权限的集合" -#: plugins/sudoers/def_data.c:355 +#: plugins/sudoers/def_data.c:359 msgid "Set of limit privileges" msgstr "限制权限的集合" -#: plugins/sudoers/def_data.c:359 +#: plugins/sudoers/def_data.c:363 msgid "Run commands on a pty in the background" msgstr "在后台的伪终端上运行命令" -#: plugins/sudoers/def_data.c:363 +#: plugins/sudoers/def_data.c:367 msgid "PAM service name to use" msgstr "要使用的 PAM 服务名称" -#: plugins/sudoers/def_data.c:367 +#: plugins/sudoers/def_data.c:371 msgid "PAM service name to use for login shells" msgstr "用于登录 shell 的 PAM 服务名称" -#: plugins/sudoers/def_data.c:371 +#: plugins/sudoers/def_data.c:375 msgid "Attempt to establish PAM credentials for the target user" msgstr "尝试为目标用户建立 PAM 凭据" -#: plugins/sudoers/def_data.c:375 +#: plugins/sudoers/def_data.c:379 msgid "Create a new PAM session for the command to run in" msgstr "创建一个新的 PAM 会话来运行该命令" -#: plugins/sudoers/def_data.c:379 +#: plugins/sudoers/def_data.c:383 #, c-format msgid "Maximum I/O log sequence number: %u" msgstr "最大 I/O 日志序列号:%u" -#: plugins/sudoers/def_data.c:383 +#: plugins/sudoers/def_data.c:387 msgid "Enable sudoers netgroup support" msgstr "启用 support netgroup 支持" -#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:601 -#: plugins/sudoers/visudo_json.c:642 plugins/sudoers/visudo_json.c:677 +#: plugins/sudoers/def_data.c:391 +msgid "Check the parent directory for writability when editing files with sudoedit" +msgstr "在使用 sudoedit 编辑文件时检查上级目录是否可写" + +#: plugins/sudoers/def_data.c:395 +msgid "Follow symbolic links when editing files with sudoedit" +msgstr "使用 sudoedit 编辑文件时循符号连接(定位到原文件)" + +#: plugins/sudoers/def_data.c:399 +msgid "Query the group plugin for unknown system groups" +msgstr "" + +#: plugins/sudoers/defaults.c:199 plugins/sudoers/defaults.c:608 +#: plugins/sudoers/visudo_json.c:633 plugins/sudoers/visudo_json.c:668 #, c-format msgid "unknown defaults entry `%s'" msgstr "未知的默认条目“%s”" -#: plugins/sudoers/defaults.c:218 plugins/sudoers/defaults.c:228 -#: plugins/sudoers/defaults.c:248 plugins/sudoers/defaults.c:261 -#: plugins/sudoers/defaults.c:274 plugins/sudoers/defaults.c:287 -#: plugins/sudoers/defaults.c:300 plugins/sudoers/defaults.c:320 -#: plugins/sudoers/defaults.c:330 +#: plugins/sudoers/defaults.c:207 plugins/sudoers/defaults.c:217 +#: plugins/sudoers/defaults.c:241 plugins/sudoers/defaults.c:256 +#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 +#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 +#: plugins/sudoers/defaults.c:325 #, c-format msgid "value `%s' is invalid for option `%s'" msgstr "值“%s”对选项“%s”无效" -#: plugins/sudoers/defaults.c:221 plugins/sudoers/defaults.c:231 -#: plugins/sudoers/defaults.c:239 plugins/sudoers/defaults.c:256 -#: plugins/sudoers/defaults.c:269 plugins/sudoers/defaults.c:282 -#: plugins/sudoers/defaults.c:295 plugins/sudoers/defaults.c:315 -#: plugins/sudoers/defaults.c:326 +#: plugins/sudoers/defaults.c:210 plugins/sudoers/defaults.c:220 +#: plugins/sudoers/defaults.c:228 plugins/sudoers/defaults.c:251 +#: plugins/sudoers/defaults.c:264 plugins/sudoers/defaults.c:277 +#: plugins/sudoers/defaults.c:290 plugins/sudoers/defaults.c:310 +#: plugins/sudoers/defaults.c:321 #, c-format msgid "no value specified for `%s'" msgstr "没有给“%s”指定值" -#: plugins/sudoers/defaults.c:244 +#: plugins/sudoers/defaults.c:233 #, c-format msgid "values for `%s' must start with a '/'" msgstr "“%s”的值必须以“/”开头" -#: plugins/sudoers/defaults.c:306 +#: plugins/sudoers/defaults.c:301 #, c-format msgid "option `%s' does not take a value" msgstr "“%s”选项不带值" -#: plugins/sudoers/env.c:276 plugins/sudoers/env.c:283 -#: plugins/sudoers/env.c:386 plugins/sudoers/linux_audit.c:83 -#: plugins/sudoers/logging.c:918 plugins/sudoers/policy.c:461 -#: plugins/sudoers/policy.c:470 plugins/sudoers/prompt.c:161 -#: plugins/sudoers/sudoers.c:708 plugins/sudoers/testsudoers.c:242 -#: plugins/sudoers/toke_util.c:174 +#: plugins/sudoers/env.c:295 plugins/sudoers/env.c:302 +#: plugins/sudoers/env.c:407 plugins/sudoers/ldap.c:450 +#: plugins/sudoers/ldap.c:540 plugins/sudoers/ldap.c:1152 +#: plugins/sudoers/ldap.c:1354 plugins/sudoers/ldap.c:1526 +#: plugins/sudoers/ldap.c:1682 plugins/sudoers/linux_audit.c:82 +#: plugins/sudoers/logging.c:929 plugins/sudoers/policy.c:502 +#: plugins/sudoers/policy.c:511 plugins/sudoers/prompt.c:161 +#: plugins/sudoers/sudoers.c:815 plugins/sudoers/testsudoers.c:236 +#: plugins/sudoers/toke_util.c:160 #, c-format msgid "internal error, %s overflow" msgstr "内部错误,%s 溢出" -#: plugins/sudoers/env.c:359 +#: plugins/sudoers/env.c:376 msgid "sudo_putenv: corrupted envp, length mismatch" msgstr "sudo_putenv:envp 损坏,长度不符" -#: plugins/sudoers/env.c:1054 +#: plugins/sudoers/env.c:1076 +msgid "unable to rebuild the environment" +msgstr "无法重建环境" + +#: plugins/sudoers/env.c:1150 #, c-format msgid "sorry, you are not allowed to set the following environment variables: %s" msgstr "对不起,您无权设置以下环境变量:%s" -#: plugins/sudoers/group_plugin.c:94 +#: plugins/sudoers/group_plugin.c:85 #, c-format msgid "%s must be owned by uid %d" msgstr "%s 必须属于用户 ID %d" -#: plugins/sudoers/group_plugin.c:98 +#: plugins/sudoers/group_plugin.c:89 #, c-format msgid "%s must only be writable by owner" msgstr "%s 必须只对所有者可写" -#: plugins/sudoers/group_plugin.c:105 plugins/sudoers/sssd.c:251 +#: plugins/sudoers/group_plugin.c:97 plugins/sudoers/sssd.c:331 #, c-format msgid "unable to load %s: %s" msgstr "无法加载 %s:%s" -#: plugins/sudoers/group_plugin.c:110 +#: plugins/sudoers/group_plugin.c:103 #, c-format msgid "unable to find symbol \"group_plugin\" in %s" msgstr "无法在 %s 中找到符号“group_plugin”" -#: plugins/sudoers/group_plugin.c:115 +#: plugins/sudoers/group_plugin.c:108 #, c-format msgid "%s: incompatible group plugin major version %d, expected %d" msgstr "%s:不兼容的组插件主版本号 %d,应为 %d" -#: plugins/sudoers/interfaces.c:116 +#: plugins/sudoers/interfaces.c:117 msgid "Local IP address and netmask pairs:\n" msgstr "本地 IP 地址和网络掩码对:\n" -#: plugins/sudoers/iolog.c:101 plugins/sudoers/iolog.c:119 -#: plugins/sudoers/timestamp.c:233 +#: plugins/sudoers/iolog.c:92 plugins/sudoers/iolog.c:110 +#: plugins/sudoers/timestamp.c:169 #, c-format msgid "%s exists but is not a directory (0%o)" msgstr "%s 存在,但不是目录(0%o)" -#: plugins/sudoers/iolog.c:112 plugins/sudoers/iolog.c:133 -#: plugins/sudoers/iolog.c:140 plugins/sudoers/timestamp.c:227 -#: plugins/sudoers/timestamp.c:248 +#: plugins/sudoers/iolog.c:103 plugins/sudoers/iolog.c:124 +#: plugins/sudoers/iolog.c:131 plugins/sudoers/timestamp.c:163 +#: plugins/sudoers/timestamp.c:184 #, c-format msgid "unable to mkdir %s" msgstr "无法创建目录 %s" -#: plugins/sudoers/iolog.c:209 plugins/sudoers/sudoers.c:764 -#: plugins/sudoers/sudoreplay.c:348 plugins/sudoers/sudoreplay.c:819 -#: plugins/sudoers/sudoreplay.c:1016 plugins/sudoers/timestamp.c:357 -#: plugins/sudoers/visudo.c:832 plugins/sudoers/visudo_json.c:1025 -#: plugins/sudoers/visudo_json.c:1038 +#: plugins/sudoers/iolog.c:200 plugins/sudoers/sudoers.c:871 +#: plugins/sudoers/sudoreplay.c:300 plugins/sudoers/sudoreplay.c:769 +#: plugins/sudoers/sudoreplay.c:973 plugins/sudoers/timestamp.c:399 +#: plugins/sudoers/visudo.c:903 plugins/sudoers/visudo_json.c:1012 +#: plugins/sudoers/visudo_json.c:1025 #, c-format msgid "unable to open %s" msgstr "无法打开 %s" -#: plugins/sudoers/iolog.c:250 plugins/sudoers/sudoers.c:768 -#: plugins/sudoers/sudoreplay.c:1123 +#: plugins/sudoers/iolog.c:241 plugins/sudoers/sudoers.c:875 +#: plugins/sudoers/sudoreplay.c:1084 #, c-format msgid "unable to read %s" msgstr "无法读取 %s" -#: plugins/sudoers/iolog.c:282 plugins/sudoers/sudoreplay.c:588 -#: plugins/sudoers/timestamp.c:186 plugins/sudoers/timestamp.c:189 +#: plugins/sudoers/iolog.c:277 plugins/sudoers/sudoreplay.c:550 +#: plugins/sudoers/timestamp.c:298 plugins/sudoers/timestamp.c:301 #, c-format msgid "unable to write to %s" msgstr "无法写入 %s" -#: plugins/sudoers/iolog.c:347 plugins/sudoers/iolog.c:545 +#: plugins/sudoers/iolog.c:342 plugins/sudoers/iolog.c:540 #, c-format msgid "unable to create %s" msgstr "无法创建 %s" -#: plugins/sudoers/ldap.c:406 +#: plugins/sudoers/ldap.c:428 msgid "sudo_ldap_conf_add_ports: port too large" msgstr "sudo_ldap_conf_add_ports:端口太大" -#: plugins/sudoers/ldap.c:431 -msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" -msgstr "sudo_ldap_conf_add_ports:扩展主机缓存时空间不足" - -#: plugins/sudoers/ldap.c:464 +#: plugins/sudoers/ldap.c:488 #, c-format msgid "unsupported LDAP uri type: %s" msgstr "不支持的 LDAP URI 类型:%s" -#: plugins/sudoers/ldap.c:495 +#: plugins/sudoers/ldap.c:515 msgid "unable to mix ldap and ldaps URIs" msgstr "无法混合 ldap 和 ldaps URI" -#: plugins/sudoers/ldap.c:499 plugins/sudoers/ldap.c:532 +#: plugins/sudoers/ldap.c:519 plugins/sudoers/ldap.c:555 msgid "starttls not supported when using ldaps" msgstr "使用 ldaps 时不支持 starttls" -#: plugins/sudoers/ldap.c:517 -msgid "sudo_ldap_parse_uri: out of space building hostbuf" -msgstr "sudo_ldap_parse_uri:构建主机缓存时空间不足" - -#: plugins/sudoers/ldap.c:599 +#: plugins/sudoers/ldap.c:626 #, c-format msgid "unable to initialize SSL cert and key db: %s" msgstr "无法初始化 SSL 证书和密钥数据库:%s" -#: plugins/sudoers/ldap.c:602 +#: plugins/sudoers/ldap.c:629 #, c-format msgid "you must set TLS_CERT in %s to use SSL" msgstr "要使用 SSL,您必须在 %s 中设置 TLS_CERT" -#: plugins/sudoers/ldap.c:1093 +#: plugins/sudoers/ldap.c:1138 msgid "unable to get GMT time" msgstr "无法获取 GMT 时间" -#: plugins/sudoers/ldap.c:1099 +#: plugins/sudoers/ldap.c:1144 msgid "unable to format timestamp" msgstr "无法格式化时间戳" -#: plugins/sudoers/ldap.c:1107 -msgid "unable to build time filter" -msgstr "无法构建时间过滤器" - -#: plugins/sudoers/ldap.c:1326 -msgid "sudo_ldap_build_pass1 allocation mismatch" -msgstr "sudo_ldap_build_pass1 分配不匹配" - -#: plugins/sudoers/ldap.c:1469 +#: plugins/sudoers/ldap.c:1830 #, c-format msgid "%s: %s: %s: %s" msgstr "%s:%s:%s:%s" -#: plugins/sudoers/ldap.c:1963 +#: plugins/sudoers/ldap.c:2372 #, c-format msgid "" "\n" @@ -850,7 +983,7 @@ "\n" "LDAP 角色:%s\n" -#: plugins/sudoers/ldap.c:1965 +#: plugins/sudoers/ldap.c:2374 #, c-format msgid "" "\n" @@ -859,108 +992,108 @@ "\n" "LDAP 角色:未知\n" -#: plugins/sudoers/ldap.c:2012 +#: plugins/sudoers/ldap.c:2421 #, c-format msgid " Order: %s\n" msgstr " 顺序:%s\n" -#: plugins/sudoers/ldap.c:2020 plugins/sudoers/parse.c:512 -#: plugins/sudoers/sssd.c:1297 +#: plugins/sudoers/ldap.c:2429 plugins/sudoers/parse.c:555 +#: plugins/sudoers/sssd.c:1417 #, c-format msgid " Commands:\n" msgstr " 命令:\n" -#: plugins/sudoers/ldap.c:2570 +#: plugins/sudoers/ldap.c:2993 #, c-format msgid "unable to initialize LDAP: %s" msgstr "无法初始化 LDAP:%s" -#: plugins/sudoers/ldap.c:2612 +#: plugins/sudoers/ldap.c:3029 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:2845 +#: plugins/sudoers/ldap.c:3286 #, c-format msgid "invalid sudoOrder attribute: %s" msgstr "无效的 sudoOrder 属性:%s" -#: plugins/sudoers/linux_audit.c:57 +#: plugins/sudoers/linux_audit.c:52 msgid "unable to open audit system" msgstr "无法打开审核系统" -#: plugins/sudoers/linux_audit.c:94 +#: plugins/sudoers/linux_audit.c:93 msgid "unable to send audit message" msgstr "无法发送审核消息" -#: plugins/sudoers/logging.c:134 +#: plugins/sudoers/logging.c:106 #, c-format msgid "%8s : %s" msgstr "%8s:%s" -#: plugins/sudoers/logging.c:162 +#: plugins/sudoers/logging.c:134 #, c-format msgid "%8s : (command continued) %s" msgstr "%8s:(命令继续执行) %s" -#: plugins/sudoers/logging.c:187 +#: plugins/sudoers/logging.c:159 #, c-format msgid "unable to open log file: %s: %s" msgstr "无法打开日志文件:%s:%s" -#: plugins/sudoers/logging.c:190 +#: plugins/sudoers/logging.c:162 #, c-format msgid "unable to lock log file: %s: %s" msgstr "无法锁定日志文件:%s:%s" -#: plugins/sudoers/logging.c:242 +#: plugins/sudoers/logging.c:211 msgid "No user or host" msgstr "无用户或主机" -#: plugins/sudoers/logging.c:244 +#: plugins/sudoers/logging.c:213 msgid "validation failure" msgstr "校验失败" -#: plugins/sudoers/logging.c:251 +#: plugins/sudoers/logging.c:220 msgid "user NOT in sudoers" msgstr "用户不在 sudoers 中" -#: plugins/sudoers/logging.c:253 +#: plugins/sudoers/logging.c:222 msgid "user NOT authorized on host" msgstr "用户未获得此主机上的授权" -#: plugins/sudoers/logging.c:255 +#: plugins/sudoers/logging.c:224 msgid "command not allowed" msgstr "命令禁止使用" -#: plugins/sudoers/logging.c:288 +#: plugins/sudoers/logging.c:259 #, 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:262 #, 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:266 #, 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:269 #, 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:407 -#: plugins/sudoers/sudoers.c:409 plugins/sudoers/sudoers.c:411 -#: plugins/sudoers/sudoers.c:413 plugins/sudoers/sudoers.c:1128 -#: plugins/sudoers/sudoers.c:1129 +#: plugins/sudoers/logging.c:306 plugins/sudoers/sudoers.c:471 +#: plugins/sudoers/sudoers.c:473 plugins/sudoers/sudoers.c:475 +#: plugins/sudoers/sudoers.c:477 plugins/sudoers/sudoers.c:1222 +#: plugins/sudoers/sudoers.c:1224 #, c-format msgid "%s: command not found" msgstr "%s:找不到命令" -#: plugins/sudoers/logging.c:337 plugins/sudoers/sudoers.c:403 +#: plugins/sudoers/logging.c:308 plugins/sudoers/sudoers.c:467 #, c-format msgid "" "ignoring `%s' found in '.'\n" @@ -969,70 +1102,70 @@ "忽略在“.”中找到的“%s”\n" "请使用“sudo ./%s”,如果这是您想运行的“%s”。" -#: plugins/sudoers/logging.c:353 +#: plugins/sudoers/logging.c:325 msgid "authentication failure" msgstr "认证失败" -#: plugins/sudoers/logging.c:379 +#: plugins/sudoers/logging.c:351 msgid "a password is required" msgstr "需要密码" -#: plugins/sudoers/logging.c:446 plugins/sudoers/logging.c:501 +#: plugins/sudoers/logging.c:422 plugins/sudoers/logging.c:484 #, c-format msgid "%u incorrect password attempt" msgid_plural "%u incorrect password attempts" msgstr[0] "%u 次错误密码尝试" -#: plugins/sudoers/logging.c:584 +#: plugins/sudoers/logging.c:572 msgid "unable to fork" msgstr "无法执行 fork" -#: plugins/sudoers/logging.c:592 plugins/sudoers/logging.c:648 +#: plugins/sudoers/logging.c:580 plugins/sudoers/logging.c:640 #, c-format msgid "unable to fork: %m" msgstr "无法执行 fork:%m" -#: plugins/sudoers/logging.c:638 +#: plugins/sudoers/logging.c:630 #, c-format msgid "unable to open pipe: %m" msgstr "无法打开管道:%m" -#: plugins/sudoers/logging.c:663 +#: plugins/sudoers/logging.c:655 #, c-format msgid "unable to dup stdin: %m" msgstr "无法 dup stdin:%m" -#: plugins/sudoers/logging.c:698 +#: plugins/sudoers/logging.c:693 #, c-format msgid "unable to execute %s: %m" msgstr "无法执行 %s:%m" -#: plugins/sudoers/match.c:627 +#: plugins/sudoers/match.c:606 #, c-format msgid "unsupported digest type %d for %s" msgstr "%2$s 的摘要类型 %1$d 不支持" -#: plugins/sudoers/match.c:656 +#: plugins/sudoers/match.c:639 #, c-format msgid "%s: read error" msgstr "%s:写错误" -#: plugins/sudoers/match.c:670 +#: plugins/sudoers/match.c:653 #, c-format msgid "digest for %s (%s) is not in %s form" msgstr "%s(%s) 的摘要不是 %s 形式" -#: plugins/sudoers/parse.c:123 +#: plugins/sudoers/parse.c:114 #, c-format msgid "parse error in %s near line %d" msgstr "%s 中第 %d 行附近有解析错误" -#: plugins/sudoers/parse.c:126 +#: plugins/sudoers/parse.c:117 #, c-format msgid "parse error in %s" msgstr "%s 中出现解析错误" -#: plugins/sudoers/parse.c:459 +#: plugins/sudoers/parse.c:502 #, c-format msgid "" "\n" @@ -1041,49 +1174,41 @@ "\n" "Sudoers 条目:\n" -#: plugins/sudoers/parse.c:460 +#: plugins/sudoers/parse.c:503 #, c-format msgid " RunAsUsers: " msgstr " RunAs 用户:" -#: plugins/sudoers/parse.c:474 +#: plugins/sudoers/parse.c:517 #, c-format msgid " RunAsGroups: " msgstr " RunAs 组:" -#: plugins/sudoers/parse.c:483 +#: plugins/sudoers/parse.c:526 #, c-format msgid " Options: " msgstr " 选项:" -#: plugins/sudoers/policy.c:109 plugins/sudoers/policy.c:118 -#: plugins/sudoers/policy.c:127 plugins/sudoers/policy.c:151 -#: plugins/sudoers/policy.c:263 plugins/sudoers/policy.c:283 -#: plugins/sudoers/policy.c:292 plugins/sudoers/policy.c:322 -#: plugins/sudoers/policy.c:332 plugins/sudoers/policy.c:341 -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 -#, c-format -msgid "%s: %s" -msgstr "%s:%s" +#: plugins/sudoers/policy.c:240 plugins/sudoers/testsudoers.c:253 +msgid "unable to parse network address list" +msgstr "无法解析网络地址列表" -#: plugins/sudoers/policy.c:569 plugins/sudoers/visudo.c:773 +#: plugins/sudoers/policy.c:640 plugins/sudoers/visudo.c:840 #, c-format msgid "unable to execute %s" msgstr "无法执行 %s" -#: plugins/sudoers/policy.c:701 +#: plugins/sudoers/policy.c:773 #, c-format msgid "Sudoers policy plugin version %s\n" msgstr "Sudoers 策略插件版本 %s\n" -#: plugins/sudoers/policy.c:703 +#: plugins/sudoers/policy.c:775 #, c-format msgid "Sudoers file grammar version %d\n" msgstr "Sudoers 文件语法版本 %d\n" -#: plugins/sudoers/policy.c:707 +#: plugins/sudoers/policy.c:779 #, c-format msgid "" "\n" @@ -1092,374 +1217,411 @@ "\n" "Sudoers 路径:%s\n" -#: plugins/sudoers/policy.c:710 +#: plugins/sudoers/policy.c:782 #, c-format msgid "nsswitch path: %s\n" msgstr "nsswitch 路径:%s\n" -#: plugins/sudoers/policy.c:712 +#: plugins/sudoers/policy.c:784 #, c-format msgid "ldap.conf path: %s\n" msgstr "ldap.conf 路径:%s\n" -#: plugins/sudoers/policy.c:713 +#: plugins/sudoers/policy.c:785 #, c-format msgid "ldap.secret path: %s\n" msgstr "ldap.secret 路径:%s\n" -#: plugins/sudoers/pwutil.c:149 +#: plugins/sudoers/policy.c:818 +#, c-format +msgid "unable to register hook of type %d (version %d.%d)" +msgstr "无法注册类型为 %d 的钩子(hook)(版本 %d.%d)" + +#: plugins/sudoers/pwutil.c:136 plugins/sudoers/pwutil.c:153 +#, c-format +msgid "unable to cache uid %u, out of memory" +msgstr "无法缓存用户 ID %u,内存不足" + +#: plugins/sudoers/pwutil.c:147 #, c-format msgid "unable to cache uid %u, already exists" msgstr "无法缓存用户 ID %u,已存在" -#: plugins/sudoers/pwutil.c:194 +#: plugins/sudoers/pwutil.c:191 plugins/sudoers/pwutil.c:207 +#: plugins/sudoers/pwutil.c:250 plugins/sudoers/pwutil.c:294 +#, c-format +msgid "unable to cache user %s, out of memory" +msgstr "无法缓存用户 %s,内存不足" + +#: plugins/sudoers/pwutil.c:202 #, c-format msgid "unable to cache user %s, already exists" msgstr "无法缓存用户 %s,已存在" -#: plugins/sudoers/pwutil.c:400 +#: plugins/sudoers/pwutil.c:427 plugins/sudoers/pwutil.c:444 +#, c-format +msgid "unable to cache gid %u, out of memory" +msgstr "无法缓存组 ID %u,内存不足" + +#: plugins/sudoers/pwutil.c:438 #, c-format msgid "unable to cache gid %u, already exists" msgstr "无法缓存组 ID %u,已存在" -#: plugins/sudoers/pwutil.c:439 +#: plugins/sudoers/pwutil.c:476 plugins/sudoers/pwutil.c:492 +#: plugins/sudoers/pwutil.c:524 plugins/sudoers/pwutil.c:565 +#, c-format +msgid "unable to cache group %s, out of memory" +msgstr "无法缓存组 %s,内存不足" + +#: plugins/sudoers/pwutil.c:487 #, c-format msgid "unable to cache group %s, already exists" msgstr "无法缓存组 %s,已存在" -#: plugins/sudoers/pwutil.c:605 plugins/sudoers/pwutil.c:631 +#: plugins/sudoers/pwutil.c:676 plugins/sudoers/pwutil.c:710 #, c-format msgid "unable to cache group list for %s, already exists" msgstr "无法缓存组列表 %s,已存在" -#: plugins/sudoers/pwutil.c:627 +#: plugins/sudoers/pwutil.c:682 plugins/sudoers/pwutil.c:715 +#, c-format +msgid "unable to cache group list for %s, out of memory" +msgstr "无法缓存组列表 %s,内存不足" + +#: plugins/sudoers/pwutil.c:705 #, c-format msgid "unable to parse groups for %s" msgstr "无法对 %s 解析组" -#: plugins/sudoers/set_perms.c:122 plugins/sudoers/set_perms.c:447 -#: plugins/sudoers/set_perms.c:850 plugins/sudoers/set_perms.c:1147 -#: plugins/sudoers/set_perms.c:1439 +#: plugins/sudoers/set_perms.c:113 plugins/sudoers/set_perms.c:438 +#: plugins/sudoers/set_perms.c:841 plugins/sudoers/set_perms.c:1138 +#: plugins/sudoers/set_perms.c:1430 msgid "perm stack overflow" msgstr "权限堆栈上溢" -#: plugins/sudoers/set_perms.c:130 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:1076 -#: plugins/sudoers/set_perms.c:1155 plugins/sudoers/set_perms.c:1372 -#: plugins/sudoers/set_perms.c:1447 plugins/sudoers/set_perms.c:1536 +#: plugins/sudoers/set_perms.c:121 plugins/sudoers/set_perms.c:369 +#: plugins/sudoers/set_perms.c:446 plugins/sudoers/set_perms.c:708 +#: plugins/sudoers/set_perms.c:849 plugins/sudoers/set_perms.c:1067 +#: plugins/sudoers/set_perms.c:1146 plugins/sudoers/set_perms.c:1363 +#: plugins/sudoers/set_perms.c:1438 plugins/sudoers/set_perms.c:1527 msgid "perm stack underflow" msgstr "权限堆栈下溢" -#: plugins/sudoers/set_perms.c:189 plugins/sudoers/set_perms.c:502 -#: plugins/sudoers/set_perms.c:1206 plugins/sudoers/set_perms.c:1479 +#: plugins/sudoers/set_perms.c:180 plugins/sudoers/set_perms.c:493 +#: plugins/sudoers/set_perms.c:1197 plugins/sudoers/set_perms.c:1470 msgid "unable to change to root gid" msgstr "无法切换为 root 组 ID" -#: plugins/sudoers/set_perms.c:278 plugins/sudoers/set_perms.c:599 -#: plugins/sudoers/set_perms.c:987 plugins/sudoers/set_perms.c:1283 +#: plugins/sudoers/set_perms.c:269 plugins/sudoers/set_perms.c:590 +#: plugins/sudoers/set_perms.c:978 plugins/sudoers/set_perms.c:1274 msgid "unable to change to runas gid" msgstr "无法切换为 runas 组 ID" -#: plugins/sudoers/set_perms.c:283 plugins/sudoers/set_perms.c:604 -#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 +#: plugins/sudoers/set_perms.c:274 plugins/sudoers/set_perms.c:595 +#: plugins/sudoers/set_perms.c:983 plugins/sudoers/set_perms.c:1279 msgid "unable to set runas group vector" msgstr "无法设置 runas 组向量" -#: plugins/sudoers/set_perms.c:294 plugins/sudoers/set_perms.c:615 -#: plugins/sudoers/set_perms.c:1001 plugins/sudoers/set_perms.c:1297 +#: plugins/sudoers/set_perms.c:285 plugins/sudoers/set_perms.c:606 +#: plugins/sudoers/set_perms.c:992 plugins/sudoers/set_perms.c:1288 msgid "unable to change to runas uid" msgstr "无法切换为 runas 用户 ID" -#: plugins/sudoers/set_perms.c:312 plugins/sudoers/set_perms.c:633 -#: plugins/sudoers/set_perms.c:1017 plugins/sudoers/set_perms.c:1313 +#: plugins/sudoers/set_perms.c:303 plugins/sudoers/set_perms.c:624 +#: plugins/sudoers/set_perms.c:1008 plugins/sudoers/set_perms.c:1304 msgid "unable to change to sudoers gid" msgstr "无法切换为 sudoers 组 ID" -#: plugins/sudoers/set_perms.c:365 plugins/sudoers/set_perms.c:704 -#: plugins/sudoers/set_perms.c:1063 plugins/sudoers/set_perms.c:1359 -#: plugins/sudoers/set_perms.c:1523 +#: plugins/sudoers/set_perms.c:356 plugins/sudoers/set_perms.c:695 +#: plugins/sudoers/set_perms.c:1054 plugins/sudoers/set_perms.c:1350 +#: plugins/sudoers/set_perms.c:1514 msgid "too many processes" msgstr "进程过多" -#: plugins/sudoers/solaris_audit.c:47 +#: plugins/sudoers/solaris_audit.c:51 msgid "unable to get current working directory" msgstr "无法获取当前工作目录" -#: plugins/sudoers/solaris_audit.c:55 +#: plugins/sudoers/solaris_audit.c:59 #, c-format msgid "truncated audit path user_cmnd: %s" msgstr "截断的审核路径 user_cmnd:%s" -#: plugins/sudoers/solaris_audit.c:62 +#: plugins/sudoers/solaris_audit.c:66 #, c-format msgid "truncated audit path argv[0]: %s" msgstr "截断的审核路径 argv[0]:%s" -#: plugins/sudoers/solaris_audit.c:111 +#: plugins/sudoers/solaris_audit.c:115 msgid "audit_failure message too long" msgstr "audit_failure(审核失败)消息过长" -#: plugins/sudoers/sssd.c:252 +#: plugins/sudoers/sssd.c:333 msgid "unable to initialize SSS source. Is SSSD installed on your machine?" msgstr "无法初始化 SSS 资源。您的计算机上安装 SSSD 了吗?" -#: plugins/sudoers/sssd.c:259 plugins/sudoers/sssd.c:267 -#: plugins/sudoers/sssd.c:275 plugins/sudoers/sssd.c:283 -#: plugins/sudoers/sssd.c:291 +#: plugins/sudoers/sssd.c:341 plugins/sudoers/sssd.c:350 +#: plugins/sudoers/sssd.c:359 plugins/sudoers/sssd.c:368 +#: plugins/sudoers/sssd.c:377 #, c-format msgid "unable to find symbol \"%s\" in %s" msgstr "无法在 %s 中找到符号“%s”" -#: plugins/sudoers/sudo_nss.c:296 +#: plugins/sudoers/sudo_nss.c:290 #, c-format msgid "Matching Defaults entries for %s on %s:\n" msgstr "匹配 %2$s 上 %1$s 的默认条目:\n" -#: plugins/sudoers/sudo_nss.c:309 +#: plugins/sudoers/sudo_nss.c:308 #, c-format msgid "Runas and Command-specific defaults for %s:\n" msgstr "%s Runas 和命令特定的默认值:\n" -#: plugins/sudoers/sudo_nss.c:322 +#: plugins/sudoers/sudo_nss.c:326 #, c-format msgid "User %s may run the following commands on %s:\n" msgstr "用户 %s 可以在 %s 上运行以下命令:\n" -#: plugins/sudoers/sudo_nss.c:331 +#: plugins/sudoers/sudo_nss.c:339 #, c-format msgid "User %s is not allowed to run sudo on %s.\n" msgstr "用户 %s 无权在 %s 上运行 sudo。\n" -#: plugins/sudoers/sudoers.c:160 plugins/sudoers/sudoers.c:201 -#: plugins/sudoers/sudoers.c:726 +#: plugins/sudoers/sudoers.c:172 plugins/sudoers/testsudoers.c:245 +#: plugins/sudoers/visudo.c:223 plugins/sudoers/visudo.c:566 +msgid "unable to initialize sudoers default values" +msgstr "无法初始化 sudoers 默认值" + +#: plugins/sudoers/sudoers.c:197 plugins/sudoers/sudoers.c:239 +#: plugins/sudoers/sudoers.c:833 msgid "problem with defaults entries" msgstr "默认条目有问题" -#: plugins/sudoers/sudoers.c:167 +#: plugins/sudoers/sudoers.c:205 msgid "no valid sudoers sources found, quitting" msgstr "没有找到有效的 sudoers 资源,退出" -#: plugins/sudoers/sudoers.c:233 +#: plugins/sudoers/sudoers.c:275 msgid "sudoers specifies that root is not allowed to sudo" msgstr "sudoers 指定 root 不允许执行 sudo" -#: plugins/sudoers/sudoers.c:278 +#: plugins/sudoers/sudoers.c:332 msgid "you are not permitted to use the -C option" msgstr "您无权使用 -C 选项" -#: plugins/sudoers/sudoers.c:336 +#: plugins/sudoers/sudoers.c:396 #, c-format msgid "timestamp owner (%s): No such user" msgstr "时间戳所有者(%s):无此用户" -#: plugins/sudoers/sudoers.c:350 +#: plugins/sudoers/sudoers.c:410 msgid "no tty" msgstr "无终端" -#: plugins/sudoers/sudoers.c:351 +#: plugins/sudoers/sudoers.c:411 msgid "sorry, you must have a tty to run sudo" msgstr "抱歉,您必须拥有一个终端来执行 sudo" -#: plugins/sudoers/sudoers.c:402 +#: plugins/sudoers/sudoers.c:466 msgid "command in current directory" msgstr "当前目录中的命令" -#: plugins/sudoers/sudoers.c:422 +#: plugins/sudoers/sudoers.c:486 msgid "sorry, you are not allowed to preserve the environment" msgstr "抱歉,您无权保留环境" -#: plugins/sudoers/sudoers.c:674 +#: plugins/sudoers/sudoers.c:778 msgid "command too long" msgstr "命令过长" -#: plugins/sudoers/sudoers.c:779 plugins/sudoers/visudo.c:333 -#: plugins/sudoers/visudo.c:599 +#: plugins/sudoers/sudoers.c:886 plugins/sudoers/visudo.c:426 +#: plugins/sudoers/visudo.c:666 #, c-format msgid "unable to stat %s" msgstr "无法 stat %s" -#: plugins/sudoers/sudoers.c:783 +#: plugins/sudoers/sudoers.c:890 #, c-format msgid "%s is not a regular file" msgstr "%s 不是常规文件" -#: plugins/sudoers/sudoers.c:787 plugins/sudoers/timestamp.c:289 toke.l:945 +#: plugins/sudoers/sudoers.c:894 plugins/sudoers/timestamp.c:225 toke.l:947 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s 属于用户 ID %u,应为 %u" -#: plugins/sudoers/sudoers.c:791 toke.l:952 +#: plugins/sudoers/sudoers.c:898 toke.l:954 #, c-format msgid "%s is world writable" msgstr "%s 可被任何人写" -#: plugins/sudoers/sudoers.c:795 toke.l:957 +#: plugins/sudoers/sudoers.c:902 toke.l:959 #, c-format msgid "%s is owned by gid %u, should be %u" msgstr "%s 属于组 ID %u,应为 %u" -#: plugins/sudoers/sudoers.c:826 +#: plugins/sudoers/sudoers.c:933 #, c-format msgid "only root can use `-c %s'" msgstr "只有 root 才能使用“-c %s”" -#: plugins/sudoers/sudoers.c:845 +#: plugins/sudoers/sudoers.c:952 #, c-format msgid "unknown login class: %s" msgstr "未知的登录类别:%s" -#: plugins/sudoers/sudoers.c:889 plugins/sudoers/sudoers.c:904 +#: plugins/sudoers/sudoers.c:1031 plugins/sudoers/sudoers.c:1059 #, c-format msgid "unable to resolve host %s" msgstr "无法解析主机:%s" -#: plugins/sudoers/sudoers.c:986 plugins/sudoers/testsudoers.c:388 +#: plugins/sudoers/sudoers.c:1126 plugins/sudoers/testsudoers.c:385 #, c-format msgid "unknown group: %s" msgstr "未知组:%s" -#: plugins/sudoers/sudoreplay.c:280 +#: plugins/sudoers/sudoreplay.c:232 #, c-format msgid "invalid filter option: %s" msgstr "无效的过滤器选项:%s" -#: plugins/sudoers/sudoreplay.c:293 +#: plugins/sudoers/sudoreplay.c:245 #, c-format msgid "invalid max wait: %s" msgstr "无效的最大等待:%s" -#: plugins/sudoers/sudoreplay.c:299 +#: plugins/sudoers/sudoreplay.c:251 #, c-format msgid "invalid speed factor: %s" msgstr "无法的速度系数:%s" -#: plugins/sudoers/sudoreplay.c:302 plugins/sudoers/visudo.c:190 +#: plugins/sudoers/sudoreplay.c:254 plugins/sudoers/visudo.c:180 #, c-format msgid "%s version %s\n" msgstr "%s 版本 %s\n" -#: plugins/sudoers/sudoreplay.c:334 +#: plugins/sudoers/sudoreplay.c:286 #, c-format msgid "%s/%.2s/%.2s/%.2s/timing: %s" msgstr "%s/%.2s/%.2s/%.2s/时序:%s" -#: plugins/sudoers/sudoreplay.c:340 +#: plugins/sudoers/sudoreplay.c:292 #, c-format msgid "%s/%s/timing: %s" msgstr "%s/%s/时序:%s" -#: plugins/sudoers/sudoreplay.c:356 +#: plugins/sudoers/sudoreplay.c:308 #, c-format msgid "Replaying sudo session: %s\n" msgstr "回放 sudo 会话:%s\n" -#: plugins/sudoers/sudoreplay.c:362 +#: plugins/sudoers/sudoreplay.c:314 #, c-format msgid "Warning: your terminal is too small to properly replay the log.\n" msgstr "警告:您的终端尺寸太小,不能正常地回放日志。\n" -#: plugins/sudoers/sudoreplay.c:363 +#: plugins/sudoers/sudoreplay.c:315 #, 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:418 +#: plugins/sudoers/sudoreplay.c:368 msgid "unable to set tty to raw mode" msgstr "无法将终端设为原始模式" -#: plugins/sudoers/sudoreplay.c:449 +#: plugins/sudoers/sudoreplay.c:401 #, c-format msgid "invalid timing file line: %s" msgstr "无效的时序文件行:%s" -#: plugins/sudoers/sudoreplay.c:655 plugins/sudoers/sudoreplay.c:680 +#: plugins/sudoers/sudoreplay.c:611 plugins/sudoers/sudoreplay.c:636 #, c-format msgid "ambiguous expression \"%s\"" msgstr "有歧义的表达式“%s”" -#: plugins/sudoers/sudoreplay.c:702 +#: plugins/sudoers/sudoreplay.c:658 msgid "unmatched ')' in expression" msgstr "表达式中的“)”不匹配" -#: plugins/sudoers/sudoreplay.c:706 +#: plugins/sudoers/sudoreplay.c:662 #, c-format msgid "unknown search term \"%s\"" msgstr "未知的搜索词“%s”" -#: plugins/sudoers/sudoreplay.c:720 +#: plugins/sudoers/sudoreplay.c:677 #, c-format msgid "%s requires an argument" msgstr "%s 需要参数" -#: plugins/sudoers/sudoreplay.c:724 plugins/sudoers/sudoreplay.c:1096 +#: plugins/sudoers/sudoreplay.c:680 plugins/sudoers/sudoreplay.c:1060 #, c-format msgid "invalid regular expression: %s" msgstr "无效的正则表达式:%s" -#: plugins/sudoers/sudoreplay.c:730 +#: plugins/sudoers/sudoreplay.c:684 #, c-format msgid "could not parse date \"%s\"" msgstr "无法解析日期“%s”" -#: plugins/sudoers/sudoreplay.c:739 +#: plugins/sudoers/sudoreplay.c:693 msgid "unmatched '(' in expression" msgstr "表达式中的“(”不匹配" -#: plugins/sudoers/sudoreplay.c:741 +#: plugins/sudoers/sudoreplay.c:695 msgid "illegal trailing \"or\"" msgstr "非法的结尾字符“or”" -#: plugins/sudoers/sudoreplay.c:743 +#: plugins/sudoers/sudoreplay.c:697 msgid "illegal trailing \"!\"" msgstr "非法的结尾字符“!”" -#: plugins/sudoers/sudoreplay.c:796 +#: plugins/sudoers/sudoreplay.c:746 #, c-format msgid "unknown search type %d" msgstr "未知的搜索类型 %d" -#: plugins/sudoers/sudoreplay.c:833 +#: plugins/sudoers/sudoreplay.c:784 #, c-format msgid "%s: invalid log file" msgstr "%s:无效的日志文件" -#: plugins/sudoers/sudoreplay.c:851 +#: plugins/sudoers/sudoreplay.c:802 #, c-format msgid "%s: time stamp field is missing" msgstr "%s:缺少 时间戳 字段" -#: plugins/sudoers/sudoreplay.c:858 +#: plugins/sudoers/sudoreplay.c:809 #, c-format msgid "%s: time stamp %s: %s" msgstr "%s:时间戳 %s:%s" -#: plugins/sudoers/sudoreplay.c:865 +#: plugins/sudoers/sudoreplay.c:816 #, c-format msgid "%s: user field is missing" msgstr "%s:缺少 用户 字段" -#: plugins/sudoers/sudoreplay.c:873 +#: plugins/sudoers/sudoreplay.c:825 #, c-format msgid "%s: runas user field is missing" msgstr "%s:缺少 runas 用户 字段" -#: plugins/sudoers/sudoreplay.c:881 +#: plugins/sudoers/sudoreplay.c:834 #, c-format msgid "%s: runas group field is missing" msgstr "%s:缺少 runas 组 字段" -#: plugins/sudoers/sudoreplay.c:1236 +#: plugins/sudoers/sudoreplay.c:1197 #, c-format msgid "usage: %s [-h] [-d dir] [-m num] [-s num] ID\n" msgstr "用法:%s [-h] [-d 目录] [-m 数值] [-s 数值] ID\n" -#: plugins/sudoers/sudoreplay.c:1239 +#: plugins/sudoers/sudoreplay.c:1200 #, c-format msgid "usage: %s [-h] [-d dir] -l [search expression]\n" msgstr "用法:%s [-h] [-d 目录] -l [搜索表达式]\n" -#: plugins/sudoers/sudoreplay.c:1248 +#: plugins/sudoers/sudoreplay.c:1209 #, c-format msgid "" "%s - replay sudo session logs\n" @@ -1468,7 +1630,7 @@ "%s - 回放 sudo 会话记录\n" "\n" -#: plugins/sudoers/sudoreplay.c:1250 +#: plugins/sudoers/sudoreplay.c:1211 msgid "" "\n" "Options:\n" @@ -1490,11 +1652,11 @@ " -s, --speed=数值 加速或减慢输出\n" " -V, --version 显示版本信息并退出" -#: plugins/sudoers/testsudoers.c:327 +#: plugins/sudoers/testsudoers.c:324 msgid "\thost unmatched" msgstr "\t主机不匹配" -#: plugins/sudoers/testsudoers.c:330 +#: plugins/sudoers/testsudoers.c:327 msgid "" "\n" "Command allowed" @@ -1502,7 +1664,7 @@ "\n" "命令允许" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command denied" @@ -1510,7 +1672,7 @@ "\n" "命令被拒" -#: plugins/sudoers/testsudoers.c:331 +#: plugins/sudoers/testsudoers.c:328 msgid "" "\n" "Command unmatched" @@ -1518,114 +1680,129 @@ "\n" "命令不匹配" -#: plugins/sudoers/timestamp.c:197 -#, c-format -msgid "unable to truncate time stamp file to %lld bytes" -msgstr "无法将时间戳文件截短为 %lld 字节" - -#: plugins/sudoers/timestamp.c:297 +#: plugins/sudoers/timestamp.c:233 #, c-format msgid "%s is group writable" msgstr "%s 可被组写" -#: plugins/sudoers/timestamp.c:318 +#: plugins/sudoers/timestamp.c:309 #, c-format -msgid "timestamp path too long: %s/%s" -msgstr "时间戳路径过长:%s/%s" +msgid "unable to truncate time stamp file to %lld bytes" +msgstr "无法将时间戳文件截短为 %lld 字节" + +#: plugins/sudoers/timestamp.c:742 plugins/sudoers/timestamp.c:809 +#: plugins/sudoers/visudo.c:487 plugins/sudoers/visudo.c:493 +msgid "unable to read the clock" +msgstr "无法读取时钟" -#: plugins/sudoers/timestamp.c:498 +#: plugins/sudoers/timestamp.c:756 msgid "ignoring time stamp from the future" msgstr "将忽略超前的时间戳" -#: plugins/sudoers/timestamp.c:510 +#: plugins/sudoers/timestamp.c:768 #, c-format msgid "time stamp too far in the future: %20.20s" msgstr "时间戳太超前:%20.20s" -#: plugins/sudoers/timestamp.c:613 plugins/sudoers/timestamp.c:634 +#: plugins/sudoers/timestamp.c:863 +#, c-format +msgid "unable to lock time stamp file %s" +msgstr "无法锁定时间戳文件 %s" + +#: plugins/sudoers/timestamp.c:906 plugins/sudoers/timestamp.c:926 #, c-format msgid "lecture status path too long: %s/%s" msgstr "致辞(lecture)状态路径过长:%s/%s" -#: plugins/sudoers/visudo.c:192 +#: plugins/sudoers/visudo.c:182 #, c-format msgid "%s grammar version %d\n" msgstr "%s 语法版本 %d\n" -#: plugins/sudoers/visudo.c:263 plugins/sudoers/visudo.c:552 +#: plugins/sudoers/visudo.c:254 plugins/sudoers/visudo.c:618 #, c-format msgid "press return to edit %s: " msgstr "按回车键编辑 %s:" -#: plugins/sudoers/visudo.c:349 plugins/sudoers/visudo.c:355 +#: plugins/sudoers/visudo.c:319 +#, c-format +msgid "specified editor (%s) doesn't exist" +msgstr "指定的编辑器(%s)不存在" + +#: plugins/sudoers/visudo.c:337 +#, c-format +msgid "no editor found (editor path = %s)" +msgstr "未找到编辑器(编辑器路径 = %s)" + +#: plugins/sudoers/visudo.c:446 plugins/sudoers/visudo.c:454 msgid "write error" msgstr "写错误" -#: plugins/sudoers/visudo.c:439 +#: plugins/sudoers/visudo.c:500 #, c-format msgid "unable to stat temporary file (%s), %s unchanged" msgstr "无法 stat 临时文件(%s),%s 未更改" -#: plugins/sudoers/visudo.c:444 +#: plugins/sudoers/visudo.c:507 #, c-format msgid "zero length temporary file (%s), %s unchanged" msgstr "零长度的临时文件(%s),%s 未更改" -#: plugins/sudoers/visudo.c:450 +#: plugins/sudoers/visudo.c:513 #, c-format msgid "editor (%s) failed, %s unchanged" msgstr "编辑器(%s)失败,%s 未更改" -#: plugins/sudoers/visudo.c:472 +#: plugins/sudoers/visudo.c:535 #, c-format msgid "%s unchanged" msgstr "%s 未更改" -#: plugins/sudoers/visudo.c:497 +#: plugins/sudoers/visudo.c:561 #, c-format msgid "unable to re-open temporary file (%s), %s unchanged." msgstr "无法重新打开临时文件(%s),%s 未更改" -#: plugins/sudoers/visudo.c:507 +#: plugins/sudoers/visudo.c:572 #, c-format msgid "unabled to parse temporary file (%s), unknown error" msgstr "无法解析临时文件(%s),未知错误" -#: plugins/sudoers/visudo.c:543 +#: plugins/sudoers/visudo.c:609 #, c-format msgid "internal error, unable to find %s in list!" msgstr "内部错误,在列表中找不到 %s!" -#: plugins/sudoers/visudo.c:601 plugins/sudoers/visudo.c:610 +#: plugins/sudoers/visudo.c:668 plugins/sudoers/visudo.c:677 #, c-format msgid "unable to set (uid, gid) of %s to (%u, %u)" msgstr "无法将 %s 的 (uid, gid) 设为 (%u, %u)" -#: plugins/sudoers/visudo.c:605 plugins/sudoers/visudo.c:615 +#: plugins/sudoers/visudo.c:672 plugins/sudoers/visudo.c:682 #, c-format msgid "unable to change mode of %s to 0%o" msgstr "无法将 %s 的模式更改为 0%o" -#: plugins/sudoers/visudo.c:632 +#: plugins/sudoers/visudo.c:699 #, c-format msgid "%s and %s not on the same file system, using mv to rename" msgstr "%s 和 %s 不在同一个文件系统,使用 mv 进行重命名" -#: plugins/sudoers/visudo.c:646 +#: plugins/sudoers/visudo.c:713 #, c-format msgid "command failed: '%s %s %s', %s unchanged" msgstr "命令失败:“%s %s %s”,%s 未更改" -#: plugins/sudoers/visudo.c:656 +#: plugins/sudoers/visudo.c:723 #, c-format msgid "error renaming %s, %s unchanged" msgstr "重命名 %s 出错,%s 未更改" -#: plugins/sudoers/visudo.c:718 +#: plugins/sudoers/visudo.c:785 msgid "What now? " msgstr "现在做什么?" -#: plugins/sudoers/visudo.c:732 +#: plugins/sudoers/visudo.c:799 msgid "" "Options are:\n" " (e)dit sudoers file again\n" @@ -1637,87 +1814,72 @@ " 退出,不保存对 sudoers 文件的更改(x)\n" " 退出并将更改保存到 sudoers 文件(危险!)(Q)\n" -#: plugins/sudoers/visudo.c:780 +#: plugins/sudoers/visudo.c:847 #, c-format msgid "unable to run %s" msgstr "无法运行 %s" -#: plugins/sudoers/visudo.c:806 +#: plugins/sudoers/visudo.c:877 #, c-format msgid "%s: wrong owner (uid, gid) should be (%u, %u)\n" msgstr "%s:错误的所有者(uid, gid),应为 (%u, %u)\n" -#: plugins/sudoers/visudo.c:813 +#: plugins/sudoers/visudo.c:884 #, c-format msgid "%s: bad permissions, should be mode 0%o\n" msgstr "%s:权限不正确,模式应该是 0%o\n" -#: plugins/sudoers/visudo.c:838 plugins/sudoers/visudo_json.c:1045 +#: plugins/sudoers/visudo.c:909 plugins/sudoers/visudo_json.c:1032 #, c-format msgid "failed to parse %s file, unknown error" msgstr "解析 %s 文件失败,未知错误" -#: plugins/sudoers/visudo.c:854 plugins/sudoers/visudo_json.c:1054 +#: plugins/sudoers/visudo.c:925 plugins/sudoers/visudo_json.c:1041 #, c-format msgid "parse error in %s near line %d\n" msgstr "%s 中第 %d 行附近出现解析错误\n" -#: plugins/sudoers/visudo.c:857 plugins/sudoers/visudo_json.c:1057 +#: plugins/sudoers/visudo.c:928 plugins/sudoers/visudo_json.c:1044 #, c-format msgid "parse error in %s\n" msgstr "%s 中出现解析错误\n" -#: plugins/sudoers/visudo.c:865 plugins/sudoers/visudo.c:872 +#: plugins/sudoers/visudo.c:936 plugins/sudoers/visudo.c:943 #, c-format msgid "%s: parsed OK\n" msgstr "%s:解析正确\n" -#: plugins/sudoers/visudo.c:918 +#: plugins/sudoers/visudo.c:990 #, c-format msgid "%s busy, try again later" msgstr "%s 忙,请稍后重试" -#: plugins/sudoers/visudo.c:962 -#, c-format -msgid "specified editor (%s) doesn't exist" -msgstr "指定的编辑器(%s)不存在" - -#: plugins/sudoers/visudo.c:985 -#, c-format -msgid "unable to stat editor (%s)" -msgstr "无法 stat 编辑器(%s)" - -#: plugins/sudoers/visudo.c:1033 -#, c-format -msgid "no editor found (editor path = %s)" -msgstr "未找到编辑器(编辑器路径 = %s)" - -#: plugins/sudoers/visudo.c:1136 +#: plugins/sudoers/visudo.c:1086 #, c-format msgid "Error: cycle in %s `%s'" msgstr "错误:在 %s “%s”中循环" -#: plugins/sudoers/visudo.c:1137 +#: plugins/sudoers/visudo.c:1087 #, c-format msgid "Warning: cycle in %s `%s'" msgstr "警告:在 %s “%s”中循环" -#: plugins/sudoers/visudo.c:1141 +#: plugins/sudoers/visudo.c:1091 #, c-format msgid "Error: %s `%s' referenced but not defined" msgstr "错误:引用了 %s “%s”但尚未定义" -#: plugins/sudoers/visudo.c:1142 +#: plugins/sudoers/visudo.c:1092 #, c-format msgid "Warning: %s `%s' referenced but not defined" msgstr "警告:引用了 %s “%s”但尚未定义" -#: plugins/sudoers/visudo.c:1281 +#: plugins/sudoers/visudo.c:1235 #, c-format msgid "Warning: unused %s `%s'" msgstr "警告:%s “%s”未使用" -#: plugins/sudoers/visudo.c:1394 +#: plugins/sudoers/visudo.c:1348 #, c-format msgid "" "%s - safely edit the sudoers file\n" @@ -1726,7 +1888,7 @@ "%s - 安全地编辑 sudoers 文件\n" "\n" -#: plugins/sudoers/visudo.c:1396 +#: plugins/sudoers/visudo.c:1350 msgid "" "\n" "Options:\n" @@ -1748,15 +1910,33 @@ " -V, --version 显示版本信息并退出\n" " -x, --export=输出文件 以 JSON 格式将 sudoers 写入输出文件" -#: plugins/sudoers/visudo_json.c:1031 +#: plugins/sudoers/visudo_json.c:1018 #, c-format msgid "%s: input and output files must be different" msgstr "%s:输入和输出文件不能相同" -#: toke.l:915 +#: toke.l:918 msgid "too many levels of includes" msgstr "include 嵌套层数过多" +#~ msgid "unable allocate memory" +#~ msgstr "无法分配内存" + +#~ msgid "timestamp path too long: %s/%s" +#~ msgstr "时间戳路径过长:%s/%s" + +#~ msgid "unable to stat editor (%s)" +#~ msgstr "无法 stat 编辑器(%s)" + +#~ msgid "sudo_ldap_conf_add_ports: out of space expanding hostbuf" +#~ msgstr "sudo_ldap_conf_add_ports:扩展主机缓存时空间不足" + +#~ msgid "sudo_ldap_parse_uri: out of space building hostbuf" +#~ msgstr "sudo_ldap_parse_uri:构建主机缓存时空间不足" + +#~ msgid "sudo_ldap_build_pass1 allocation mismatch" +#~ msgstr "sudo_ldap_build_pass1 分配不匹配" + #~ msgid "Password:" #~ msgstr "密码:" @@ -1850,9 +2030,6 @@ #~ msgid ">>> %s: %s near line %d <<<" #~ msgstr ">>> %s:%s 在行 %d 附近<<<" -#~ msgid "unable to allocate memory" -#~ msgstr "无法分配内存" - #~ msgid "unable to set locale to \"%s\", using \"C\"" #~ msgstr "无法将区域设置为“%s”,将使用“C”" diff -Nru sudo-1.8.12/plugins/sudoers/policy.c sudo-1.8.16/plugins/sudoers/policy.c --- sudo-1.8.12/plugins/sudoers/policy.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/policy.c 2016-03-17 16:13:10.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2015 Todd C. Miller + * Copyright (c) 2010-2016 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 @@ -20,26 +20,14 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include #include @@ -248,7 +236,10 @@ #endif /* HAVE_BSD_AUTH_H */ if (MATCHES(*cur, "network_addrs=")) { interfaces_string = *cur + sizeof("network_addrs=") - 1; - set_interfaces(interfaces_string); + if (!set_interfaces(interfaces_string)) { + sudo_warn(U_("unable to parse network address list")); + goto bad; + } continue; } if (MATCHES(*cur, "max_groups=")) { @@ -265,11 +256,18 @@ remhost = *cur + sizeof("remote_host=") - 1; continue; } +#ifdef _PATH_SUDO_PLUGIN_DIR + if (MATCHES(*cur, "plugin_dir=")) { + path_plugin_dir = *cur + sizeof("plugin_dir=") - 1; + continue; + } +#endif } for (cur = info->user_info; *cur != NULL; cur++) { if (MATCHES(*cur, "user=")) { - user_name = sudo_estrdup(*cur + sizeof("user=") - 1); + if ((user_name = strdup(*cur + sizeof("user=") - 1)) == NULL) + goto oom; continue; } if (MATCHES(*cur, "uid=")) { @@ -295,19 +293,28 @@ continue; } if (MATCHES(*cur, "cwd=")) { - user_cwd = sudo_estrdup(*cur + sizeof("cwd=") - 1); + if ((user_cwd = strdup(*cur + sizeof("cwd=") - 1)) == NULL) + goto oom; continue; } if (MATCHES(*cur, "tty=")) { - user_tty = user_ttypath = sudo_estrdup(*cur + sizeof("tty=") - 1); + if ((user_ttypath = strdup(*cur + sizeof("tty=") - 1)) == NULL) + goto oom; + user_tty = user_ttypath; if (strncmp(user_tty, _PATH_DEV, sizeof(_PATH_DEV) - 1) == 0) user_tty += sizeof(_PATH_DEV) - 1; continue; } if (MATCHES(*cur, "host=")) { - user_host = user_shost = sudo_estrdup(*cur + sizeof("host=") - 1); - if ((p = strchr(user_host, '.'))) - user_shost = sudo_estrndup(user_host, (size_t)(p - user_host)); + if ((user_host = strdup(*cur + sizeof("host=") - 1)) == NULL) + goto oom; + if ((p = strchr(user_host, '.')) != NULL) { + user_shost = strndup(user_host, (size_t)(p - user_host)); + if (user_shost == NULL) + goto oom; + } else { + user_shost = user_host; + } continue; } if (MATCHES(*cur, "lines=")) { @@ -340,13 +347,24 @@ continue; } } - user_runhost = user_srunhost = sudo_estrdup(remhost ? remhost : user_host); - if ((p = strchr(user_runhost, '.'))) - user_srunhost = sudo_estrndup(user_runhost, (size_t)(p - user_runhost)); - if (user_cwd == NULL) - user_cwd = sudo_estrdup("unknown"); - if (user_tty == NULL) - user_tty = sudo_estrdup("unknown"); /* user_ttypath remains NULL */ + if ((user_runhost = strdup(remhost ? remhost : user_host)) == NULL) + goto oom; + if ((p = strchr(user_runhost, '.')) != NULL) { + user_srunhost = strndup(user_runhost, (size_t)(p - user_runhost)); + if (user_srunhost == NULL) + goto oom; + } else { + user_srunhost = user_runhost; + } + if (user_cwd == NULL) { + if ((user_cwd = strdup("unknown")) == NULL) + goto oom; + } + if (user_tty == NULL) { + if ((user_tty = strdup("unknown")) == NULL) + goto oom; + /* user_ttypath remains NULL */ + } if (groups != NULL && groups[0] != '\0') { /* sudo_parse_gids() will print a warning on error. */ @@ -359,6 +377,9 @@ user_umask = umask(SUDO_UMASK); umask(user_umask); + /* Some systems support fexecve() which we use for digest matches. */ + cmnd_fd = -1; + /* Dump settings and user info (XXX - plugin args) */ for (cur = info->settings; *cur != NULL; cur++) sudo_debug_printf(SUDO_DEBUG_INFO, "settings: %s", *cur); @@ -368,6 +389,8 @@ #undef MATCHES debug_return_int(flags); +oom: + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); bad: debug_return_int(MODE_ERROR); } @@ -375,6 +398,7 @@ /* * Setup the execution environment. * Builds up the command_info list and sets argv and envp. + * Consumes iolog_path if not NULL. * Returns 1 on success and -1 on error. */ int @@ -384,57 +408,85 @@ struct sudoers_exec_args *exec_args = v; char **command_info; int info_len = 0; - int rval = -1; debug_decl(sudoers_policy_exec_setup, SUDOERS_DEBUG_PLUGIN) /* Increase the length of command_info as needed, it is *not* checked. */ - command_info = sudo_ecalloc(32, sizeof(char **)); - - command_info[info_len++] = sudo_new_key_val("command", safe_cmnd); + command_info = calloc(32, sizeof(char *)); + if (command_info == NULL) + goto oom; + + command_info[info_len] = sudo_new_key_val("command", safe_cmnd); + if (command_info[info_len++] == NULL) + goto oom; if (def_log_input || def_log_output) { if (iolog_path) - command_info[info_len++] = iolog_path; + command_info[info_len++] = iolog_path; /* now owned */ if (def_log_input) { - command_info[info_len++] = sudo_estrdup("iolog_stdin=true"); - command_info[info_len++] = sudo_estrdup("iolog_ttyin=true"); + if ((command_info[info_len++] = strdup("iolog_stdin=true")) == NULL) + goto oom; + if ((command_info[info_len++] = strdup("iolog_ttyin=true")) == NULL) + goto oom; } if (def_log_output) { - command_info[info_len++] = sudo_estrdup("iolog_stdout=true"); - command_info[info_len++] = sudo_estrdup("iolog_stderr=true"); - command_info[info_len++] = sudo_estrdup("iolog_ttyout=true"); + if ((command_info[info_len++] = strdup("iolog_stdout=true")) == NULL) + goto oom; + if ((command_info[info_len++] = strdup("iolog_stderr=true")) == NULL) + goto oom; + if ((command_info[info_len++] = strdup("iolog_ttyout=true")) == NULL) + goto oom; } if (def_compress_io) { - command_info[info_len++] = sudo_estrdup("iolog_compress=true"); + if ((command_info[info_len++] = strdup("iolog_compress=true")) == NULL) + goto oom; } if (def_maxseq) { - sudo_easprintf(&command_info[info_len++], "maxseq=%u", def_maxseq); + if (asprintf(&command_info[info_len++], "maxseq=%u", def_maxseq) == -1) + goto oom; + } + } + if (ISSET(sudo_mode, MODE_EDIT)) { + if ((command_info[info_len++] = strdup("sudoedit=true")) == NULL) + goto oom; + if (!def_sudoedit_checkdir) { + if ((command_info[info_len++] = strdup("sudoedit_checkdir=false")) == NULL) + goto oom; + } + if (def_sudoedit_follow) { + if ((command_info[info_len++] = strdup("sudoedit_follow=true")) == NULL) + goto oom; } } - if (ISSET(sudo_mode, MODE_EDIT)) - command_info[info_len++] = sudo_estrdup("sudoedit=true"); if (ISSET(sudo_mode, MODE_LOGIN_SHELL)) { /* Set cwd to run user's homedir. */ - command_info[info_len++] = sudo_new_key_val("cwd", runas_pw->pw_dir); + if ((command_info[info_len++] = sudo_new_key_val("cwd", runas_pw->pw_dir)) == NULL) + goto oom; } if (def_stay_setuid) { - sudo_easprintf(&command_info[info_len++], "runas_uid=%u", - (unsigned int)user_uid); - sudo_easprintf(&command_info[info_len++], "runas_gid=%u", - (unsigned int)user_gid); - sudo_easprintf(&command_info[info_len++], "runas_euid=%u", - (unsigned int)runas_pw->pw_uid); - sudo_easprintf(&command_info[info_len++], "runas_egid=%u", + if (asprintf(&command_info[info_len++], "runas_uid=%u", + (unsigned int)user_uid) == -1) + goto oom; + if (asprintf(&command_info[info_len++], "runas_gid=%u", + (unsigned int)user_gid) == -1) + goto oom; + if (asprintf(&command_info[info_len++], "runas_euid=%u", + (unsigned int)runas_pw->pw_uid) == -1) + goto oom; + if (asprintf(&command_info[info_len++], "runas_egid=%u", runas_gr ? (unsigned int)runas_gr->gr_gid : - (unsigned int)runas_pw->pw_gid); + (unsigned int)runas_pw->pw_gid) == -1) + goto oom; } else { - sudo_easprintf(&command_info[info_len++], "runas_uid=%u", - (unsigned int)runas_pw->pw_uid); - sudo_easprintf(&command_info[info_len++], "runas_gid=%u", + if (asprintf(&command_info[info_len++], "runas_uid=%u", + (unsigned int)runas_pw->pw_uid) == -1) + goto oom; + if (asprintf(&command_info[info_len++], "runas_gid=%u", runas_gr ? (unsigned int)runas_gr->gr_gid : - (unsigned int)runas_pw->pw_gid); + (unsigned int)runas_pw->pw_gid) == -1) + goto oom; } if (def_preserve_groups) { - command_info[info_len++] = "preserve_groups=true"; + if ((command_info[info_len++] = strdup("preserve_groups=true")) == NULL) + goto oom; } else { int i, len; gid_t egid; @@ -445,7 +497,9 @@ /* We reserve an extra spot in the list for the effective gid. */ glsize = sizeof("runas_groups=") - 1 + ((grlist->ngids + 1) * (MAX_UID_T_LEN + 1)); - gid_list = sudo_emalloc(glsize); + gid_list = malloc(glsize); + if (gid_list == NULL) + goto oom; memcpy(gid_list, "runas_groups=", sizeof("runas_groups=") - 1); cp = gid_list + sizeof("runas_groups=") - 1; @@ -455,7 +509,7 @@ len = snprintf(cp, glsize - (cp - gid_list), "%u", egid); if (len < 0 || (size_t)len >= glsize - (cp - gid_list)) { sudo_warnx(U_("internal error, %s overflow"), __func__); - goto done; + goto bad; } cp += len; for (i = 0; i < grlist->ngids; i++) { @@ -464,7 +518,7 @@ (unsigned int) grlist->gids[i]); if (len < 0 || (size_t)len >= glsize - (cp - gid_list)) { sudo_warnx(U_("internal error, %s overflow"), __func__); - goto done; + goto bad; } cp += len; } @@ -472,35 +526,69 @@ command_info[info_len++] = gid_list; sudo_grlist_delref(grlist); } - if (def_closefrom >= 0) - sudo_easprintf(&command_info[info_len++], "closefrom=%d", def_closefrom); - if (def_noexec) - command_info[info_len++] = sudo_estrdup("noexec=true"); - if (def_exec_background) - command_info[info_len++] = sudo_estrdup("exec_background=true"); - if (def_set_utmp) - command_info[info_len++] = sudo_estrdup("set_utmp=true"); - if (def_use_pty) - command_info[info_len++] = sudo_estrdup("use_pty=true"); - if (def_utmp_runas) - command_info[info_len++] = sudo_new_key_val("utmp_user", runas_pw->pw_name); - if (cmnd_umask != 0777) - sudo_easprintf(&command_info[info_len++], "umask=0%o", (unsigned int)cmnd_umask); + if (def_closefrom >= 0) { + if (asprintf(&command_info[info_len++], "closefrom=%d", def_closefrom) == -1) + goto oom; + } + if (def_noexec) { + if ((command_info[info_len++] = strdup("noexec=true")) == NULL) + goto oom; + } + if (def_exec_background) { + if ((command_info[info_len++] = strdup("exec_background=true")) == NULL) + goto oom; + } + if (def_set_utmp) { + if ((command_info[info_len++] = strdup("set_utmp=true")) == NULL) + goto oom; + } + if (def_use_pty) { + if ((command_info[info_len++] = strdup("use_pty=true")) == NULL) + goto oom; + } + if (def_utmp_runas) { + if ((command_info[info_len++] = sudo_new_key_val("utmp_user", runas_pw->pw_name)) == NULL) + goto oom; + } + if (cmnd_umask != 0777) { + if (asprintf(&command_info[info_len++], "umask=0%o", (unsigned int)cmnd_umask) == -1) + goto oom; + } + if (cmnd_fd != -1) { + if (sudo_version < SUDO_API_MKVERSION(1, 9)) { + /* execfd only supported by plugin API 1.9 and higher */ + close(cmnd_fd); + cmnd_fd = -1; + } else { + if (asprintf(&command_info[info_len++], "execfd=%d", cmnd_fd) == -1) + goto oom; + } + } #ifdef HAVE_LOGIN_CAP_H - if (def_use_loginclass) - command_info[info_len++] = sudo_new_key_val("login_class", login_class); + if (def_use_loginclass) { + if ((command_info[info_len++] = sudo_new_key_val("login_class", login_class)) == NULL) + goto oom; + } #endif /* HAVE_LOGIN_CAP_H */ #ifdef HAVE_SELINUX - if (user_role != NULL) - command_info[info_len++] = sudo_new_key_val("selinux_role", user_role); - if (user_type != NULL) - command_info[info_len++] = sudo_new_key_val("selinux_type", user_type); + if (user_role != NULL) { + if ((command_info[info_len++] = sudo_new_key_val("selinux_role", user_role)) == NULL) + goto oom; + } + if (user_type != NULL) { + if ((command_info[info_len++] = sudo_new_key_val("selinux_type", user_type)) == NULL) + goto oom; + } #endif /* HAVE_SELINUX */ #ifdef HAVE_PRIV_SET - if (runas_privs != NULL) - command_info[info_len++] = sudo_new_key_val("runas_privs", runas_privs); - if (runas_limitprivs != NULL) - command_info[info_len++] = sudo_new_key_val("runas_limitprivs", runas_limitprivs); + if (runas_privs != NULL) { + if ((command_info[info_len++] = sudo_new_key_val("runas_privs", runas_privs)) == NULL) + goto oom; + } + if (runas_limitprivs != NULL) { + if ((command_info[info_len++] = sudo_new_key_val("runas_limitprivs", runas_limitprivs)) == NULL) + goto oom; + } #endif /* HAVE_SELINUX */ /* Fill in exec environment info */ @@ -508,10 +596,15 @@ *(exec_args->envp) = envp; *(exec_args->info) = command_info; - rval = true; + debug_return_int(true); -done: - debug_return_bool(rval); +oom: + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); +bad: + while (info_len--) + free(command_info[info_len]); + free(command_info); + debug_return_int(-1); } static int @@ -521,7 +614,7 @@ { struct sudo_conf_debug_file_list debug_files = TAILQ_HEAD_INITIALIZER(debug_files); struct sudoers_policy_open_info info; - const char *plugin_path = NULL; + const char *cp, *plugin_path = NULL; char * const *cur; debug_decl(sudoers_policy_open, SUDOERS_DEBUG_PLUGIN) @@ -534,14 +627,15 @@ args = NULL; /* Initialize the debug subsystem. */ - for (cur = settings; *cur != NULL; cur++) { - if (strncmp(*cur, "debug_flags=", sizeof("debug_flags=") - 1) == 0) { - sudoers_debug_parse_flags(&debug_files, - *cur + sizeof("debug_flags=") - 1); + for (cur = settings; (cp = *cur) != NULL; cur++) { + if (strncmp(cp, "debug_flags=", sizeof("debug_flags=") - 1) == 0) { + cp += sizeof("debug_flags=") - 1; + if (!sudoers_debug_parse_flags(&debug_files, cp)) + debug_return_int(-1); continue; } - if (strncmp(*cur, "plugin_path=", sizeof("plugin_path=") - 1) == 0) { - plugin_path = *cur + sizeof("plugin_path=") - 1; + if (strncmp(cp, "plugin_path=", sizeof("plugin_path=") - 1) == 0) { + plugin_path = cp + sizeof("plugin_path=") - 1; continue; } } @@ -551,7 +645,7 @@ info.settings = settings; info.user_info = user_info; info.plugin_args = args; - debug_return_bool(sudoers_policy_init(&info, envp)); + debug_return_int(sudoers_policy_init(&info, envp)); } static void @@ -586,7 +680,7 @@ sudo_grlist_delref(user_group_list); user_group_list = NULL; } - sudo_efree(user_gids); + free(user_gids); user_gids = NULL; sudoers_debug_deregister(); @@ -608,7 +702,7 @@ if (sudo_version < SUDO_API_MKVERSION(1, 2)) user_env = NULL; - debug_return_bool(sudo_auth_begin_session(pwd, user_env)); + debug_return_int(sudo_auth_begin_session(pwd, user_env)); } static int @@ -633,7 +727,7 @@ !sudo_auth_needs_end_session()) sudoers_policy.close = NULL; } - debug_return_bool(rval); + debug_return_int(rval); } static int @@ -644,7 +738,7 @@ user_cmnd = "validate"; SET(sudo_mode, MODE_VALIDATE); - debug_return_bool(sudoers_policy_main(0, NULL, I_VERIFYPW, NULL, NULL)); + debug_return_int(sudoers_policy_main(0, NULL, I_VERIFYPW, NULL, NULL)); } static void @@ -653,7 +747,8 @@ debug_decl(sudoers_policy_invalidate, SUDOERS_DEBUG_PLUGIN) user_cmnd = "kill"; - remove_timestamp(remove); + /* XXX - plugin API should support a return value for fatal errors. */ + timestamp_remove(remove); sudoers_cleanup(); debug_return; @@ -677,7 +772,7 @@ list_pw = sudo_getpwnam(list_user); if (list_pw == NULL) { sudo_warnx(U_("unknown user: %s"), list_user); - debug_return_bool(-1); + debug_return_int(-1); } } rval = sudoers_policy_main(argc, argv, I_LISTPW, NULL, NULL); @@ -686,7 +781,7 @@ list_pw = NULL; } - debug_return_bool(rval); + debug_return_int(rval); } static int @@ -716,9 +811,17 @@ sudo_printf(SUDO_CONV_INFO_MSG, "\n"); } } - debug_return_bool(true); + debug_return_int(true); } +static struct sudo_hook sudoers_hooks[] = { + { SUDO_HOOK_VERSION, SUDO_HOOK_SETENV, sudoers_hook_setenv, NULL }, + { SUDO_HOOK_VERSION, SUDO_HOOK_UNSETENV, sudoers_hook_unsetenv, NULL }, + { SUDO_HOOK_VERSION, SUDO_HOOK_GETENV, sudoers_hook_getenv, NULL }, + { SUDO_HOOK_VERSION, SUDO_HOOK_PUTENV, sudoers_hook_putenv, NULL }, + { 0, 0, NULL, NULL } +}; + /* * Register environment function hooks. * Note that we have not registered sudoers with the debug subsystem yet. @@ -726,26 +829,16 @@ static void sudoers_policy_register_hooks(int version, int (*register_hook)(struct sudo_hook *hook)) { - struct sudo_hook hook; + struct sudo_hook *hook; - memset(&hook, 0, sizeof(hook)); - hook.hook_version = SUDO_HOOK_VERSION; - - hook.hook_type = SUDO_HOOK_SETENV; - hook.hook_fn = sudoers_hook_setenv; - register_hook(&hook); - - hook.hook_type = SUDO_HOOK_UNSETENV; - hook.hook_fn = sudoers_hook_unsetenv; - register_hook(&hook); - - hook.hook_type = SUDO_HOOK_GETENV; - hook.hook_fn = sudoers_hook_getenv; - register_hook(&hook); - - hook.hook_type = SUDO_HOOK_PUTENV; - hook.hook_fn = sudoers_hook_putenv; - register_hook(&hook); + for (hook = sudoers_hooks; hook->hook_fn != NULL; hook++) { + if (register_hook(hook) != 0) { + sudo_warn_nodebug( + U_("unable to register hook of type %d (version %d.%d)"), + hook->hook_type, SUDO_API_VERSION_GET_MAJOR(hook->hook_version), + SUDO_API_VERSION_GET_MINOR(hook->hook_version)); + } + } } __dso_public struct policy_plugin sudoers_policy = { diff -Nru sudo-1.8.12/plugins/sudoers/prompt.c sudo-1.8.16/plugins/sudoers/prompt.c --- sudo-1.8.12/plugins/sudoers/prompt.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/prompt.c 2015-10-31 23:35:00.000000000 +0000 @@ -23,14 +23,7 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ @@ -43,8 +36,8 @@ #include "sudoers.h" /* - * Expand %h and %u escapes in the prompt and pass back the dynamically - * allocated result. Returns the same string if there are no escapes. + * Expand %h and %u escapes (if present) in the prompt and pass back + * the dynamically allocated result. */ char * expand_prompt(const char *old_prompt, const char *auth_user) @@ -96,8 +89,12 @@ } } + if ((new_prompt = malloc(++len)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_str(NULL); + } + if (subst) { - new_prompt = sudo_emalloc(++len); endp = new_prompt + len; for (p = old_prompt, np = new_prompt; *p; p++) { if (p[0] =='%') { @@ -151,13 +148,16 @@ goto oflow; } *np = '\0'; - } else - new_prompt = sudo_estrdup(old_prompt); + } else { + /* Nothing to expand. */ + memcpy(new_prompt, old_prompt, len); /* len includes NUL */ + } debug_return_str(new_prompt); oflow: /* We pre-allocate enough space, so this should never happen. */ + free(new_prompt); sudo_warnx(U_("internal error, %s overflow"), __func__); debug_return_str(NULL); } diff -Nru sudo-1.8.12/plugins/sudoers/pwutil.c sudo-1.8.16/plugins/sudoers/pwutil.c --- sudo-1.8.12/plugins/sudoers/pwutil.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/pwutil.c 2016-03-17 16:13:10.000000000 +0000 @@ -23,29 +23,19 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #ifdef HAVE_SETAUTHDB # include #endif /* HAVE_SETAUTHDB */ +#include #include #include @@ -67,6 +57,18 @@ #define cmp_grnam cmp_pwnam /* + * AIX has the concept of authentication registries (files, NIS, LDAP, etc). + * This allows you to have separate ID <-> name mappings based on which + * authentication registries the user was looked up in. + * We store the registry as part of the key and use it when matching. + */ +#ifdef HAVE_SETAUTHDB +# define getauthregistry(u, r) aix_getauthregistry((u), (r)) +#else +# define getauthregistry(u, r) ((r)[0] = '\0') +#endif + +/* * Compare by uid. */ static int @@ -74,6 +76,8 @@ { const struct cache_item *ci1 = (const struct cache_item *) v1; const struct cache_item *ci2 = (const struct cache_item *) v2; + if (ci1->k.uid == ci2->k.uid) + return strcmp(ci1->registry, ci2->registry); return ci1->k.uid - ci2->k.uid; } @@ -85,7 +89,10 @@ { const struct cache_item *ci1 = (const struct cache_item *) v1; const struct cache_item *ci2 = (const struct cache_item *) v2; - return strcmp(ci1->k.name, ci2->k.name); + int rval = strcmp(ci1->k.name, ci2->k.name); + if (rval == 0) + rval = strcmp(ci1->registry, ci2->registry); + return rval; } void @@ -103,7 +110,7 @@ debug_decl(sudo_pw_delref_item, SUDOERS_DEBUG_NSS) if (--item->refcnt == 0) - sudo_efree(item); + free(item); debug_return; } @@ -127,32 +134,54 @@ debug_decl(sudo_getpwuid, SUDOERS_DEBUG_NSS) key.k.uid = uid; + getauthregistry(IDtouser(uid), key.registry); if ((node = rbfind(pwcache_byuid, &key)) != NULL) { item = node->data; + sudo_debug_printf(SUDO_DEBUG_DEBUG, + "%s: uid %u [%s] -> user %s [%s] (cache hit)", __func__, + (unsigned int)uid, key.registry, item->d.pw->pw_name, + item->registry); goto done; } /* * Cache passwd db entry if it exists or a negative response if not. */ #ifdef HAVE_SETAUTHDB - aix_setauthdb(IDtouser(uid)); + aix_setauthdb(IDtouser(uid), key.registry); #endif item = sudo_make_pwitem(uid, NULL); +#ifdef HAVE_SETAUTHDB + aix_restoreauthdb(); +#endif if (item == NULL) { - item = sudo_ecalloc(1, sizeof(*item)); + if (errno != ENOENT || (item = calloc(1, sizeof(*item))) == NULL) { + sudo_warnx(U_("unable to cache uid %u, out of memory"), + (unsigned int) uid); + debug_return_ptr(NULL); + } item->refcnt = 1; item->k.uid = uid; /* item->d.pw = NULL; */ } - if (rbinsert(pwcache_byuid, item) != NULL) { + strlcpy(item->registry, key.registry, sizeof(item->registry)); + switch (rbinsert(pwcache_byuid, item, NULL)) { + case 1: /* should not happen */ sudo_warnx(U_("unable to cache uid %u, already exists"), (unsigned int) uid); item->refcnt = 0; + break; + case -1: + /* can't cache item, just return it */ + sudo_warnx(U_("unable to cache uid %u, out of memory"), + (unsigned int) uid); + item->refcnt = 0; + break; } -#ifdef HAVE_SETAUTHDB - aix_restoreauthdb(); -#endif + sudo_debug_printf(SUDO_DEBUG_DEBUG, + "%s: uid %u [%s] -> user %s [%s] (cached)", __func__, + (unsigned int)uid, key.registry, + item->d.pw ? item->d.pw->pw_name : "unknown", item->registry); done: item->refcnt++; debug_return_ptr(item->d.pw); @@ -166,37 +195,54 @@ { struct cache_item key, *item; struct rbnode *node; - size_t len; debug_decl(sudo_getpwnam, SUDOERS_DEBUG_NSS) key.k.name = (char *) name; + getauthregistry((char *) name, key.registry); if ((node = rbfind(pwcache_byname, &key)) != NULL) { item = node->data; + sudo_debug_printf(SUDO_DEBUG_DEBUG, + "%s: user %s [%s] -> uid %u [%s] (cache hit)", __func__, name, + key.registry, (unsigned int)item->d.pw->pw_uid, item->registry); goto done; } /* * Cache passwd db entry if it exists or a negative response if not. */ #ifdef HAVE_SETAUTHDB - aix_setauthdb((char *) name); + aix_setauthdb((char *) name, key.registry); #endif item = sudo_make_pwitem((uid_t)-1, name); +#ifdef HAVE_SETAUTHDB + aix_restoreauthdb(); +#endif if (item == NULL) { - len = strlen(name) + 1; - item = sudo_ecalloc(1, sizeof(*item) + len); + const size_t len = strlen(name) + 1; + if (errno != ENOENT || (item = calloc(1, sizeof(*item) + len)) == NULL) { + sudo_warnx(U_("unable to cache user %s, out of memory"), name); + debug_return_ptr(NULL); + } item->refcnt = 1; item->k.name = (char *) item + sizeof(*item); memcpy(item->k.name, name, len); /* item->d.pw = NULL; */ } - if (rbinsert(pwcache_byname, item) != NULL) { + strlcpy(item->registry, key.registry, sizeof(item->registry)); + switch (rbinsert(pwcache_byname, item, NULL)) { + case 1: /* should not happen */ sudo_warnx(U_("unable to cache user %s, already exists"), name); item->refcnt = 0; + break; + case -1: + /* can't cache item, just return it */ + sudo_warnx(U_("unable to cache user %s, out of memory"), name); + item->refcnt = 0; + break; } -#ifdef HAVE_SETAUTHDB - aix_restoreauthdb(); -#endif + sudo_debug_printf(SUDO_DEBUG_DEBUG, + "%s: user %s [%s] -> uid %d [%s] (cached)", __func__, name, + key.registry, item->d.pw ? (int)item->d.pw->pw_uid : -1, item->registry); done: item->refcnt++; debug_return_ptr(item->d.pw); @@ -223,6 +269,10 @@ if (shell == NULL) shell = _PATH_BSHELL; + sudo_debug_printf(SUDO_DEBUG_DEBUG, + "%s: creating and caching passwd struct for %s:%u:%u:%s:%s", __func__, + user, (unsigned int)uid, (unsigned int)gid, home, shell); + name_len = strlen(user); home_len = strlen(home); shell_len = strlen(shell); @@ -234,7 +284,11 @@ struct rbtree *pwcache; struct rbnode *node; - pwitem = sudo_ecalloc(1, len); + pwitem = calloc(1, len); + if (pwitem == NULL) { + sudo_warnx(U_("unable to cache user %s, out of memory"), user); + debug_return_ptr(NULL); + } pw = &pwitem->pw; pw->pw_uid = uid; pw->pw_gid = gid; @@ -253,15 +307,17 @@ item->refcnt = 1; item->d.pw = pw; if (i == 0) { - /* Store by uid if it doesn't already exist. */ + /* Store by uid. */ item->k.uid = pw->pw_uid; pwcache = pwcache_byuid; } else { - /* Store by name if it doesn't already exist. */ + /* Store by name. */ item->k.name = pw->pw_name; pwcache = pwcache_byname; } - if ((node = rbinsert(pwcache, item)) != NULL) { + getauthregistry(NULL, item->registry); + switch (rbinsert(pwcache, item, &node)) { + case 1: /* Already exists. */ item = node->data; if (item->d.pw == NULL) { @@ -270,8 +326,14 @@ item = node->data = &pwitem->cache; } else { /* Good entry, discard our fake one. */ - sudo_efree(pwitem); + free(pwitem); } + break; + case -1: + /* can't cache item, just return it */ + sudo_warnx(U_("unable to cache user %s, out of memory"), user); + item->refcnt = 0; + break; } } item->refcnt++; @@ -290,25 +352,28 @@ uid = (uid_t) sudo_strtoid(user + 1, NULL, NULL, &errstr); if (errstr != NULL) { - sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_DIAG, + sudo_debug_printf(SUDO_DEBUG_DIAG|SUDO_DEBUG_LINENO, "uid %s %s", user, errstr); debug_return_ptr(NULL); } debug_return_ptr(sudo_mkpwent(user, uid, gid, NULL, NULL)); } -void +int sudo_setpwent(void) { debug_decl(sudo_setpwent, SUDOERS_DEBUG_NSS) - setpwent(); if (pwcache_byuid == NULL) pwcache_byuid = rbcreate(cmp_pwuid); if (pwcache_byname == NULL) pwcache_byname = rbcreate(cmp_pwnam); + if (pwcache_byuid == NULL || pwcache_byname == NULL) + debug_return_int(-1); - debug_return; + setpwent(); + + debug_return_int(0); } void @@ -347,6 +412,8 @@ { const struct cache_item *ci1 = (const struct cache_item *) v1; const struct cache_item *ci2 = (const struct cache_item *) v2; + if (ci1->k.gid == ci2->k.gid) + return strcmp(ci1->registry, ci2->registry); return ci1->k.gid - ci2->k.gid; } @@ -365,7 +432,7 @@ debug_decl(sudo_gr_delref_item, SUDOERS_DEBUG_NSS) if (--item->refcnt == 0) - sudo_efree(item); + free(item); debug_return; } @@ -389,8 +456,13 @@ debug_decl(sudo_getgrgid, SUDOERS_DEBUG_NSS) key.k.gid = gid; + getauthregistry(NULL, key.registry); if ((node = rbfind(grcache_bygid, &key)) != NULL) { item = node->data; + sudo_debug_printf(SUDO_DEBUG_DEBUG, + "%s: gid %u [%s] -> group %s [%s] (cache hit)", __func__, + (unsigned int)gid, key.registry, item->d.gr->gr_name, + item->registry); goto done; } /* @@ -398,17 +470,34 @@ */ item = sudo_make_gritem(gid, NULL); if (item == NULL) { - item = sudo_ecalloc(1, sizeof(*item)); + if (errno != ENOENT || (item = calloc(1, sizeof(*item))) == NULL) { + sudo_warnx(U_("unable to cache gid %u, out of memory"), + (unsigned int) gid); + debug_return_ptr(NULL); + } item->refcnt = 1; item->k.gid = gid; /* item->d.gr = NULL; */ } - if (rbinsert(grcache_bygid, item) != NULL) { + strlcpy(item->registry, key.registry, sizeof(item->registry)); + switch (rbinsert(grcache_bygid, item, NULL)) { + case 1: /* should not happen */ sudo_warnx(U_("unable to cache gid %u, already exists"), (unsigned int) gid); item->refcnt = 0; + break; + case -1: + /* can't cache item, just return it */ + sudo_warnx(U_("unable to cache gid %u, out of memory"), + (unsigned int) gid); + item->refcnt = 0; + break; } + sudo_debug_printf(SUDO_DEBUG_DEBUG, + "%s: gid %u [%s] -> group %s [%s] (cached)", __func__, + (unsigned int)gid, key.registry, + item->d.gr ? item->d.gr->gr_name : "unknown", item->registry); done: item->refcnt++; debug_return_ptr(item->d.gr); @@ -422,12 +511,15 @@ { struct cache_item key, *item; struct rbnode *node; - size_t len; debug_decl(sudo_getgrnam, SUDOERS_DEBUG_NSS) key.k.name = (char *) name; + getauthregistry(NULL, key.registry); if ((node = rbfind(grcache_byname, &key)) != NULL) { item = node->data; + sudo_debug_printf(SUDO_DEBUG_DEBUG, + "%s: group %s [%s] -> gid %u [%s] (cache hit)", __func__, name, + key.registry, (unsigned int)item->d.gr->gr_gid, item->registry); goto done; } /* @@ -435,18 +527,32 @@ */ item = sudo_make_gritem((gid_t)-1, name); if (item == NULL) { - len = strlen(name) + 1; - item = sudo_ecalloc(1, sizeof(*item) + len); + const size_t len = strlen(name) + 1; + if (errno != ENOENT || (item = calloc(1, sizeof(*item) + len)) == NULL) { + sudo_warnx(U_("unable to cache group %s, out of memory"), name); + debug_return_ptr(NULL); + } item->refcnt = 1; item->k.name = (char *) item + sizeof(*item); memcpy(item->k.name, name, len); /* item->d.gr = NULL; */ } - if (rbinsert(grcache_byname, item) != NULL) { + strlcpy(item->registry, key.registry, sizeof(item->registry)); + switch (rbinsert(grcache_byname, item, NULL)) { + case 1: /* should not happen */ sudo_warnx(U_("unable to cache group %s, already exists"), name); item->refcnt = 0; + break; + case -1: + /* can't cache item, just return it */ + sudo_warnx(U_("unable to cache group %s, out of memory"), name); + item->refcnt = 0; + break; } + sudo_debug_printf(SUDO_DEBUG_DEBUG, + "%s: group %s [%s] -> gid %d [%s] (cache hit)", __func__, name, + key.registry, item->d.gr ? (int)item->d.gr->gr_gid : -1, item->registry); done: item->refcnt++; debug_return_ptr(item->d.gr); @@ -473,15 +579,19 @@ struct rbtree *grcache; struct rbnode *node; - gritem = sudo_ecalloc(1, len); + gritem = calloc(1, len); + if (gritem == NULL) { + sudo_warnx(U_("unable to cache group %s, out of memory"), group); + debug_return_ptr(NULL); + } gr = &gritem->gr; gr->gr_gid = (gid_t) sudo_strtoid(group + 1, NULL, NULL, &errstr); gr->gr_name = (char *)(gritem + 1); memcpy(gr->gr_name, group, name_len + 1); if (errstr != NULL) { - sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_DIAG, + sudo_debug_printf(SUDO_DEBUG_DIAG|SUDO_DEBUG_LINENO, "gid %s %s", group, errstr); - sudo_efree(gritem); + free(gritem); debug_return_ptr(NULL); } @@ -497,7 +607,9 @@ gritem->cache.k.name = gr->gr_name; grcache = grcache_byname; } - if ((node = rbinsert(grcache, item)) != NULL) { + getauthregistry(NULL, item->registry); + switch (rbinsert(grcache, item, &node)) { + case 1: /* Already exists. */ item = node->data; if (item->d.gr == NULL) { @@ -506,8 +618,14 @@ item = node->data = &gritem->cache; } else { /* Good entry, discard our fake one. */ - sudo_efree(gritem); + free(gritem); } + break; + case -1: + /* can't cache item, just return it */ + sudo_warnx(U_("unable to cache group %s, out of memory"), group); + item->refcnt = 0; + break; } } item->refcnt++; @@ -529,7 +647,7 @@ debug_decl(sudo_gr_delref_item, SUDOERS_DEBUG_NSS) if (--item->refcnt == 0) - sudo_efree(item); + free(item); debug_return; } @@ -542,20 +660,23 @@ debug_return; } -void +int sudo_setgrent(void) { debug_decl(sudo_setgrent, SUDOERS_DEBUG_NSS) - setgrent(); if (grcache_bygid == NULL) grcache_bygid = rbcreate(cmp_grgid); if (grcache_byname == NULL) grcache_byname = rbcreate(cmp_grnam); if (grlist_cache == NULL) grlist_cache = rbcreate(cmp_grnam); + if (grcache_bygid == NULL || grcache_byname == NULL || grlist_cache == NULL) + debug_return_int(-1); - debug_return; + setgrent(); + + debug_return_int(0); } void @@ -595,10 +716,10 @@ { struct cache_item key, *item; struct rbnode *node; - size_t len; debug_decl(sudo_get_grlist, SUDOERS_DEBUG_NSS) key.k.name = pw->pw_name; + getauthregistry(pw->pw_name, key.registry); if ((node = rbfind(grlist_cache, &key)) != NULL) { item = node->data; goto done; @@ -608,19 +729,31 @@ */ item = sudo_make_grlist_item(pw, NULL, NULL); if (item == NULL) { - /* Should not happen. */ - len = strlen(pw->pw_name) + 1; - item = sudo_ecalloc(1, sizeof(*item) + len); - item->refcnt = 1; - item->k.name = (char *) item + sizeof(*item); - memcpy(item->k.name, pw->pw_name, len); - /* item->d.grlist = NULL; */ + /* Out of memory? */ + debug_return_ptr(NULL); } - if (rbinsert(grlist_cache, item) != NULL) { + strlcpy(item->registry, key.registry, sizeof(item->registry)); + switch (rbinsert(grlist_cache, item, NULL)) { + case 1: /* should not happen */ sudo_warnx(U_("unable to cache group list for %s, already exists"), pw->pw_name); item->refcnt = 0; + break; + case -1: + /* can't cache item, just return it */ + sudo_warnx(U_("unable to cache group list for %s, out of memory"), + pw->pw_name); + item->refcnt = 0; + break; + } + if (item->d.grlist != NULL) { + int i; + for (i = 0; i < item->d.grlist->ngroups; i++) { + sudo_debug_printf(SUDO_DEBUG_DEBUG, + "%s: user %s is a member of group %s", __func__, + pw->pw_name, item->d.grlist->groups[i]); + } } done: item->refcnt++; @@ -638,15 +771,24 @@ * Cache group db entry if it doesn't already exist */ key.k.name = pw->pw_name; + getauthregistry(NULL, key.registry); if ((node = rbfind(grlist_cache, &key)) == NULL) { if ((item = sudo_make_grlist_item(pw, groups, gids)) == NULL) { sudo_warnx(U_("unable to parse groups for %s"), pw->pw_name); debug_return_int(-1); } - if (rbinsert(grlist_cache, item) != NULL) { + strlcpy(item->registry, key.registry, sizeof(item->registry)); + switch (rbinsert(grlist_cache, item, NULL)) { + case 1: sudo_warnx(U_("unable to cache group list for %s, already exists"), pw->pw_name); sudo_grlist_delref_item(item); + break; + case -1: + sudo_warnx(U_("unable to cache group list for %s, out of memory"), + pw->pw_name); + sudo_grlist_delref_item(item); + debug_return_int(-1); } } debug_return_int(0); @@ -669,7 +811,7 @@ if (group[0] == '#') { gid_t gid = (gid_t) sudo_strtoid(group + 1, NULL, NULL, &errstr); if (errstr != NULL) { - sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_DIAG, + sudo_debug_printf(SUDO_DEBUG_DIAG|SUDO_DEBUG_LINENO, "gid %s %s", group, errstr); } else { if (gid == pw->pw_gid) { @@ -708,5 +850,7 @@ sudo_gr_delref(grp); sudo_grlist_delref(grlist); } + sudo_debug_printf(SUDO_DEBUG_DEBUG, "%s: user %s %sin group %s", + __func__, pw->pw_name, matched ? "" : "NOT ", group); debug_return_bool(matched); } diff -Nru sudo-1.8.12/plugins/sudoers/pwutil.h sudo-1.8.16/plugins/sudoers/pwutil.h --- sudo-1.8.12/plugins/sudoers/pwutil.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/pwutil.h 2016-03-17 16:13:10.000000000 +0000 @@ -14,8 +14,8 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _SUDOERS_PWUTIL_H -#define _SUDOERS_PWUTIL_H +#ifndef SUDOERS_PWUTIL_H +#define SUDOERS_PWUTIL_H #define ptr_to_item(p) ((struct cache_item *)((char *)p - offsetof(struct cache_item_##p, p))) @@ -24,6 +24,7 @@ */ struct cache_item { unsigned int refcnt; + char registry[16]; /* key */ union { uid_t uid; @@ -62,4 +63,4 @@ struct cache_item *sudo_make_grlist_item(const struct passwd *pw, char * const *groups, char * const *gids); struct cache_item *sudo_make_pwitem(uid_t uid, const char *user); -#endif /* _SUDOERS_PWUTIL_H */ +#endif /* SUDOERS_PWUTIL_H */ diff -Nru sudo-1.8.12/plugins/sudoers/pwutil_impl.c sudo-1.8.16/plugins/sudoers/pwutil_impl.c --- sudo-1.8.12/plugins/sudoers/pwutil_impl.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/pwutil_impl.c 2016-03-17 16:13:10.000000000 +0000 @@ -23,26 +23,15 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include +#include #include #include #include @@ -79,6 +68,8 @@ * Dynamically allocate space for a struct item plus the key and data * elements. If name is non-NULL it is used as the key, else the * uid is the key. Fills in datum from struct password. + * Returns NULL on calloc error or unknown name/id, setting errno + * to ENOMEM or ENOENT respectively. */ struct cache_item * sudo_make_pwitem(uid_t uid, const char *name) @@ -92,8 +83,10 @@ /* Look up by name or uid. */ pw = name ? getpwnam(name) : getpwuid(uid); - if (pw == NULL) + if (pw == NULL) { + errno = ENOENT; debug_return_ptr(NULL); + } /* If shell field is empty, expand to _PATH_BSHELL. */ pw_shell = (pw->pw_shell == NULL || pw->pw_shell[0] == '\0') @@ -116,7 +109,11 @@ total += strlen(name) + 1; /* Allocate space for struct item, struct passwd and the strings. */ - pwitem = sudo_ecalloc(1, total); + if ((pwitem = calloc(1, total)) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + debug_return_ptr(NULL); + } newpw = &pwitem->pw; /* @@ -154,6 +151,8 @@ * Dynamically allocate space for a struct item plus the key and data * elements. If name is non-NULL it is used as the key, else the * gid is the key. Fills in datum from struct group. + * Returns NULL on calloc error or unknown name/id, setting errno + * to ENOMEM or ENOENT respectively. */ struct cache_item * sudo_make_gritem(gid_t gid, const char *name) @@ -166,8 +165,10 @@ /* Look up by name or gid. */ gr = name ? getgrnam(name) : getgrgid(gid); - if (gr == NULL) + if (gr == NULL) { + errno = ENOENT; debug_return_ptr(NULL); + } /* Allocate in one big chunk for easy freeing. */ nsize = psize = nmem = 0; @@ -183,7 +184,11 @@ if (name != NULL) total += strlen(name) + 1; - gritem = sudo_ecalloc(1, total); + if ((gritem = calloc(1, total)) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + debug_return_ptr(NULL); + } /* * Copy in group contents and make strings relative to space @@ -233,7 +238,7 @@ struct cache_item_grlist *grlitem; struct group_list *grlist; GETGROUPS_T *gids; - struct group *grp; + struct group *grp = NULL; int i, ngids, groupname_len; debug_decl(sudo_make_grlist_item, SUDOERS_DEBUG_NSS) @@ -245,33 +250,43 @@ } else { if (sudo_user.max_groups > 0) { ngids = sudo_user.max_groups; - gids = sudo_emallocarray(ngids, sizeof(GETGROUPS_T)); + gids = reallocarray(NULL, ngids, sizeof(GETGROUPS_T)); + if (gids == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + debug_return_ptr(NULL); + } (void)getgrouplist(pw->pw_name, pw->pw_gid, gids, &ngids); } else { -#if defined(HAVE_SYSCONF) && defined(_SC_NGROUPS_MAX) ngids = (int)sysconf(_SC_NGROUPS_MAX) * 2; if (ngids < 0) -#endif ngids = NGROUPS_MAX * 2; - gids = sudo_emallocarray(ngids, sizeof(GETGROUPS_T)); + gids = reallocarray(NULL, ngids, sizeof(GETGROUPS_T)); + if (gids == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + debug_return_ptr(NULL); + } if (getgrouplist(pw->pw_name, pw->pw_gid, gids, &ngids) == -1) { - sudo_efree(gids); - gids = sudo_emallocarray(ngids, sizeof(GETGROUPS_T)); + free(gids); + gids = reallocarray(NULL, ngids, sizeof(GETGROUPS_T)); + if (gids == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + debug_return_ptr(NULL); + } if (getgrouplist(pw->pw_name, pw->pw_gid, gids, &ngids) == -1) ngids = -1; } } } if (ngids <= 0) { - sudo_efree(gids); + free(gids); + errno = ENOENT; debug_return_ptr(NULL); } -#ifdef HAVE_SETAUTHDB - aix_setauthdb((char *) pw->pw_name); -#endif - -#if defined(HAVE_SYSCONF) && defined(_SC_LOGIN_NAME_MAX) +#ifdef _SC_LOGIN_NAME_MAX groupname_len = MAX((int)sysconf(_SC_LOGIN_NAME_MAX), 32); #else groupname_len = MAX(LOGIN_NAME_MAX, 32); @@ -285,7 +300,12 @@ total += groupname_len * ngids; again: - grlitem = sudo_ecalloc(1, total); + if ((grlitem = calloc(1, total)) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + free(gids); + debug_return_ptr(NULL); + } /* * Copy in group list and make pointers relative to space @@ -316,13 +336,17 @@ /* * Resolve and store group names by ID. */ +#ifdef HAVE_SETAUTHDB + if (grp == NULL) + aix_setauthdb((char *) pw->pw_name, NULL); +#endif ngroups = 0; for (i = 0; i < ngids; i++) { if ((grp = sudo_getgrgid(gids[i])) != NULL) { len = strlen(grp->gr_name) + 1; if (cp - (char *)grlitem + len > total) { total += len + groupname_len; - sudo_efree(grlitem); + free(grlitem); sudo_gr_delref(grp); goto again; } @@ -333,7 +357,7 @@ } } grlist->ngroups = ngroups; - sudo_efree(gids); + free(gids); #ifdef HAVE_SETAUTHDB aix_restoreauthdb(); diff -Nru sudo-1.8.12/plugins/sudoers/redblack.c sudo-1.8.16/plugins/sudoers/redblack.c --- sudo-1.8.12/plugins/sudoers/redblack.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/redblack.c 2015-10-31 23:35:07.000000000 +0000 @@ -45,14 +45,7 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #include "sudoers.h" #include "redblack.h" @@ -60,7 +53,7 @@ static void rbrepair(struct rbtree *, struct rbnode *); static void rotate_left(struct rbtree *, struct rbnode *); static void rotate_right(struct rbtree *, struct rbnode *); -static void _rbdestroy(struct rbtree *, struct rbnode *, void (*)(void *)); +static void rbdestroy_int(struct rbtree *, struct rbnode *, void (*)(void *)); /* * Red-Black tree, see http://en.wikipedia.org/wiki/Red-black_tree @@ -82,7 +75,8 @@ /* * Create a red black tree struct using the specified compare routine. - * Allocates and returns the initialized (empty) tree. + * Allocates and returns the initialized (empty) tree or NULL if + * memory cannot be allocated. */ struct rbtree * rbcreate(int (*compar)(const void *, const void*)) @@ -90,7 +84,12 @@ struct rbtree *tree; debug_decl(rbcreate, SUDOERS_DEBUG_RBTREE) - tree = (struct rbtree *) sudo_emalloc(sizeof(*tree)); + if ((tree = malloc(sizeof(*tree))) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + debug_return_ptr(NULL); + } + tree->compar = compar; /* @@ -166,11 +165,11 @@ /* * Insert data pointer into a redblack tree. - * Returns a NULL pointer on success. If a node matching "data" - * already exists, a pointer to the existant node is returned. + * Returns a 0 on success, 1 if a node matching "data" already exists + * (filling in "existing" if not NULL), or -1 on malloc() failure. */ -struct rbnode * -rbinsert(struct rbtree *tree, void *data) +int +rbinsert(struct rbtree *tree, void *data, struct rbnode **existing) { struct rbnode *node = rbfirst(tree); struct rbnode *parent = rbroot(tree); @@ -180,12 +179,20 @@ /* Find correct insertion point. */ while (node != rbnil(tree)) { parent = node; - if ((res = tree->compar(data, node->data)) == 0) - debug_return_ptr(node); + if ((res = tree->compar(data, node->data)) == 0) { + if (existing != NULL) + *existing = node; + debug_return_int(1); + } node = res < 0 ? node->left : node->right; } - node = (struct rbnode *) sudo_emalloc(sizeof(*node)); + node = malloc(sizeof(*node)); + if (node == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + debug_return_int(-1); + } node->data = data; node->left = node->right = rbnil(tree); node->parent = parent; @@ -255,7 +262,7 @@ } } rbfirst(tree)->color = black; /* first node is always black */ - debug_return_ptr(NULL); + debug_return_int(0); } /* @@ -333,29 +340,29 @@ * Recursive portion of rbdestroy(). */ static void -_rbdestroy(struct rbtree *tree, struct rbnode *node, void (*destroy)(void *)) +rbdestroy_int(struct rbtree *tree, struct rbnode *node, void (*destroy)(void *)) { - debug_decl(_rbdestroy, SUDOERS_DEBUG_RBTREE) + debug_decl(rbdestroy_int, SUDOERS_DEBUG_RBTREE) if (node != rbnil(tree)) { - _rbdestroy(tree, node->left, destroy); - _rbdestroy(tree, node->right, destroy); + rbdestroy_int(tree, node->left, destroy); + rbdestroy_int(tree, node->right, destroy); if (destroy != NULL) destroy(node->data); - sudo_efree(node); + free(node); } debug_return; } /* - * Destroy the specified tree, calling the destructor destroy + * Destroy the specified tree, calling the destructor "destroy" * for each node and then freeing the tree itself. */ void rbdestroy(struct rbtree *tree, void (*destroy)(void *)) { debug_decl(rbdestroy, SUDOERS_DEBUG_RBTREE) - _rbdestroy(tree, rbfirst(tree), destroy); - sudo_efree(tree); + rbdestroy_int(tree, rbfirst(tree), destroy); + free(tree); debug_return; } diff -Nru sudo-1.8.12/plugins/sudoers/redblack.h sudo-1.8.16/plugins/sudoers/redblack.h --- sudo-1.8.12/plugins/sudoers/redblack.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/redblack.h 2015-10-31 23:35:00.000000000 +0000 @@ -15,8 +15,8 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _SUDOERS_REDBLACK_H -#define _SUDOERS_REDBLACK_H +#ifndef SUDOERS_REDBLACK_H +#define SUDOERS_REDBLACK_H enum rbcolor { red, @@ -51,8 +51,8 @@ int rbapply_node(struct rbtree *, struct rbnode *, int (*)(void *, void *), void *, enum rbtraversal); struct rbnode *rbfind(struct rbtree *, void *); -struct rbnode *rbinsert(struct rbtree *, void *); +int rbinsert(struct rbtree *, void *, struct rbnode **); struct rbtree *rbcreate(int (*)(const void *, const void *)); void rbdestroy(struct rbtree *, void (*)(void *)); -#endif /* _SUDOERS_REDBLACK_H */ +#endif /* SUDOERS_REDBLACK_H */ diff -Nru sudo-1.8.12/plugins/sudoers/regress/check_symbols/check_symbols.c sudo-1.8.16/plugins/sudoers/regress/check_symbols/check_symbols.c --- sudo-1.8.12/plugins/sudoers/regress/check_symbols/check_symbols.c 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/regress/check_symbols/check_symbols.c 2015-10-31 23:35:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2013 Todd C. Miller + * Copyright (c) 2012-2015 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 @@ -18,18 +18,8 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H @@ -43,10 +33,6 @@ #include "sudo_util.h" #include "sudo_fatal.h" -#ifndef LINE_MAX -# define LINE_MAX 2048 -#endif - __dso_public int main(int argc, char *argv[]); static void @@ -74,8 +60,11 @@ symbols_file = argv[2]; handle = sudo_dso_load(plugin_path, SUDO_DSO_LAZY|SUDO_DSO_GLOBAL); - if (handle == NULL) - sudo_fatalx_nodebug("unable to load %s: %s", plugin_path, sudo_dso_strerror()); + if (handle == NULL) { + const char *errstr = sudo_dso_strerror(); + sudo_fatalx_nodebug("unable to load %s: %s", plugin_path, + errstr ? errstr : "unknown error"); + } fp = fopen(symbols_file, "r"); if (fp == NULL) @@ -87,8 +76,9 @@ *cp = '\0'; sym = sudo_dso_findsym(handle, line); if (sym == NULL) { + const char *errstr = sudo_dso_strerror(); printf("%s: test %d: unable to resolve symbol %s: %s\n", - getprogname(), ntests, line, sudo_dso_strerror()); + getprogname(), ntests, line, errstr ? errstr : "unknown error"); errors++; } } diff -Nru sudo-1.8.12/plugins/sudoers/regress/iolog_path/check_iolog_path.c sudo-1.8.16/plugins/sudoers/regress/iolog_path/check_iolog_path.c --- sudo-1.8.12/plugins/sudoers/regress/iolog_path/check_iolog_path.c 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/regress/iolog_path/check_iolog_path.c 2016-03-17 16:13:10.000000000 +0000 @@ -18,18 +18,8 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H @@ -41,7 +31,6 @@ #define SUDO_ERROR_WRAP 0 -#define _SUDO_MAIN #include "sudoers.h" #include "def_data.c" @@ -80,6 +69,8 @@ strftime(file_out, sizeof(file_out), tfile_out, timeptr); path = expand_iolog_path(NULL, dir_in, file_in, &slash); + if (path == NULL) + sudo_fatalx("unable to expand I/O log path"); *slash = '\0'; if (strcmp(path, dir_out) != 0) { sudo_warnx("%s: expected %s, got %s", dir_in, dir_out, path); @@ -89,6 +80,7 @@ sudo_warnx("%s: expected %s, got %s", file_in, file_out, slash + 1); error = 1; } + free(path); return error; } @@ -167,21 +159,33 @@ sudo_fatalx("group ID %s: %s", line, errstr); break; case 5: + if (user_shost != NULL) + free(user_shost); user_shost = strdup(line); break; case 6: + if (user_base != NULL) + free(user_base); user_base = strdup(line); break; case 7: + if (dir_in != NULL) + free(dir_in); dir_in = strdup(line); break; case 8: + if (file_in != NULL) + free(file_in); file_in = strdup(line); break; case 9: + if (dir_out != NULL) + free(dir_out); dir_out = strdup(line); break; case 10: + if (file_out != NULL) + free(file_out); file_out = strdup(line); break; case 11: diff -Nru sudo-1.8.12/plugins/sudoers/regress/logging/check_wrap.c sudo-1.8.16/plugins/sudoers/regress/logging/check_wrap.c --- sudo-1.8.12/plugins/sudoers/regress/logging/check_wrap.c 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/regress/logging/check_wrap.c 2015-10-31 23:35:00.000000000 +0000 @@ -18,18 +18,8 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H @@ -60,7 +50,7 @@ { size_t len; FILE *fp; - char *cp, *dash, *line, lines[2][2048]; + char *line, lines[2][2048]; int lineno = 0; int which = 0; @@ -81,14 +71,18 @@ * 60-80,40 */ while ((line = fgets(lines[which], sizeof(lines[which]), fp)) != NULL) { + char *cp, *last; + len = strcspn(line, "\n"); line[len] = '\0'; /* If we read the 2nd line, parse list of line lengths and check. */ if (which) { lineno++; - for (cp = strtok(lines[1], ","); cp != NULL; cp = strtok(NULL, ",")) { + for (cp = strtok_r(lines[1], ",", &last); cp != NULL; cp = strtok_r(NULL, ",", &last)) { + char *dash; size_t maxlen; + /* May be either a number or a range. */ dash = strchr(cp, '-'); if (dash != NULL) { diff -Nru sudo-1.8.12/plugins/sudoers/regress/parser/check_addr.c sudo-1.8.16/plugins/sudoers/regress/parser/check_addr.c --- sudo-1.8.12/plugins/sudoers/regress/parser/check_addr.c 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/regress/parser/check_addr.c 2015-10-31 23:35:00.000000000 +0000 @@ -19,14 +19,7 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #include #ifdef HAVE_STRING_H # include @@ -131,7 +124,10 @@ continue; if (strncmp(line, "interfaces:", sizeof("interfaces:") - 1) == 0) { - set_interfaces(line + sizeof("interfaces:") - 1); + if (!set_interfaces(line + sizeof("interfaces:") - 1)) { + sudo_warn("unable to parse interfaces list"); + errors++; + } } else if (strncmp(line, "address:", sizeof("address:") - 1) == 0) { errors += check_addr(line + sizeof("address:") - 1); ntests++; diff -Nru sudo-1.8.12/plugins/sudoers/regress/parser/check_base64.c sudo-1.8.16/plugins/sudoers/regress/parser/check_base64.c --- sudo-1.8.12/plugins/sudoers/regress/parser/check_base64.c 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/regress/parser/check_base64.c 2015-10-31 23:35:24.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013 Todd C. Miller + * Copyright (c) 2013-2015 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,19 +16,10 @@ #include +#include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H @@ -48,11 +39,17 @@ __dso_public int main(int argc, char *argv[]); +static 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 }; + struct base64_test { const char *ascii; const char *encoded; } test_strings[] = { { + bstring1, + "6riice9nwc0N2aaqqCR3Kvxvdjcb7Z4akF/PvA==" + }, + { "any carnal pleasure.", "YW55IGNhcm5hbCBwbGVhc3VyZS4=" }, diff -Nru sudo-1.8.12/plugins/sudoers/regress/parser/check_digest.c sudo-1.8.16/plugins/sudoers/regress/parser/check_digest.c --- sudo-1.8.12/plugins/sudoers/regress/parser/check_digest.c 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/regress/parser/check_digest.c 2015-10-31 23:35:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013 Todd C. Miller + * Copyright (c) 2013-2015 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,19 +16,10 @@ #include +#include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H diff -Nru sudo-1.8.12/plugins/sudoers/regress/parser/check_fill.c sudo-1.8.16/plugins/sudoers/regress/parser/check_fill.c --- sudo-1.8.12/plugins/sudoers/regress/parser/check_fill.c 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/regress/parser/check_fill.c 2016-03-17 16:13:10.000000000 +0000 @@ -18,14 +18,7 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STDBOOL_H # include #else @@ -106,6 +99,10 @@ static int check_fill(const char *input, int len, int addspace, const char *expect, char **resultp) { + if (sudoerslval.string != NULL) { + free(sudoerslval.string); + sudoerslval.string = NULL; + } if (!fill(input, len)) return -1; *resultp = sudoerslval.string; @@ -115,6 +112,10 @@ static int check_fill_cmnd(const char *input, int len, int addspace, const char *expect, char **resultp) { + if (sudoerslval.command.cmnd != NULL) { + free(sudoerslval.command.cmnd); + sudoerslval.command.cmnd = NULL; + } if (!fill_cmnd(input, len)) return -1; *resultp = sudoerslval.command.cmnd; @@ -124,6 +125,7 @@ static int check_fill_args(const char *input, int len, int addspace, const char *expect, char **resultp) { + /* Must not free old sudoerslval.command.args as gets appended to. */ if (!fill_args(input, len, addspace)) return -1; *resultp = sudoerslval.command.args; diff -Nru sudo-1.8.12/plugins/sudoers/regress/parser/check_hexchar.c sudo-1.8.16/plugins/sudoers/regress/parser/check_hexchar.c --- sudo-1.8.12/plugins/sudoers/regress/parser/check_hexchar.c 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/regress/parser/check_hexchar.c 2015-10-31 23:35:00.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 Todd C. Miller + * Copyright (c) 2014-2015 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,19 +16,10 @@ #include +#include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H diff -Nru sudo-1.8.12/plugins/sudoers/regress/sudoers/test10.json.ok sudo-1.8.16/plugins/sudoers/regress/sudoers/test10.json.ok --- sudo-1.8.12/plugins/sudoers/regress/sudoers/test10.json.ok 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/regress/sudoers/test10.json.ok 2015-10-31 23:35:24.000000000 +0000 @@ -0,0 +1,2 @@ +{ +} diff -Nru sudo-1.8.12/plugins/sudoers/regress/sudoers/test14.json.ok sudo-1.8.16/plugins/sudoers/regress/sudoers/test14.json.ok --- sudo-1.8.12/plugins/sudoers/regress/sudoers/test14.json.ok 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/regress/sudoers/test14.json.ok 2015-10-31 23:35:24.000000000 +0000 @@ -0,0 +1,38 @@ +{ + "Command_Aliases": { + "LS": [ + { + "command": "\/bin\/ls", + "sha224": "d06a2617c98d377c250edd470fd5e576327748d82915d6e33b5f8db1" + } + ], + "SH": [ + { + "command": "\/bin\/sh", + "sha256": "hOtoe\/iK6SlGg7w4BfZBBdSsXjUmTJ5+ts51yjh7vkM=" + } + ] + }, + "User_Specs": [ + { + "User_List": [ + { "username": "millert" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Commands": [ + { "cmndalias": "LS" }, + { "cmndalias": "SH" }, + { + "command": "\/bin\/kill", + "sha512": "srzYEQ2aqzm+it3f74opTMkIImZRLxBARVpb0g9RSouJYdLt7DTRMEY4Ry9NyaOiDoUIplpNjqYH0JMYPVdFnw" + } + ] + } + ] + } + ] +} diff -Nru sudo-1.8.12/plugins/sudoers/regress/sudoers/test15.json.ok sudo-1.8.16/plugins/sudoers/regress/sudoers/test15.json.ok --- sudo-1.8.12/plugins/sudoers/regress/sudoers/test15.json.ok 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/regress/sudoers/test15.json.ok 2015-10-31 23:35:24.000000000 +0000 @@ -0,0 +1,19 @@ +{ + "User_Specs": [ + { + "User_List": [ + { "username": "user" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Commands": [ + { "command": "sudoedit \/etc\/motd" } + ] + } + ] + } + ] +} diff -Nru sudo-1.8.12/plugins/sudoers/regress/sudoers/test16.json.ok sudo-1.8.16/plugins/sudoers/regress/sudoers/test16.json.ok --- sudo-1.8.12/plugins/sudoers/regress/sudoers/test16.json.ok 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/regress/sudoers/test16.json.ok 2015-10-31 23:35:24.000000000 +0000 @@ -0,0 +1,24 @@ +{ + "Command_Aliases": { + "EDIT": [ + { "command": "sudoedit \/etc\/motd" } + ] + }, + "User_Specs": [ + { + "User_List": [ + { "username": "user" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Commands": [ + { "cmndalias": "EDIT" } + ] + } + ] + } + ] +} diff -Nru sudo-1.8.12/plugins/sudoers/regress/sudoers/test1.in sudo-1.8.16/plugins/sudoers/regress/sudoers/test1.in --- sudo-1.8.12/plugins/sudoers/regress/sudoers/test1.in 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/regress/sudoers/test1.in 2016-03-17 16:13:10.000000000 +0000 @@ -1,8 +1,12 @@ # # Verify that all command tags are parsed OK. -# See http://www.sudo.ws/bugs/show_bug.cgi?id=437 +# See https://bugzilla.sudo.ws/show_bug.cgi?id=437 # user1 ALL = LOG_INPUT: LOG_OUTPUT: /usr/bin/su -:\ ALL = NOLOG_INPUT: NOLOG_OUTPUT: /usr/bin/id user2 ALL = NOPASSWD: NOEXEC: SETENV: /usr/bin/vi:\ ALL = PASSWD: EXEC: NOSETENV: /usr/bin/echo +user3 ALL = MAIL: /bin/sh:\ + ALL = NOMAIL: /usr/bin/id +user4 ALL = FOLLOW: sudoedit /etc/motd:\ + ALL = NOFOLLOW: sudoedit /home/*/* diff -Nru sudo-1.8.12/plugins/sudoers/regress/sudoers/test1.json.ok sudo-1.8.16/plugins/sudoers/regress/sudoers/test1.json.ok --- sudo-1.8.12/plugins/sudoers/regress/sudoers/test1.json.ok 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/regress/sudoers/test1.json.ok 2015-10-31 23:35:24.000000000 +0000 @@ -0,0 +1,154 @@ +{ + "User_Specs": [ + { + "User_List": [ + { "username": "user1" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Options": [ + { "log_input": true }, + { "log_output": true } + ], + "Commands": [ + { "command": "\/usr\/bin\/su -" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user1" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Options": [ + { "log_input": false }, + { "log_output": false } + ], + "Commands": [ + { "command": "\/usr\/bin\/id" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user2" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Options": [ + { "authenticate": false }, + { "noexec": true }, + { "setenv": true } + ], + "Commands": [ + { "command": "\/usr\/bin\/vi" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user2" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Options": [ + { "authenticate": true }, + { "noexec": false }, + { "setenv": false } + ], + "Commands": [ + { "command": "\/usr\/bin\/echo" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user3" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Options": [ + { "send_mail": true } + ], + "Commands": [ + { "command": "\/bin\/sh" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user3" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Options": [ + { "send_mail": false } + ], + "Commands": [ + { "command": "\/usr\/bin\/id" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user4" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Options": [ + { "sudoedit_follow": true } + ], + "Commands": [ + { "command": "sudoedit \/etc\/motd" } + ] + } + ] + }, + { + "User_List": [ + { "username": "user4" } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Options": [ + { "sudoedit_follow": false } + ], + "Commands": [ + { "command": "sudoedit \/home\/*\/*" } + ] + } + ] + } + ] +} diff -Nru sudo-1.8.12/plugins/sudoers/regress/sudoers/test1.out.ok sudo-1.8.16/plugins/sudoers/regress/sudoers/test1.out.ok --- sudo-1.8.12/plugins/sudoers/regress/sudoers/test1.out.ok 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/regress/sudoers/test1.out.ok 2015-10-31 23:35:24.000000000 +0000 @@ -2,5 +2,7 @@ -user1 ALL = /usr/bin/su - : ALL = /usr/bin/id -user2 ALL = NOPASSWD: NOEXEC: /usr/bin/vi : ALL = PASSWD: EXEC: /usr/bin/echo +user1 ALL = LOG_INPUT: LOG_OUTPUT: /usr/bin/su - : ALL = NOLOG_INPUT: NOLOG_OUTPUT: /usr/bin/id +user2 ALL = NOEXEC: NOPASSWD: SETENV: /usr/bin/vi : ALL = EXEC: PASSWD: NOSETENV: /usr/bin/echo +user3 ALL = MAIL: /bin/sh : ALL = NOMAIL: /usr/bin/id +user4 ALL = FOLLOW: sudoedit /etc/motd : ALL = NOFOLLOW: sudoedit /home/*/* diff -Nru sudo-1.8.12/plugins/sudoers/regress/sudoers/test1.toke.ok sudo-1.8.16/plugins/sudoers/regress/sudoers/test1.toke.ok --- sudo-1.8.12/plugins/sudoers/regress/sudoers/test1.toke.ok 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/regress/sudoers/test1.toke.ok 2015-10-31 23:35:24.000000000 +0000 @@ -4,3 +4,5 @@ # 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 diff -Nru sudo-1.8.12/plugins/sudoers/regress/sudoers/test2.json.ok sudo-1.8.16/plugins/sudoers/regress/sudoers/test2.json.ok --- sudo-1.8.12/plugins/sudoers/regress/sudoers/test2.json.ok 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/regress/sudoers/test2.json.ok 2015-10-31 23:35:24.000000000 +0000 @@ -0,0 +1,403 @@ +{ + "Defaults": [ + { + "Binding": [ + { "hostname": "somehost" } + ], + "Options": [ + { "set_home": true } + ] + }, + { + "Binding": [ + { "hostname": "quoted\"" } + ], + "Options": [ + { "set_home": true } + ] + }, + { + "Binding": [ + { "username": "you" } + ], + "Options": [ + { "set_home": true } + ] + }, + { + "Binding": [ + { "username": "us\"" } + ], + "Options": [ + { "set_home": true } + ] + }, + { + "Binding": [ + { "username": "%them" } + ], + "Options": [ + { "set_home": true } + ] + }, + { + "Binding": [ + { "username": "%: non UNIX 0 c" } + ], + "Options": [ + { "set_home": true } + ] + }, + { + "Binding": [ + { "username": "+net" } + ], + "Options": [ + { "set_home": true } + ] + }, + { + "Binding": [ + { "username": "someone" } + ], + "Options": [ + { "set_home": true } + ] + }, + { + "Binding": [ + { "username": "some one" } + ], + "Options": [ + { "set_home": true } + ] + } + ], + "User_Aliases": { + "UA1": [ + { "username": "foo" } + ], + "UA10": [ + { "nonunixgroup": "C\/non\"UNIX\"0 c" } + ], + "UA11": [ + { "nonunixgroup": "C\/non_UNIX_0 c" } + ], + "UA12": [ + { "nonunixgroup": "C\/non\\'UNIX_3 c" } + ], + "UA2": [ + { "username": "foo.bar" } + ], + "UA3": [ + { "username": "foo\"" } + ], + "UA4": [ + { "username": "foo:bar" } + ], + "UA5": [ + { "username": "foo:bar\"" } + ], + "UA6": [ + { "usergroup": "baz" } + ], + "UA7": [ + { "usergroup": "baz.biz" } + ], + "UA8": [ + { "nonunixgroup": "C\/non UNIX 0 c" } + ], + "UA9": [ + { "nonunixgroup": "C\/non\\'UNIX\\'1 c" } + ] + }, + "Runas_Aliases": { + "RA1": [ + { "username": "foo" } + ], + "RA2": [ + { "username": "foo\"" } + ], + "RA3": [ + { "username": "foo:bar" } + ], + "RA4": [ + { "username": "foo:bar\"" } + ] + }, + "User_Specs": [ + { + "User_List": [ + { "username": "foo" } + ], + "Host_List": [ + { "hostname": "hosta" } + ], + "Cmnd_Specs": [ + { + "runasusers": [ + { "username": "root" } + ], + "Options": [ + { "setenv": true } + ], + "Commands": [ + { "cmndalias": "ALL" } + ] + } + ] + }, + { + "User_List": [ + { "username": "foo.bar" } + ], + "Host_List": [ + { "hostname": "hostb" } + ], + "Cmnd_Specs": [ + { + "runasusers": [ + { "username": "root" } + ], + "Options": [ + { "setenv": true } + ], + "Commands": [ + { "cmndalias": "ALL" } + ] + } + ] + }, + { + "User_List": [ + { "username": "foo\"" } + ], + "Host_List": [ + { "hostname": "hostc" } + ], + "Cmnd_Specs": [ + { + "runasusers": [ + { "username": "root" } + ], + "Options": [ + { "setenv": true } + ], + "Commands": [ + { "cmndalias": "ALL" } + ] + } + ] + }, + { + "User_List": [ + { "username": "foo:bar" } + ], + "Host_List": [ + { "hostname": "hostd" } + ], + "Cmnd_Specs": [ + { + "runasusers": [ + { "username": "root" } + ], + "Options": [ + { "setenv": true } + ], + "Commands": [ + { "cmndalias": "ALL" } + ] + } + ] + }, + { + "User_List": [ + { "username": "foo:bar\"" } + ], + "Host_List": [ + { "hostname": "hoste" } + ], + "Cmnd_Specs": [ + { + "runasusers": [ + { "username": "root" } + ], + "Options": [ + { "setenv": true } + ], + "Commands": [ + { "cmndalias": "ALL" } + ] + } + ] + }, + { + "User_List": [ + { "usergroup": "baz" } + ], + "Host_List": [ + { "hostname": "hosta" } + ], + "Cmnd_Specs": [ + { + "runasusers": [ + { "username": "root" } + ], + "Options": [ + { "setenv": true } + ], + "Commands": [ + { "cmndalias": "ALL" } + ] + } + ] + }, + { + "User_List": [ + { "usergroup": "baz.biz" } + ], + "Host_List": [ + { "hostname": "hostb" } + ], + "Cmnd_Specs": [ + { + "runasusers": [ + { "username": "root" } + ], + "Options": [ + { "setenv": true } + ], + "Commands": [ + { "cmndalias": "ALL" } + ] + } + ] + }, + { + "User_List": [ + { "nonunixgroup": "C\/non UNIX 0 c" } + ], + "Host_List": [ + { "hostname": "hostc" } + ], + "Cmnd_Specs": [ + { + "runasusers": [ + { "username": "root" } + ], + "Options": [ + { "setenv": true } + ], + "Commands": [ + { "cmndalias": "ALL" } + ] + } + ] + }, + { + "User_List": [ + { "nonunixgroup": "C\/non\\'UNIX\\'1 c" } + ], + "Host_List": [ + { "hostname": "hostd" } + ], + "Cmnd_Specs": [ + { + "runasusers": [ + { "username": "root" } + ], + "Options": [ + { "setenv": true } + ], + "Commands": [ + { "cmndalias": "ALL" } + ] + } + ] + }, + { + "User_List": [ + { "nonunixgroup": "C\/non\"UNIX\"0 c" } + ], + "Host_List": [ + { "hostname": "hoste" } + ], + "Cmnd_Specs": [ + { + "runasusers": [ + { "username": "root" } + ], + "Options": [ + { "setenv": true } + ], + "Commands": [ + { "cmndalias": "ALL" } + ] + } + ] + }, + { + "User_List": [ + { "nonunixgroup": "C\/non_UNIX_0 c" } + ], + "Host_List": [ + { "hostname": "hostf" } + ], + "Cmnd_Specs": [ + { + "runasusers": [ + { "username": "root" } + ], + "Options": [ + { "setenv": true } + ], + "Commands": [ + { "cmndalias": "ALL" } + ] + } + ] + }, + { + "User_List": [ + { "nonunixgroup": "C\/non\\'UNIX_3 c" } + ], + "Host_List": [ + { "hostname": "hostg" } + ], + "Cmnd_Specs": [ + { + "runasusers": [ + { "username": "root" } + ], + "Options": [ + { "setenv": true } + ], + "Commands": [ + { "cmndalias": "ALL" } + ] + } + ] + }, + { + "User_List": [ + { "netgroup": "netgr" } + ], + "Host_List": [ + { "hostname": "hosth" } + ], + "Cmnd_Specs": [ + { + "runasusers": [ + { "username": "root" } + ], + "Options": [ + { "setenv": true } + ], + "Commands": [ + { "cmndalias": "ALL" } + ] + } + ] + } + ] +} diff -Nru sudo-1.8.12/plugins/sudoers/regress/sudoers/test3.json.ok sudo-1.8.16/plugins/sudoers/regress/sudoers/test3.json.ok --- sudo-1.8.12/plugins/sudoers/regress/sudoers/test3.json.ok 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/regress/sudoers/test3.json.ok 2015-10-31 23:35:24.000000000 +0000 @@ -0,0 +1,45 @@ +{ + "Defaults": [ + { + "Binding": [ + { "useralias": "FOO" } + ], + "Options": [ + { "env_reset": true } + ] + }, + { + "Binding": [ + { "username": "foo" }, + { "username": "bar" } + ], + "Options": [ + { "env_reset": true } + ] + }, + { + "Binding": [ + { "username": "foo" }, + { "username": " bar" } + ], + "Options": [ + { "env_reset": true } + ] + }, + { + "Binding": [ + { "username": "foo" }, + { "username": "bar" } + ], + "Options": [ + { "env_reset": true } + ] + } + ], + "User_Aliases": { + "FOO": [ + { "username": "foo" }, + { "username": "bar" } + ] + } +} diff -Nru sudo-1.8.12/plugins/sudoers/regress/sudoers/test6.json.ok sudo-1.8.16/plugins/sudoers/regress/sudoers/test6.json.ok --- sudo-1.8.12/plugins/sudoers/regress/sudoers/test6.json.ok 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/regress/sudoers/test6.json.ok 2015-10-31 23:35:24.000000000 +0000 @@ -0,0 +1,158 @@ +{ + "Defaults": [ + { + "Binding": [ + { "userid": 123 } + ], + "Options": [ + { "set_home": true } + ] + }, + { + "Binding": [ + { "userid": 123 } + ], + "Options": [ + { "set_home": true } + ] + }, + { + "Binding": [ + { "userid": 123 } + ], + "Options": [ + { "set_home": true } + ] + }, + { + "Binding": [ + { "userid": 123 } + ], + "Options": [ + { "set_home": true } + ] + } + ], + "User_Specs": [ + { + "User_List": [ + { "userid": 0 } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Options": [ + { "setenv": true } + ], + "Commands": [ + { "cmndalias": "ALL" } + ] + } + ] + }, + { + "User_List": [ + { "userid": 0 } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "runasusers": [ + { "userid": 0 } + ], + "runasgroups": [ + { "usergroup": "#0" } + ], + "Options": [ + { "setenv": true } + ], + "Commands": [ + { "cmndalias": "ALL" } + ] + } + ] + }, + { + "User_List": [ + { "userid": 0 } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Options": [ + { "setenv": true } + ], + "Commands": [ + { "cmndalias": "ALL" } + ] + } + ] + }, + { + "User_List": [ + { "userid": 0 } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "runasusers": [ + { "userid": 0 } + ], + "runasgroups": [ + { "usergroup": "#0" } + ], + "Options": [ + { "setenv": true } + ], + "Commands": [ + { "cmndalias": "ALL" } + ] + } + ] + }, + { + "User_List": [ + { "usergid": 0 } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Options": [ + { "setenv": true } + ], + "Commands": [ + { "cmndalias": "ALL" } + ] + } + ] + }, + { + "User_List": [ + { "usergid": 0 } + ], + "Host_List": [ + { "hostalias": "ALL" } + ], + "Cmnd_Specs": [ + { + "Options": [ + { "setenv": true } + ], + "Commands": [ + { "cmndalias": "ALL" } + ] + } + ] + } + ] +} diff -Nru sudo-1.8.12/plugins/sudoers/regress/sudoers/test9.json.ok sudo-1.8.16/plugins/sudoers/regress/sudoers/test9.json.ok --- sudo-1.8.12/plugins/sudoers/regress/sudoers/test9.json.ok 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/regress/sudoers/test9.json.ok 2015-10-31 23:35:24.000000000 +0000 @@ -0,0 +1,2 @@ +{ +} diff -Nru sudo-1.8.12/plugins/sudoers/set_perms.c sudo-1.8.16/plugins/sudoers/set_perms.c --- sudo-1.8.12/plugins/sudoers/set_perms.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/set_perms.c 2016-03-17 16:13:10.000000000 +0000 @@ -23,23 +23,14 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #ifdef _AIX # include #endif @@ -1582,13 +1573,7 @@ } pw = runas_pw ? runas_pw : sudo_user.pw; -#ifdef HAVE_SETAUTHDB - aix_setauthdb(pw->pw_name); -#endif grlist = sudo_get_grlist(pw); -#ifdef HAVE_SETAUTHDB - aix_restoreauthdb(); -#endif if (grlist != NULL) { if (sudo_setgroups(grlist->ngids, grlist->gids) < 0) { sudo_grlist_delref(grlist); diff -Nru sudo-1.8.12/plugins/sudoers/solaris_audit.c sudo-1.8.16/plugins/sudoers/solaris_audit.c --- sudo-1.8.12/plugins/sudoers/solaris_audit.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/solaris_audit.c 2015-10-31 23:34:59.000000000 +0000 @@ -15,6 +15,10 @@ */ #include + +#ifdef HAVE_SOLARIS_AUDIT + +#include #include #include #include @@ -121,3 +125,5 @@ return 0; } + +#endif /* HAVE_SOLARIS_AUDIT */ diff -Nru sudo-1.8.12/plugins/sudoers/solaris_audit.h sudo-1.8.16/plugins/sudoers/solaris_audit.h --- sudo-1.8.12/plugins/sudoers/solaris_audit.h 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/solaris_audit.h 2015-10-31 23:34:59.000000000 +0000 @@ -14,10 +14,10 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _SUDOERS_SOLARIS_AUDIT_H -#define _SUDOERS_SOLARIS_AUDIT_H +#ifndef SUDOERS_SOLARIS_AUDIT_H +#define SUDOERS_SOLARIS_AUDIT_H int solaris_audit_success(int argc, char *argv[]); int solaris_audit_failure(int argc, char *argv[], char const *const fmt, va_list); -#endif /* _SUDOERS_SOLARIS_AUDIT_H */ +#endif /* SUDOERS_SOLARIS_AUDIT_H */ diff -Nru sudo-1.8.12/plugins/sudoers/sssd.c sudo-1.8.16/plugins/sudoers/sssd.c --- sudo-1.8.12/plugins/sudoers/sssd.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/sssd.c 2016-03-17 16:13:10.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003-2015 Todd C. Miller + * Copyright (c) 2003-2016 Todd C. Miller * Copyright (c) 2011 Daniel Kopecek * * This code is derived from software contributed by Aaron Spangler. @@ -19,27 +19,20 @@ #include +#ifdef HAVE_SSSD + #include #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #ifdef TIME_WITH_SYS_TIME # include #endif @@ -101,7 +94,7 @@ static int sudo_sss_open(struct sudo_nss *nss); static int sudo_sss_close(struct sudo_nss *nss); static int sudo_sss_parse(struct sudo_nss *nss); -static void sudo_sss_parse_options(struct sudo_sss_handle *handle, +static bool sudo_sss_parse_options(struct sudo_sss_handle *handle, struct sss_sudo_rule *rule); static int sudo_sss_setdefs(struct sudo_nss *nss); static int sudo_sss_lookup(struct sudo_nss *nss, int ret, int pwflag); @@ -121,47 +114,102 @@ uint32_t *state); static void -sudo_sss_attrcpy(struct sss_sudo_attr *dst, const struct sss_sudo_attr *src) +sudo_sss_attrfree(struct sss_sudo_attr *attr) { - unsigned int i; - debug_decl(sudo_sss_attrcpy, SUDOERS_DEBUG_SSSD) + unsigned int i; + debug_decl(sudo_sss_attrfree, SUDOERS_DEBUG_SSSD) + + free(attr->name); + attr->name = NULL; + if (attr->values != NULL) { + for (i = 0; i < attr->num_values; ++i) + free(attr->values[i]); + free(attr->values); + attr->values = NULL; + } + attr->num_values = 0; - sudo_debug_printf(SUDO_DEBUG_DEBUG, "dst=%p, src=%p", dst, src); - sudo_debug_printf(SUDO_DEBUG_INFO, "sudo_emalloc: cnt=%d", src->num_values); + debug_return; +} + +static bool +sudo_sss_attrcpy(struct sss_sudo_attr *dst, const struct sss_sudo_attr *src) +{ + unsigned int i = 0; + debug_decl(sudo_sss_attrcpy, SUDOERS_DEBUG_SSSD) - dst->name = sudo_estrdup(src->name); - dst->num_values = src->num_values; - dst->values = sudo_emallocarray(dst->num_values, sizeof(char *)); + sudo_debug_printf(SUDO_DEBUG_DEBUG, "dst=%p, src=%p", dst, src); + sudo_debug_printf(SUDO_DEBUG_INFO, "malloc: cnt=%d", src->num_values); - for (i = 0; i < dst->num_values; ++i) - dst->values[i] = sudo_estrdup(src->values[i]); + dst->name = strdup(src->name); + dst->values = reallocarray(NULL, src->num_values, sizeof(char *)); + if (dst->name == NULL || dst->values == NULL) + goto oom; + dst->num_values = src->num_values; + + for (i = 0; i < dst->num_values; ++i) { + dst->values[i] = strdup(src->values[i]); + if (dst->values[i] == NULL) { + dst->num_values = i; + goto oom; + } + } - debug_return; + debug_return_bool(true); +oom: + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + sudo_sss_attrfree(dst); + debug_return_bool(false); } static void +sudo_sss_rulefree(struct sss_sudo_rule *rule) +{ + unsigned int i; + debug_decl(sudo_sss_rulefree, SUDOERS_DEBUG_SSSD) + + for (i = 0; i < rule->num_attrs; ++i) + sudo_sss_attrfree(rule->attrs + i); + free(rule->attrs); + rule->attrs = NULL; + rule->num_attrs = 0; + + debug_return; +} + +static bool sudo_sss_rulecpy(struct sss_sudo_rule *dst, const struct sss_sudo_rule *src) { - unsigned int i; - debug_decl(sudo_sss_rulecpy, SUDOERS_DEBUG_SSSD) + unsigned int i; + debug_decl(sudo_sss_rulecpy, SUDOERS_DEBUG_SSSD) - sudo_debug_printf(SUDO_DEBUG_DEBUG, "dst=%p, src=%p", dst, src); - sudo_debug_printf(SUDO_DEBUG_INFO, "sudo_emalloc: cnt=%d", src->num_attrs); + sudo_debug_printf(SUDO_DEBUG_DEBUG, "dst=%p, src=%p", dst, src); + sudo_debug_printf(SUDO_DEBUG_INFO, "malloc: cnt=%d", src->num_attrs); - dst->num_attrs = src->num_attrs; - dst->attrs = sudo_emallocarray(dst->num_attrs, sizeof(struct sss_sudo_attr)); + dst->num_attrs = 0; + dst->attrs = reallocarray(NULL, src->num_attrs, sizeof(struct sss_sudo_attr)); + if (dst->attrs == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_bool(false); + } - for (i = 0; i < dst->num_attrs; ++i) - sudo_sss_attrcpy(dst->attrs + i, src->attrs + i); + for (i = 0; i < src->num_attrs; ++i) { + if (!sudo_sss_attrcpy(dst->attrs + i, src->attrs + i)) { + dst->num_attrs = i; + sudo_sss_rulefree(dst); + debug_return_bool(false); + } + } + dst->num_attrs = i; - debug_return; + debug_return_bool(true); } -#define _SUDO_SSS_FILTER_INCLUDE 0 -#define _SUDO_SSS_FILTER_EXCLUDE 1 +#define SUDO_SSS_FILTER_INCLUDE 0 +#define SUDO_SSS_FILTER_EXCLUDE 1 -#define _SUDO_SSS_STATE_HOSTMATCH 0x01 -#define _SUDO_SSS_STATE_USERMATCH 0x02 +#define SUDO_SSS_STATE_HOSTMATCH 0x01 +#define SUDO_SSS_STATE_USERMATCH 0x02 static struct sss_sudo_result * sudo_sss_filter_result(struct sudo_sss_handle *handle, @@ -176,29 +224,45 @@ sudo_debug_printf(SUDO_DEBUG_DEBUG, "in_res=%p, count=%u, act=%s", in_res, in_res ? in_res->num_rules : 0, - act == _SUDO_SSS_FILTER_EXCLUDE ? "EXCLUDE" : "INCLUDE"); + act == SUDO_SSS_FILTER_EXCLUDE ? "EXCLUDE" : "INCLUDE"); if (in_res == NULL) debug_return_ptr(NULL); - sudo_debug_printf(SUDO_DEBUG_DEBUG, "sudo_emalloc: cnt=%d", in_res->num_rules); + sudo_debug_printf(SUDO_DEBUG_DEBUG, "malloc: cnt=%d", in_res->num_rules); - out_res = sudo_emalloc(sizeof(struct sss_sudo_result)); - out_res->rules = in_res->num_rules > 0 ? - sudo_emallocarray(in_res->num_rules, sizeof(struct sss_sudo_rule)) : NULL; - out_res->num_rules = 0; + if ((out_res = calloc(1, sizeof(struct sss_sudo_result))) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_ptr(NULL); + } + if (in_res->num_rules > 0) { + out_res->rules = + reallocarray(NULL, in_res->num_rules, sizeof(struct sss_sudo_rule)); + if (out_res->rules == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + free(out_res); + debug_return_ptr(NULL); + } + } for (i = l = 0; i < in_res->num_rules; ++i) { r = filterp(handle, in_res->rules + i, filterp_arg); - if (( r && act == _SUDO_SSS_FILTER_INCLUDE) || - (!r && act == _SUDO_SSS_FILTER_EXCLUDE)) { + if (( r && act == SUDO_SSS_FILTER_INCLUDE) || + (!r && act == SUDO_SSS_FILTER_EXCLUDE)) { sudo_debug_printf(SUDO_DEBUG_DEBUG, "COPY (%s): %p[%u] => %p[%u] (= %p)", - act == _SUDO_SSS_FILTER_EXCLUDE ? "not excluded" : "included", + act == SUDO_SSS_FILTER_EXCLUDE ? "not excluded" : "included", in_res->rules, i, out_res->rules, l, in_res->rules + i); - sudo_sss_rulecpy(out_res->rules + l, in_res->rules + i); + if (!sudo_sss_rulecpy(out_res->rules + l, in_res->rules + i)) { + while (l--) { + sudo_sss_rulefree(out_res->rules + l); + } + free(out_res->rules); + free(out_res); + debug_return_ptr(NULL); + } ++l; } } @@ -208,10 +272,20 @@ "reallocating result: %p (count: %u -> %u)", out_res->rules, in_res->num_rules, l); if (l > 0) { - out_res->rules = - sudo_ereallocarray(out_res->rules, l, sizeof(struct sss_sudo_rule)); + struct sss_sudo_rule *rules = + reallocarray(out_res->rules, l, sizeof(struct sss_sudo_rule)); + if (out_res->rules == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + while (l--) { + sudo_sss_rulefree(out_res->rules + l); + } + free(out_res->rules); + free(out_res); + debug_return_ptr(NULL); + } + out_res->rules = rules; } else { - sudo_efree(out_res->rules); + free(out_res->rules); out_res->rules = NULL; } } @@ -236,20 +310,28 @@ /* sudo_nss implementation */ // ok -static int sudo_sss_open(struct sudo_nss *nss) +static int +sudo_sss_open(struct sudo_nss *nss) { struct sudo_sss_handle *handle; static const char path[] = _PATH_SSSD_LIB"/libsss_sudo.so"; debug_decl(sudo_sss_open, SUDOERS_DEBUG_SSSD); /* Create a handle container. */ - handle = sudo_emalloc(sizeof(struct sudo_sss_handle)); + handle = malloc(sizeof(struct sudo_sss_handle)); + if (handle == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_int(ENOMEM); + } /* Load symbols */ handle->ssslib = sudo_dso_load(path, SUDO_DSO_LAZY); if (handle->ssslib == NULL) { - sudo_warnx(U_("unable to load %s: %s"), path, sudo_dso_strerror()); + 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?")); + free(handle); debug_return_int(EFAULT); } @@ -258,6 +340,7 @@ if (handle->fn_send_recv == NULL) { sudo_warnx(U_("unable to find symbol \"%s\" in %s"), path, "sss_sudo_send_recv"); + free(handle); debug_return_int(EFAULT); } @@ -266,6 +349,7 @@ if (handle->fn_send_recv_defaults == NULL) { sudo_warnx(U_("unable to find symbol \"%s\" in %s"), path, "sss_sudo_send_recv_defaults"); + free(handle); debug_return_int(EFAULT); } @@ -274,6 +358,7 @@ if (handle->fn_free_result == NULL) { sudo_warnx(U_("unable to find symbol \"%s\" in %s"), path, "sss_sudo_free_result"); + free(handle); debug_return_int(EFAULT); } @@ -282,6 +367,7 @@ if (handle->fn_get_values == NULL) { sudo_warnx(U_("unable to find symbol \"%s\" in %s"), path, "sss_sudo_get_values"); + free(handle); debug_return_int(EFAULT); } @@ -290,6 +376,7 @@ if (handle->fn_free_values == NULL) { sudo_warnx(U_("unable to find symbol \"%s\" in %s"), path, "sss_sudo_free_values"); + free(handle); debug_return_int(EFAULT); } @@ -303,7 +390,8 @@ } // ok -static int sudo_sss_close(struct sudo_nss *nss) +static int +sudo_sss_close(struct sudo_nss *nss) { struct sudo_sss_handle *handle; debug_decl(sudo_sss_close, SUDOERS_DEBUG_SSSD); @@ -311,23 +399,24 @@ if (nss && nss->handle) { handle = nss->handle; sudo_dso_unload(handle->ssslib); - sudo_efree(nss->handle); + free(nss->handle); } debug_return_int(0); } // ok -static int sudo_sss_parse(struct sudo_nss *nss) +static int +sudo_sss_parse(struct sudo_nss *nss) { debug_decl(sudo_sss_parse, SUDOERS_DEBUG_SSSD); debug_return_int(0); } -static int sudo_sss_setdefs(struct sudo_nss *nss) +static int +sudo_sss_setdefs(struct sudo_nss *nss) { struct sudo_sss_handle *handle = nss->handle; - - struct sss_sudo_result *sss_result; + struct sss_sudo_result *sss_result = NULL; struct sss_sudo_rule *sss_rule; uint32_t sss_error; unsigned int i; @@ -345,27 +434,34 @@ "handle->fn_send_recv_defaults: != 0, sss_error=%u", sss_error); debug_return_int(-1); } - - if (sss_error == ENOENT) { - sudo_debug_printf(SUDO_DEBUG_INFO, "The user was not found in SSSD."); - debug_return_int(0); - } else if(sss_error != 0) { + if (sss_error != 0) { + if (sss_error == ENOENT) { + sudo_debug_printf(SUDO_DEBUG_INFO, + "The user was not found in SSSD."); + goto done; + } sudo_debug_printf(SUDO_DEBUG_INFO, "sss_error=%u\n", sss_error); - debug_return_int(-1); + goto bad; } for (i = 0; i < sss_result->num_rules; ++i) { sudo_debug_printf(SUDO_DEBUG_DIAG, "Parsing cn=defaults, %d/%d", i, sss_result->num_rules); sss_rule = sss_result->rules + i; - sudo_sss_parse_options(handle, sss_rule); + if (!sudo_sss_parse_options(handle, sss_rule)) + goto bad; } +done: handle->fn_free_result(sss_result); debug_return_int(0); +bad: + handle->fn_free_result(sss_result); + debug_return_int(-1); } -static int sudo_sss_checkpw(struct sudo_nss *nss, struct passwd *pw) +static int +sudo_sss_checkpw(struct sudo_nss *nss, struct passwd *pw) { struct sudo_sss_handle *handle = nss->handle; debug_decl(sudo_sss_checkpw, SUDOERS_DEBUG_SSSD); @@ -448,7 +544,8 @@ switch (val[0]) { case '+': sudo_debug_printf(SUDO_DEBUG_DEBUG, "netgr_"); - if (netgr_matches(val, NULL, NULL, runas_pw->pw_name)) { + if (netgr_matches(val, def_netgroup_tuple ? user_runhost : NULL, + def_netgroup_tuple ? user_srunhost : NULL, runas_pw->pw_name)) { sudo_debug_printf(SUDO_DEBUG_DEBUG, "=> match"); ret = true; } @@ -559,8 +656,7 @@ debug_return_bool(ret); /* get the values from the rule */ - switch (handle->fn_get_values(rule, "sudoHost", &val_array)) - { + switch (handle->fn_get_values(rule, "sudoHost", &val_array)) { case 0: break; case ENOENT: @@ -577,9 +673,9 @@ sudo_debug_printf(SUDO_DEBUG_DEBUG, "val[%d]=%s", i, val); /* match any or address or netgroup or hostname */ - if (!strcmp(val, "ALL") || addr_matches(val) || - netgr_matches(val, user_host, user_shost, NULL) || - hostname_matches(user_shost, user_host, val)) + if (!strcmp(val, "ALL") || addr_matches(val) || netgr_matches(val, + user_runhost, user_srunhost, handle->pw->pw_name) || + hostname_matches(user_srunhost, user_runhost, val)) ret = true; sudo_debug_printf(SUDO_DEBUG_INFO, @@ -628,7 +724,9 @@ netgroup_spec_found = true; } sudo_debug_printf(SUDO_DEBUG_DEBUG, "val[%d]=%s", i, val); - if (strcmp(val, "ALL") == 0 || netgr_matches(val, NULL, NULL, handle->pw->pw_name)) { + if (strcmp(val, "ALL") == 0 || netgr_matches(val, + def_netgroup_tuple ? user_runhost : NULL, + def_netgroup_tuple ? user_srunhost : NULL, handle->pw->pw_name)) { ret = true; sudo_debug_printf(SUDO_DEBUG_DIAG, "sssd/ldap sudoUser '%s' ... MATCH! (%s)", @@ -681,7 +779,7 @@ if (u_sss_result != NULL) { if (state != NULL) { sudo_debug_printf(SUDO_DEBUG_DEBUG, "state |= USERMATCH"); - *state |= _SUDO_SSS_STATE_USERMATCH; + *state |= SUDO_SSS_STATE_USERMATCH; } sudo_debug_printf(SUDO_DEBUG_INFO, "Received %u rule(s)", u_sss_result->num_rules); @@ -693,6 +791,7 @@ break; case ENOENT: sudo_debug_printf(SUDO_DEBUG_INFO, "The user was not found in SSSD."); + debug_return_ptr(NULL); default: sudo_debug_printf(SUDO_DEBUG_INFO, "sss_error=%u\n", sss_error); debug_return_ptr(NULL); @@ -705,13 +804,13 @@ } f_sss_result = sudo_sss_filter_result(handle, u_sss_result, - sudo_sss_result_filterp, _SUDO_SSS_FILTER_INCLUDE, NULL); + sudo_sss_result_filterp, SUDO_SSS_FILTER_INCLUDE, NULL); if (f_sss_result != NULL) { if (f_sss_result->num_rules > 0) { if (state != NULL) { sudo_debug_printf(SUDO_DEBUG_DEBUG, "state |= HOSTMATCH"); - *state |= _SUDO_SSS_STATE_HOSTMATCH; + *state |= SUDO_SSS_STATE_HOSTMATCH; } } sudo_debug_printf(SUDO_DEBUG_DEBUG, @@ -816,7 +915,11 @@ ep++; if (*ep != '\0') { digest->digest_type = digest_type; - digest->digest_str = sudo_estrndup(cp, (size_t)(ep - cp)); + digest->digest_str = strndup(cp, (size_t)(ep - cp)); + if (digest->digest_str == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_ptr(NULL); + } cp = ep + 1; while (isblank((unsigned char)*cp)) cp++; @@ -886,10 +989,10 @@ /* check for !command */ if (*val == '!') { foundbang = true; - allowed_cmnd = sudo_estrdup(1 + val); /* !command */ + allowed_cmnd = val + 1; /* !command */ } else { foundbang = false; - allowed_cmnd = sudo_estrdup(val); /* command */ + allowed_cmnd = val; /* command */ } /* split optional args away from command */ @@ -905,12 +1008,13 @@ */ ret = foundbang ? false : true; } + if (allowed_args != NULL) + allowed_args[-1] = ' '; /* restore val */ sudo_debug_printf(SUDO_DEBUG_INFO, "sssd/ldap sudoCommand '%s' ... %s", val, ret == true ? "MATCH!" : "not"); - sudo_efree(allowed_cmnd); /* cleanup */ if (allowed_digest != NULL) - sudo_efree(allowed_digest->digest_str); + free(allowed_digest->digest_str); } handle->fn_free_values(val_array); /* more cleanup */ @@ -918,59 +1022,84 @@ debug_return_int(ret); } -static void +static bool sudo_sss_parse_options(struct sudo_sss_handle *handle, struct sss_sudo_rule *rule) { - int i; - char op, *v, *val; + int i, op; + bool ret = false; + char *copy, *cp, *v; char **val_array = NULL; debug_decl(sudo_sss_parse_options, SUDOERS_DEBUG_SSSD); if (rule == NULL) - debug_return; + debug_return_bool(true); switch (handle->fn_get_values(rule, "sudoOption", &val_array)) { case 0: break; case ENOENT: sudo_debug_printf(SUDO_DEBUG_INFO, "No result."); - debug_return; + debug_return_bool(true); default: sudo_debug_printf(SUDO_DEBUG_INFO, "handle->fn_get_values(sudoOption): != 0"); - debug_return; + debug_return_bool(false); } /* walk through options */ for (i = 0; val_array[i] != NULL; i++) { sudo_debug_printf(SUDO_DEBUG_INFO, "sssd/ldap sudoOption: '%s'", val_array[i]); - v = sudo_estrdup(val_array[i]); + if ((v = copy = strdup(val_array[i])) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto done; + } /* check for equals sign past first char */ - val = strchr(v, '='); - if (val > v) { - *val++ = '\0'; /* split on = and truncate var */ - op = *(val - 2); /* peek for += or -= cases */ + cp = strchr(v, '='); + if (cp > v) { + char *val = cp + 1; + op = cp[-1]; /* peek for += or -= cases */ if (op == '+' || op == '-') { - *(val - 2) = '\0'; /* found, remove extra char */ /* case var+=val or var-=val */ - set_default(v, val, (int) op); + cp--; } else { /* case var=val */ - set_default(v, val, true); + op = true; + } + /* Trim whitespace between var and operator. */ + while (cp > v && isblank((unsigned char)cp[-1])) + cp--; + /* Truncate variable name. */ + *cp = '\0'; + /* Trim leading whitespace from val. */ + while (isblank((unsigned char)*val)) + val++; + /* Strip double quotes if present. */ + if (*val == '"') { + char *ep = val + strlen(val); + if (ep != val && ep[-1] == '"') { + val++; + ep[-1] = '\0'; + } } + set_default(v, val, op); } else if (*v == '!') { /* case !var Boolean False */ - set_default(v + 1, NULL, false); + do { + v++; + } while (isblank((unsigned char)*v)); + set_default(v, NULL, false); } else { /* case var Boolean True */ set_default(v, NULL, true); } - sudo_efree(v); + free(copy); } + ret = true; +done: handle->fn_free_values(val_array); - debug_return; + debug_return_bool(ret); } static int @@ -1002,19 +1131,19 @@ for (i = 0; i < sss_result->num_rules; i++) { rule = sss_result->rules + i; if ((pwcheck == any && doauth != false) || - (pwcheck == all && doauth == false)) { - doauth = sudo_sss_check_bool(handle, rule, "authenticate"); + (pwcheck == all && doauth != true)) { + doauth = !!sudo_sss_check_bool(handle, rule, "authenticate"); } /* Only check the command when listing another user. */ if (user_uid == 0 || list_pw == NULL || user_uid == list_pw->pw_uid || - sudo_sss_check_command(handle, rule, NULL)) { + sudo_sss_check_command(handle, rule, NULL) == true) { matched = true; break; } } } - if (matched || user_uid == 0) { + if (matched == true || user_uid == 0) { SET(ret, VALIDATE_SUCCESS); CLR(ret, VALIDATE_FAILURE); if (def_authenticate) { @@ -1057,16 +1186,19 @@ /* Apply entry-specific options. */ if (setenv_implied) def_setenv = true; - sudo_sss_parse_options(handle, rule); + if (sudo_sss_parse_options(handle, rule)) { #ifdef HAVE_SELINUX - /* Set role and type if not specified on command line. */ - if (user_role == NULL) - user_role = def_role; - if (user_type == NULL) - user_type = def_type; + /* Set role/type if not specified on command line. */ + if (user_role == NULL) + user_role = def_role; + if (user_type == NULL) + user_type = def_type; #endif /* HAVE_SELINUX */ - SET(ret, VALIDATE_SUCCESS); - CLR(ret, VALIDATE_FAILURE); + SET(ret, VALIDATE_SUCCESS); + CLR(ret, VALIDATE_FAILURE); + } else { + SET(ret, VALIDATE_ERROR); + } } else { SET(ret, VALIDATE_FAILURE); CLR(ret, VALIDATE_SUCCESS); @@ -1084,13 +1216,13 @@ SET(ret, FLAG_NO_CHECK); } - if (state & _SUDO_SSS_STATE_USERMATCH) + if (pwflag || ISSET(state, SUDO_SSS_STATE_USERMATCH)) CLR(ret, FLAG_NO_USER); - if (state & _SUDO_SSS_STATE_HOSTMATCH) + if (pwflag || ISSET(state, SUDO_SSS_STATE_HOSTMATCH)) CLR(ret, FLAG_NO_HOST); sudo_debug_printf(SUDO_DEBUG_DEBUG, "sudo_sss_lookup(%d)=0x%02x", - pwflag, ret); + pwflag, ret); debug_return_int(ret); } @@ -1106,8 +1238,7 @@ debug_decl(sudo_sss_display_cmnd, SUDOERS_DEBUG_SSSD); if (handle == NULL) - goto done; - + debug_return_int(-1); if (sudo_sss_checkpw(nss, pw) != 0) debug_return_int(-1); @@ -1135,8 +1266,7 @@ printf("%s%s%s\n", safe_cmnd ? safe_cmnd : user_cmnd, user_args ? " " : "", user_args ? user_args : ""); - if (sss_result != NULL) - handle->fn_free_result(sss_result); + handle->fn_free_result(sss_result); debug_return_int(!found); } @@ -1206,6 +1336,8 @@ handle->fn_free_result(sss_result); done: + if (sudo_lbuf_error(lbuf)) + debug_return_int(-1); debug_return_int(count); } @@ -1382,13 +1514,16 @@ cp++; if (strcmp(cp, "authenticate") == 0) sudo_lbuf_append(lbuf, val_array[i][0] == '!' ? - "NOPASSWD: " : "PASSWD: "); + "NOPASSWD: " : "PASSWD: "); else if (strcmp(cp, "noexec") == 0) sudo_lbuf_append(lbuf, val_array[i][0] == '!' ? - "EXEC: " : "NOEXEC: "); + "EXEC: " : "NOEXEC: "); else if (strcmp(cp, "setenv") == 0) sudo_lbuf_append(lbuf, val_array[i][0] == '!' ? - "NOSETENV: " : "SETENV: "); + "NOSETENV: " : "SETENV: "); + else if (strcmp(cp, "mail_all_cmnds") == 0 || strcmp(cp, "mail_always") == 0) + sudo_lbuf_append(lbuf, val_array[i][0] == '!' ? + "NOMAIL: " : "MAIL: "); } handle->fn_free_values(val_array); break; @@ -1428,7 +1563,6 @@ struct sudo_lbuf *lbuf) { struct sudo_sss_handle *handle = nss->handle; - struct sss_sudo_result *sss_result = NULL; struct sss_sudo_rule *rule; unsigned int i, count = 0; @@ -1455,8 +1589,11 @@ count += sudo_sss_display_entry_short(handle, rule, lbuf); } - if (sss_result != NULL) - handle->fn_free_result(sss_result); + handle->fn_free_result(sss_result); + if (sudo_lbuf_error(lbuf)) + debug_return_int(-1); debug_return_int(count); } + +#endif /* HAVE_SSSD */ diff -Nru sudo-1.8.12/plugins/sudoers/sudoers2ldif sudo-1.8.16/plugins/sudoers/sudoers2ldif --- sudo-1.8.12/plugins/sudoers/sudoers2ldif 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/sudoers2ldif 2016-03-17 16:13:10.000000000 +0000 @@ -15,6 +15,7 @@ # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # +use warnings; use strict; # @@ -27,11 +28,10 @@ # Does not yet remove quotation marks from options # Does not yet escape + at the beginning of a dn # Does not yet handle line wraps correctly -# Does not yet handle multiple roles with same name (needs tiebreaker) # # CAVEATS: # Sudoers entries can have multiple RunAs entries that override former ones, -# with LDAP sudoRunAs{Group,User} applies to all commands in a sudoRole +# with LDAP sudoRunAs{Group,User} applies to all commands in a sudoRole my %RA; my %UA; @@ -42,6 +42,7 @@ my $did_defaults=0; my $order = 0; +my %seen_users; # parse sudoers one line at a time while (<>){ @@ -58,12 +59,12 @@ # ignore blank lines next if /^\s*$/; - if (/^Defaults\s+/i) { - my $opt=$'; - $opt=~s/\s+$//; # remove trailing whitespace - push @options,$opt; + if (s/^Defaults\s+//) { + s/\s+$//; # remove trailing whitespace + # remove spaces between '!', '=', '+=' and '-=' + s/^(\S+)\s*([\+-]?=)\s*(\S.*)$/$1$2$3/ unless s/^!\s*(\S.*)$/!$1/; + push @options, $_; } elsif (/^(\S+)\s+([^=]+)=\s*(.*)/) { - # Aliases or Definitions my ($p1,$p2,$p3)=($1,$2,$3); $p2=~s/\s+$//; # remove trailing whitespace @@ -91,37 +92,42 @@ } # Definition my @users=split /\s*,\s*/,$p1; + my $username = $users[0]; + if ($seen_users{$username}) { + $seen_users{$username} += 1; + $username = sprintf("%s_%s", $username, $seen_users{$username}); + } else { + $seen_users{$username} = 1; + } my @hosts=split /\s*,\s*/,$p2; my @cmds= split /\s*,\s*/,$p3; @options=(); - print "dn: cn=$users[0],$base\n"; + print "dn: cn=$username,$base\n"; print "objectClass: top\n"; print "objectClass: sudoRole\n"; - print "cn: $users[0]\n"; + print "cn: $username\n"; # will clobber options print "sudoUser: $_\n" foreach expand(\%UA,@users); print "sudoHost: $_\n" foreach expand(\%HA,@hosts); foreach (@cmds) { - if (s/^\(([^\)]+)\)\s*//) { - my @runas = split(/:\s*/, $1); - if (defined($runas[0])) { - print "sudoRunAsUser: $_\n" foreach expand(\%RA, split(/,\s*/, $runas[0])); - } - if (defined($runas[1])) { - print "sudoRunAsGroup: $_\n" foreach expand(\%RA, split(/,\s*/, $runas[1])); - } - } + if (s/^\(([^\)]+)\)\s*//) { + my @runas = split(/:\s*/, $1); + if (defined($runas[0])) { + print "sudoRunAsUser: $_\n" foreach expand(\%RA, split(/,\s*/, $runas[0])); + } + if (defined($runas[1])) { + print "sudoRunAsGroup: $_\n" foreach expand(\%RA, split(/,\s*/, $runas[1])); + } + } } print "sudoCommand: $_\n" foreach expand(\%CA,@cmds); print "sudoOption: $_\n" foreach @options; printf "sudoOrder: %d\n", ++$order; print "\n"; } - } else { print "parse error: $_\n"; } - } # @@ -151,5 +157,3 @@ push @a,$ref->{$_} ? expand($ref,split /\s*,\s*/,$ref->{$_}):$_ foreach @_; @a; } - - diff -Nru sudo-1.8.12/plugins/sudoers/sudoers.c sudo-1.8.16/plugins/sudoers/sudoers.c --- sudo-1.8.12/plugins/sudoers/sudoers.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/sudoers.c 2016-03-17 16:13:11.000000000 +0000 @@ -18,8 +18,6 @@ * Materiel Command, USAF, under agreement number F39502-99-1-0512. */ -#define _SUDO_MAIN - #ifdef __TANDEM # include #endif @@ -27,29 +25,18 @@ #include #include +#include #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include #include @@ -85,9 +72,9 @@ static bool cb_runas_default(const char *); static bool cb_sudoers_locale(const char *); static int set_cmnd(void); -static void create_admin_success_flag(void); +static int create_admin_success_flag(void); static bool init_vars(char * const *); -static void set_fqdn(void); +static bool set_fqdn(void); static bool set_loginclass(struct passwd *); static bool set_runasgr(const char *, bool); static bool set_runaspw(const char *, bool); @@ -110,46 +97,96 @@ static char *runas_group; static struct sudo_nss_list *snl; +#ifdef __linux__ +static struct rlimit nproclimit; +#endif + /* XXX - must be extern for audit bits of sudo_auth.c */ int NewArgc; char **NewArgv; +/* + * Unlimit the number of processes since Linux's setuid() will + * apply resource limits when changing uid and return EAGAIN if + * nproc would be exceeded by the uid switch. + */ +static void +unlimit_nproc(void) +{ +#ifdef __linux__ + struct rlimit rl; + debug_decl(unlimit_nproc, SUDOERS_DEBUG_UTIL) + + if (getrlimit(RLIMIT_NPROC, &nproclimit) != 0) + sudo_warn("getrlimit"); + rl.rlim_cur = rl.rlim_max = RLIM_INFINITY; + if (setrlimit(RLIMIT_NPROC, &rl) != 0) { + rl.rlim_cur = rl.rlim_max = nproclimit.rlim_max; + if (setrlimit(RLIMIT_NPROC, &rl) != 0) + sudo_warn("setrlimit"); + } + debug_return; +#endif /* __linux__ */ +} + +/* + * Restore saved value of RLIMIT_NPROC. + */ +static void +restore_nproc(void) +{ +#ifdef __linux__ + debug_decl(restore_nproc, SUDOERS_DEBUG_UTIL) + + if (setrlimit(RLIMIT_NPROC, &nproclimit) != 0) + sudo_warn("setrlimit"); + + debug_return; +#endif /* __linux__ */ +} + int sudoers_policy_init(void *info, char * const envp[]) { - volatile int sources = 0; struct sudo_nss *nss, *nss_next; + int sources = 0; int rval = -1; debug_decl(sudoers_policy_init, SUDOERS_DEBUG_PLUGIN) bindtextdomain("sudoers", LOCALEDIR); - sudo_setpwent(); - sudo_setgrent(); + if (sudo_setpwent() == -1 || sudo_setgrent() == -1) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_int(-1); + } /* Register fatal/fatalx callback. */ sudo_fatal_callback_register(sudoers_cleanup); /* Initialize environment functions (including replacements). */ - env_init(envp); + if (!env_init(envp)) + debug_return_int(-1); /* Setup defaults data structures. */ - init_defaults(); + if (!init_defaults()) { + sudo_warnx(U_("unable to initialize sudoers default values")); + debug_return_int(-1); + } /* Parse info from front-end. */ sudo_mode = sudoers_policy_deserialize_info(info, &runas_user, &runas_group); if (ISSET(sudo_mode, MODE_ERROR)) - debug_return_bool(-1); + debug_return_int(-1); if (!init_vars(envp)) - debug_return_bool(-1); + debug_return_int(-1); /* Parse nsswitch.conf for sudoers order. */ snl = sudo_read_nss(); /* LDAP or NSS may modify the euid so we need to be root for the open. */ if (!set_perms(PERM_ROOT)) - debug_return_bool(-1); + debug_return_int(-1); /* Open and parse sudoers, set global defaults */ TAILQ_FOREACH_SAFE(nss, snl, entries, nss_next) { @@ -213,7 +250,7 @@ if (!restore_perms()) rval = -1; - debug_return_bool(rval); + debug_return_int(rval); } int @@ -225,9 +262,13 @@ mode_t cmnd_umask = 0777; struct sudo_nss *nss; int cmnd_status = -1, oldlocale, validated; - volatile int rval = true; + int rval = -1; debug_decl(sudoers_policy_main, SUDOERS_DEBUG_PLUGIN) + sudo_warn_set_locale_func(sudoers_warn_setlocale); + + unlimit_nproc(); + /* Is root even allowed to run sudo? */ if (user_uid == 0 && !def_root_sudo) { /* Not an audit event. */ @@ -248,17 +289,31 @@ */ if (argc == 0) { NewArgc = 1; - NewArgv = sudo_emallocarray(NewArgc + 1, sizeof(char *)); + NewArgv = reallocarray(NULL, NewArgc + 1, sizeof(char *)); + if (NewArgv == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto done; + } NewArgv[0] = user_cmnd; NewArgv[1] = NULL; } else { /* Must leave an extra slot before NewArgv for bash's --login */ NewArgc = argc; - NewArgv = sudo_emallocarray(NewArgc + 2, sizeof(char *)); + NewArgv = reallocarray(NULL, NewArgc + 2, sizeof(char *)); + if (NewArgv == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto done; + } memcpy(++NewArgv, argv, argc * sizeof(char *)); NewArgv[NewArgc] = NULL; - if (ISSET(sudo_mode, MODE_LOGIN_SHELL) && runas_pw != NULL) - NewArgv[0] = sudo_estrdup(runas_pw->pw_shell); + if (ISSET(sudo_mode, MODE_LOGIN_SHELL) && runas_pw != NULL) { + NewArgv[0] = strdup(runas_pw->pw_shell); + if (NewArgv[0] == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + free(NewArgv); + goto done; + } + } } /* If given the -P option, set the "preserve_groups" flag. */ @@ -267,10 +322,8 @@ /* Find command in path and apply per-command Defaults. */ cmnd_status = set_cmnd(); - if (cmnd_status == NOT_FOUND_ERROR) { - rval = -1; + if (cmnd_status == NOT_FOUND_ERROR) goto done; - } /* Check for -C overriding def_closefrom. */ if (user_closefrom >= 0 && user_closefrom != def_closefrom) { @@ -290,7 +343,10 @@ TAILQ_FOREACH(nss, snl, entries) { validated = nss->lookup(nss, validated, pwflag); - if (ISSET(validated, VALIDATE_SUCCESS)) { + if (ISSET(validated, VALIDATE_ERROR)) { + /* The lookup function should have printed an error. */ + goto done; + } else if (ISSET(validated, VALIDATE_SUCCESS)) { /* Handle [SUCCESS=return] */ if (nss->ret_if_found) break; @@ -304,13 +360,16 @@ /* Restore user's locale. */ sudoers_setlocale(oldlocale, NULL); - if (safe_cmnd == NULL) - safe_cmnd = sudo_estrdup(user_cmnd); + if (safe_cmnd == NULL) { + if ((safe_cmnd = strdup(user_cmnd)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto done; + } + } /* If only a group was specified, set runas_pw based on invoking user. */ if (runas_pw == NULL) { if (!set_runaspw(user_name, false)) { - rval = -1; goto done; } } @@ -369,8 +428,10 @@ rval = check_user(validated, sudo_mode); if (rval != true) { /* Note: log_denial() calls audit for us. */ - if (!ISSET(validated, VALIDATE_SUCCESS)) - log_denial(validated, false); + if (!ISSET(validated, VALIDATE_SUCCESS)) { + if (!log_denial(validated, false)) + rval = -1; + } goto done; } @@ -391,12 +452,14 @@ /* If the user was not allowed to run the command we are done. */ if (!ISSET(validated, VALIDATE_SUCCESS)) { /* Note: log_failure() calls audit for us. */ - log_failure(validated, cmnd_status); + if (!log_failure(validated, cmnd_status)) + goto done; goto bad; } /* Create Ubuntu-style dot file to indicate sudo was successful. */ - create_admin_success_flag(); + if (create_admin_success_flag() == -1) + goto done; /* Finally tell the user if the command did not exist. */ if (cmnd_status == NOT_FOUND_DOT) { @@ -433,15 +496,35 @@ const char prefix[] = "iolog_path="; iolog_path = expand_iolog_path(prefix, def_iolog_dir, def_iolog_file, &sudo_user.iolog_file); + if (iolog_path == NULL) + goto done; sudo_user.iolog_file++; } } - log_allowed(validated); - if (ISSET(sudo_mode, MODE_CHECK)) - rval = display_cmnd(snl, list_pw ? list_pw : sudo_user.pw); - else if (ISSET(sudo_mode, MODE_LIST)) - display_privs(snl, list_pw ? list_pw : sudo_user.pw); /* XXX - return val */ + if (!log_allowed(validated)) + goto bad; + + switch (sudo_mode & MODE_MASK) { + case MODE_CHECK: + rval = display_cmnd(snl, list_pw ? list_pw : sudo_user.pw); + break; + case MODE_LIST: + rval = display_privs(snl, list_pw ? list_pw : sudo_user.pw); + break; + case MODE_VALIDATE: + /* Nothing to do. */ + rval = true; + break; + case MODE_RUN: + case MODE_EDIT: + /* rval set by sudoers_policy_exec_setup() below. */ + break; + default: + /* Should not happen. */ + sudo_warnx("internal error, unexpected sudo mode 0x%x", sudo_mode); + goto done; + } /* Cleanup sudoers sources */ TAILQ_FOREACH(nss, snl, entries) { @@ -515,19 +598,28 @@ /* Insert user-specified environment variables. */ if (!insert_env_vars(sudo_user.env_vars)) - goto bad; + goto done; /* Note: must call audit before uid change. */ if (ISSET(sudo_mode, MODE_EDIT)) { int edit_argc; - sudo_efree(safe_cmnd); - safe_cmnd = find_editor(NewArgc - 1, NewArgv + 1, &edit_argc, &edit_argv); - if (safe_cmnd == NULL || audit_success(edit_argc, edit_argv) != 0) + free(safe_cmnd); + safe_cmnd = find_editor(NewArgc - 1, NewArgv + 1, &edit_argc, + &edit_argv); + if (safe_cmnd == NULL) { + if (errno != ENOENT) + goto done; goto bad; + } + if (audit_success(edit_argc, edit_argv) != 0) + goto done; + + /* We want to run the editor with the unmodified environment. */ + env_swap_old(); } else { if (audit_success(NewArgc, NewArgv) != 0) - goto bad; + goto done; } /* Setup execution environment to pass back to front-end. */ @@ -535,7 +627,7 @@ env_get(), cmnd_umask, iolog_path, closure); /* Zero out stashed copy of environment, it is owned by the front-end. */ - env_init(NULL); + (void)env_init(NULL); goto done; @@ -546,11 +638,15 @@ if (!rewind_perms()) rval = -1; + restore_nproc(); + /* Close the password and group files and free up memory. */ sudo_endpwent(); sudo_endgrent(); - debug_return_bool(rval); + sudo_warn_set_locale_func(NULL); + + debug_return_int(rval); } /* @@ -563,7 +659,10 @@ bool unknown_user = false; debug_decl(init_vars, SUDOERS_DEBUG_PLUGIN) - sudoers_initlocale(setlocale(LC_ALL, NULL), def_sudoers_locale); + if (!sudoers_initlocale(setlocale(LC_ALL, NULL), def_sudoers_locale)) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_bool(false); + } for (ep = envp; *ep; ep++) { /* XXX - don't fill in if empty string */ @@ -645,7 +744,11 @@ debug_decl(set_cmnd, SUDOERS_DEBUG_PLUGIN) /* Allocate user_stat for find_path() and match functions. */ - user_stat = sudo_ecalloc(1, sizeof(struct stat)); + user_stat = calloc(1, sizeof(struct stat)); + if (user_stat == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_int(NOT_FOUND_ERROR); + } /* Default value for cmnd, overridden below. */ if (user_cmnd == NULL) @@ -658,7 +761,7 @@ if (!set_perms(PERM_RUNAS)) debug_return_int(-1); rval = find_path(NewArgv[0], &user_cmnd, user_stat, path, - def_ignore_dot); + def_ignore_dot, NULL); if (!restore_perms()) debug_return_int(-1); if (rval == NOT_FOUND) { @@ -666,7 +769,7 @@ if (!set_perms(PERM_USER)) debug_return_int(-1); rval = find_path(NewArgv[0], &user_cmnd, user_stat, path, - def_ignore_dot); + def_ignore_dot, NULL); if (!restore_perms()) debug_return_int(-1); } @@ -686,7 +789,10 @@ /* Alloc and build up user_args. */ for (size = 0, av = NewArgv + 1; *av; av++) size += strlen(*av) + 1; - user_args = sudo_emalloc(size); + if (size == 0 || (user_args = malloc(size)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_int(-1); + } if (ISSET(sudo_mode, MODE_SHELL|MODE_LOGIN_SHELL)) { /* * When running a command via a shell, the sudo front-end @@ -865,71 +971,104 @@ #endif /* + * Look up the fully qualified domain name of host. + * Use AI_FQDN if available since "canonical" is not always the same as fqdn. + * Returns true on success, setting longp and shortp. + * Returns false on failure, longp and shortp are unchanged. + */ +static bool +resolve_host(const char *host, char **longp, char **shortp) +{ + struct addrinfo *res0, hint; + char *cp, *lname, *sname; + debug_decl(resolve_host, SUDOERS_DEBUG_PLUGIN) + + memset(&hint, 0, sizeof(hint)); + hint.ai_family = PF_UNSPEC; + hint.ai_flags = AI_FQDN; + + if (getaddrinfo(host, NULL, &hint, &res0) != 0) + debug_return_bool(false); + if ((lname = strdup(res0->ai_canonname)) == NULL) { + freeaddrinfo(res0); + debug_return_bool(false); + } + if ((cp = strchr(lname, '.')) != NULL) { + sname = strndup(lname, (size_t)(cp - lname)); + if (sname == NULL) { + free(lname); + freeaddrinfo(res0); + debug_return_bool(false); + } + } else { + sname = lname; + } + freeaddrinfo(res0); + *longp = lname; + *shortp = sname; + + debug_return_bool(true); +} + +/* * Look up the fully qualified domain name of user_host and user_runhost. * Sets user_host, user_shost, user_runhost and user_srunhost. - * Use AI_FQDN if available since "canonical" is not always the same as fqdn. */ -static void +static bool set_fqdn(void) { - struct addrinfo *res0, hint; bool remote; - char *p; + char *lhost, *shost; debug_decl(set_fqdn, SUDOERS_DEBUG_PLUGIN) /* If the -h flag was given we need to resolve both host and runhost. */ remote = strcmp(user_runhost, user_host) != 0; - memset(&hint, 0, sizeof(hint)); - hint.ai_family = PF_UNSPEC; - hint.ai_flags = AI_FQDN; - - /* First resolve user_host, sets user_host and user_shost. */ - if (getaddrinfo(user_host, NULL, &hint, &res0) != 0) { - log_warningx(SLOG_SEND_MAIL|SLOG_RAW_MSG, - N_("unable to resolve host %s"), user_host); - } else { - if (user_shost != user_host) - sudo_efree(user_shost); - sudo_efree(user_host); - user_host = user_shost = sudo_estrdup(res0->ai_canonname); - freeaddrinfo(res0); - if ((p = strchr(user_host, '.')) != NULL) - user_shost = sudo_estrndup(user_host, (size_t)(p - user_host)); + /* First resolve user_host, setting user_host and user_shost. */ + if (!resolve_host(user_host, &lhost, &shost)) { + if (!resolve_host(user_runhost, &lhost, &shost)) { + log_warning(SLOG_SEND_MAIL|SLOG_RAW_MSG, + N_("unable to resolve host %s"), user_host); + debug_return_bool(false); + } } + if (user_shost != user_host) + free(user_shost); + free(user_host); + user_host = lhost; + user_shost = shost; - /* Next resolve user_runhost, sets user_runhost and user_srunhost. */ + /* Next resolve user_runhost, setting user_runhost and user_srunhost. */ + lhost = shost = NULL; if (remote) { - if (getaddrinfo(user_runhost, NULL, &hint, &res0) != 0) { - log_warningx(SLOG_SEND_MAIL|SLOG_RAW_MSG, - N_("unable to resolve host %s"), user_runhost); - } else { - if (user_srunhost != user_runhost) - sudo_efree(user_srunhost); - sudo_efree(user_runhost); - user_runhost = user_srunhost = sudo_estrdup(res0->ai_canonname); - freeaddrinfo(res0); - if ((p = strchr(user_runhost, '.'))) { - user_srunhost = - sudo_estrndup(user_runhost, (size_t)(p - user_runhost)); - } - } + /* Failure checked below. */ + (void)resolve_host(user_runhost, &lhost, &shost); } else { /* Not remote, just use user_host. */ - if (user_srunhost != user_runhost) - sudo_efree(user_srunhost); - sudo_efree(user_runhost); - user_runhost = user_srunhost = sudo_estrdup(user_host); - if ((p = strchr(user_runhost, '.'))) { - user_srunhost = - sudo_estrndup(user_runhost, (size_t)(p - user_runhost)); + if ((lhost = strdup(user_host)) != NULL) { + if (user_shost != user_host) + shost = strdup(lhost); + else + shost = lhost; } } + if (lhost == NULL || shost == NULL) { + free(lhost); + free(shost); + log_warning(SLOG_SEND_MAIL|SLOG_RAW_MSG, + N_("unable to resolve host %s"), user_runhost); + debug_return_bool(false); + } + if (user_srunhost != user_runhost) + free(user_srunhost); + free(user_runhost); + user_runhost = lhost; + user_srunhost = shost; sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "host %s, shost %s, runhost %s, srunhost %s", user_host, user_shost, user_runhost, user_srunhost); - debug_return; + debug_return_bool(true); } /* @@ -947,7 +1086,7 @@ uid_t uid = sudo_strtoid(user + 1, NULL, NULL, &errstr); if (errstr == NULL) { if ((pw = sudo_getpwuid(uid)) == NULL) - pw = sudo_fakepwnam(user, runas_gr ? runas_gr->gr_gid : 0); + pw = sudo_fakepwnam(user, user_gid); } } if (pw == NULL) { @@ -1012,8 +1151,7 @@ static bool cb_sudoers_locale(const char *locale) { - sudoers_initlocale(NULL, locale); - return true; + return sudoers_initlocale(NULL, locale); } /* @@ -1038,66 +1176,18 @@ debug_return; } -static char * -resolve_editor(const char *ed, size_t edlen, int nfiles, char **files, int *argc_out, char ***argv_out) -{ - char *cp, **nargv, *editor, *editor_path = NULL; - int ac, i, nargc; - bool wasblank; - debug_decl(resolve_editor, SUDOERS_DEBUG_PLUGIN) - - /* Note: editor becomes part of argv_out and is not freed. */ - editor = sudo_emalloc(edlen + 1); - memcpy(editor, ed, edlen); - editor[edlen] = '\0'; - - /* - * Split editor into an argument vector; editor is reused (do not free). - * The EDITOR and VISUAL environment variables may contain command - * line args so look for those and alloc space for them too. - */ - nargc = 1; - for (wasblank = false, cp = editor; *cp != '\0'; cp++) { - if (isblank((unsigned char) *cp)) - wasblank = true; - else if (wasblank) { - wasblank = false; - nargc++; - } - } - /* If we can't find the editor in the user's PATH, give up. */ - cp = strtok(editor, " \t"); - if (cp == NULL || - find_path(cp, &editor_path, NULL, getenv("PATH"), 0) != FOUND) { - sudo_efree(editor); - debug_return_str(NULL); - } - nargv = (char **) sudo_emallocarray(nargc + 1 + nfiles + 1, sizeof(char *)); - for (ac = 0; cp != NULL && ac < nargc; ac++) { - nargv[ac] = cp; - cp = strtok(NULL, " \t"); - } - nargv[ac++] = "--"; - for (i = 0; i < nfiles; ) - nargv[ac++] = files[i++]; - nargv[ac] = NULL; - - *argc_out = nargc; - *argv_out = nargv; - debug_return_str(editor_path); -} - /* * Determine which editor to use. We don't need to worry about restricting * this to a "safe" editor since it runs with the uid of the invoking user, * not the runas (privileged) user. + * Returns a fully-qualified path to the editor on success and fills + * in argc_out and argv_out accordingly. Returns NULL on failure. */ static char * find_editor(int nfiles, char **files, int *argc_out, char ***argv_out) { - const char *cp, *ep, *editor; + const char *cp, *ep, *editor = NULL; char *editor_path = NULL, **ev, *ev0[4]; - size_t len; debug_decl(find_editor, SUDOERS_DEBUG_PLUGIN) /* @@ -1109,63 +1199,70 @@ ev0[3] = NULL; for (ev = ev0; editor_path == NULL && *ev != NULL; ev++) { if ((editor = getenv(*ev)) != NULL && *editor != '\0') { - editor_path = resolve_editor(editor, strlen(editor), nfiles, - files, argc_out, argv_out); + editor_path = resolve_editor(editor, strlen(editor), + nfiles, files, argc_out, argv_out, NULL); + if (editor_path != NULL) + break; + if (errno != ENOENT) + debug_return_str(NULL); } } if (editor_path == NULL) { /* def_editor could be a path, split it up, avoiding strtok() */ - cp = editor = def_editor; - do { - if ((ep = strchr(cp, ':')) != NULL) - len = ep - cp; - else - len = strlen(cp); - editor_path = resolve_editor(cp, len, nfiles, files, argc_out, argv_out); - cp = ep + 1; - } while (ep != NULL && editor_path == NULL); + const char *def_editor_end = def_editor + strlen(def_editor); + for (cp = sudo_strsplit(def_editor, def_editor_end, ":", &ep); + cp != NULL; cp = sudo_strsplit(NULL, def_editor_end, ":", &ep)) { + editor_path = resolve_editor(cp, (size_t)(ep - cp), nfiles, + files, argc_out, argv_out, NULL); + if (editor_path == NULL && errno != ENOENT) + debug_return_str(NULL); + } } if (!editor_path) { - audit_failure(NewArgc, NewArgv, N_("%s: command not found"), editor); - sudo_warnx(U_("%s: command not found"), editor); + audit_failure(NewArgc, NewArgv, N_("%s: command not found"), + editor ? editor : def_editor); + sudo_warnx(U_("%s: command not found"), editor ? editor : def_editor); } debug_return_str(editor_path); } #ifdef USE_ADMIN_FLAG -static void +static int create_admin_success_flag(void) { struct stat statbuf; char flagfile[PATH_MAX]; - int fd, n; + int len, fd = -1; debug_decl(create_admin_success_flag, SUDOERS_DEBUG_PLUGIN) /* Check whether the user is in the admin group. */ if (!user_in_group(sudo_user.pw, "admin")) - debug_return; + debug_return_int(true); /* Build path to flag file. */ - n = snprintf(flagfile, sizeof(flagfile), "%s/.sudo_as_admin_successful", + len = snprintf(flagfile, sizeof(flagfile), "%s/.sudo_as_admin_successful", user_dir); - if (n <= 0 || (size_t)n >= sizeof(flagfile)) - debug_return; + if (len <= 0 || (size_t)len >= sizeof(flagfile)) + debug_return_int(false); /* Create admin flag file if it doesn't already exist. */ if (set_perms(PERM_USER)) { if (stat(flagfile, &statbuf) != 0) { fd = open(flagfile, O_CREAT|O_WRONLY|O_EXCL, 0644); - close(fd); + if (fd != -1) + close(fd); } - (void) restore_perms(); + if (!restore_perms()) + debug_return_int(-1); } - debug_return; + debug_return_int(fd != -1); } #else /* !USE_ADMIN_FLAG */ -static void +static int create_admin_success_flag(void) { /* STUB */ + return true; } #endif /* USE_ADMIN_FLAG */ diff -Nru sudo-1.8.12/plugins/sudoers/sudoers_debug.c sudo-1.8.16/plugins/sudoers/sudoers_debug.c --- sudo-1.8.12/plugins/sudoers/sudoers_debug.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/sudoers_debug.c 2015-10-31 23:34:59.000000000 +0000 @@ -18,14 +18,7 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STDBOOL_H # include #else @@ -37,9 +30,7 @@ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include "sudoers.h" @@ -77,7 +68,7 @@ * Parse the "filename flags,..." debug_flags entry and insert a new * sudo_debug_file struct into debug_files. */ -void +bool sudoers_debug_parse_flags(struct sudo_conf_debug_file_list *debug_files, const char *entry) { @@ -87,22 +78,34 @@ /* Already initialized? */ if (sudoers_debug_instance != SUDO_DEBUG_INSTANCE_INITIALIZER) - return; + return true; - /* Process new-style debug flags: filename flags,... */ + /* Only process new-style debug flags: filename flags,... */ filename = entry; if (*filename != '/' || (flags = strpbrk(filename, " \t")) == NULL) - return; + return true; namelen = (size_t)(flags - filename); while (isblank((unsigned char)*flags)) flags++; - if (*flags == '\0') - return; - - debug_file = sudo_emalloc(sizeof(*debug_file)); - debug_file->debug_file = sudo_estrndup(filename, namelen); - debug_file->debug_flags = sudo_estrdup(flags); - TAILQ_INSERT_TAIL(debug_files, debug_file, entries); + if (*flags != '\0') { + if ((debug_file = calloc(1, sizeof(*debug_file))) == NULL) + goto oom; + if ((debug_file->debug_file = strndup(filename, namelen)) == NULL) + goto oom; + if ((debug_file->debug_flags = strdup(flags)) == NULL) + goto oom; + TAILQ_INSERT_TAIL(debug_files, debug_file, entries); + } + return true; +oom: + if (debug_file != NULL) { + free(debug_file->debug_file); + free(debug_file->debug_flags); + free(debug_file); + } + sudo_warnx_nodebug(U_("%s: %s"), "sudoers_debug_parse_flags", + U_("unable to allocate memory")); + return false; } /* @@ -123,9 +126,9 @@ } TAILQ_FOREACH_SAFE(debug_file, debug_files, entries, debug_next) { TAILQ_REMOVE(debug_files, debug_file, entries); - sudo_efree(debug_file->debug_file); - sudo_efree(debug_file->debug_flags); - sudo_efree(debug_file); + free(debug_file->debug_file); + free(debug_file->debug_flags); + free(debug_file); } } } diff -Nru sudo-1.8.12/plugins/sudoers/sudoers_debug.h sudo-1.8.16/plugins/sudoers/sudoers_debug.h --- sudo-1.8.12/plugins/sudoers/sudoers_debug.h 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/sudoers_debug.h 2015-10-31 23:34:59.000000000 +0000 @@ -14,8 +14,8 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _SUDOERS_DEBUG_H -#define _SUDOERS_DEBUG_H +#ifndef SUDOERS_DEBUG_H +#define SUDOERS_DEBUG_H #include "sudo_debug.h" @@ -43,4 +43,4 @@ #define SUDOERS_DEBUG_SSSD (sudoers_subsystem_ids[16]) /* sudoers SSSD */ #define SUDOERS_DEBUG_UTIL (sudoers_subsystem_ids[17]) /* utility functions */ -#endif /* _SUDOERS_DEBUG_H */ +#endif /* SUDOERS_DEBUG_H */ diff -Nru sudo-1.8.12/plugins/sudoers/sudoers.h sudo-1.8.16/plugins/sudoers/sudoers.h --- sudo-1.8.12/plugins/sudoers/sudoers.h 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/sudoers.h 2016-03-17 16:13:11.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1993-1996, 1998-2005, 2007-2015 + * Copyright (c) 1993-1996, 1998-2005, 2007-2016 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -19,8 +19,8 @@ * Materiel Command, USAF, under agreement number F39502-99-1-0512. */ -#ifndef _SUDOERS_SUDOERS_H -#define _SUDOERS_SUDOERS_H +#ifndef SUDOERS_SUDOERS_H +#define SUDOERS_SUDOERS_H #include #ifdef HAVE_STDBOOL_H @@ -35,7 +35,6 @@ #include #include "sudo_compat.h" #include "sudo_fatal.h" -#include "sudo_alloc.h" #include "sudo_queue.h" #include "defaults.h" #include "logging.h" @@ -91,6 +90,7 @@ const char *cwd; char *iolog_file; GETGROUPS_T *gids; + int execfd; int ngids; int closefrom; int lines; @@ -113,8 +113,9 @@ * Return values for sudoers_lookup(), also used as arguments for log_auth() * Note: cannot use '0' as a value here. */ -#define VALIDATE_SUCCESS 0x001 -#define VALIDATE_FAILURE 0x002 +#define VALIDATE_ERROR 0x001 +#define VALIDATE_SUCCESS 0x002 +#define VALIDATE_FAILURE 0x004 #define FLAG_CHECK_USER 0x010 #define FLAG_NO_USER 0x020 #define FLAG_NO_HOST 0x040 @@ -130,6 +131,7 @@ #define NOT_FOUND 1 #define NOT_FOUND_DOT 2 #define NOT_FOUND_ERROR 3 +#define NOT_FOUND_PATH 4 /* * Various modes sudo can be in (based on arguments) in hex @@ -196,6 +198,7 @@ #define user_srunhost (sudo_user.srunhost) #define user_ccname (sudo_user.krb5_ccname) #define safe_cmnd (sudo_user.cmnd_safe) +#define cmnd_fd (sudo_user.execfd) #define login_class (sudo_user.class_name) #define runas_pw (sudo_user._runas_pw) #define runas_gr (sudo_user._runas_gr) @@ -223,10 +226,11 @@ #define YY_DECL int sudoerslex(void) /* goodpath.c */ -bool sudo_goodpath(const char *, struct stat *); +bool sudo_goodpath(const char *path, struct stat *sbp); /* findpath.c */ -int find_path(char *, char **, struct stat *, char *, int); +int find_path(const char *infile, char **outfile, struct stat *sbp, + const char *path, int ignore_dot, char * const *whitelist); /* check.c */ int check_user(int validate, int mode); @@ -236,12 +240,11 @@ char *expand_prompt(const char *old_prompt, const char *auth_user); /* timestamp.c */ -void remove_timestamp(bool); -bool set_lectured(void); +int timestamp_remove(bool unlinkit); /* sudo_auth.c */ bool sudo_auth_needs_end_session(void); -int verify_user(struct passwd *pw, char *prompt, int validated); +int verify_user(struct passwd *pw, char *prompt, int validated, struct sudo_conv_callback *callback); int sudo_auth_begin_session(struct passwd *pw, char **user_env[]); int sudo_auth_end_session(struct passwd *pw); int sudo_auth_init(struct passwd *pw); @@ -280,8 +283,8 @@ char *sudo_getepw(const struct passwd *); /* sudo_nss.c */ -void display_privs(struct sudo_nss_list *, struct passwd *); -bool display_cmnd(struct sudo_nss_list *, struct passwd *); +int display_privs(struct sudo_nss_list *, struct passwd *); +int display_cmnd(struct sudo_nss_list *, struct passwd *); /* pwutil.c */ __dso_public struct group *sudo_getgrgid(gid_t); @@ -303,15 +306,15 @@ void sudo_pw_addref(struct passwd *); void sudo_pw_delref(struct passwd *); int sudo_set_grlist(struct passwd *pw, char * const *groups, char * const *gids); -void sudo_setgrent(void); -void sudo_setpwent(void); +int sudo_setgrent(void); +int sudo_setpwent(void); void sudo_setspent(void); /* timestr.c */ char *get_timestr(time_t, int); /* boottime.c */ -bool get_boottime(struct timeval *); +bool get_boottime(struct timespec *); /* iolog.c */ bool io_nextid(char *iolog_dir, char *iolog_dir_fallback, char sessid[7]); @@ -324,8 +327,9 @@ /* env.c */ char **env_get(void); bool env_merge(char * const envp[]); -void env_init(char * const envp[]); -void init_envtables(void); +bool env_swap_old(void); +bool env_init(char * const envp[]); +bool init_envtables(void); bool insert_env_vars(char * const envp[]); bool read_env_file(const char *, int); bool rebuild_env(void); @@ -343,9 +347,16 @@ int sudoers_policy_init(void *info, char * const envp[]); int sudoers_policy_main(int argc, char * const argv[], int pwflag, char *env_add[], void *closure); void sudoers_cleanup(void); +extern struct sudo_user sudo_user; +extern struct passwd *list_pw; +extern int long_list; +extern int sudo_mode; +extern uid_t timestamp_uid; +extern sudo_conv_t sudo_conv; +extern sudo_printf_t sudo_printf; /* sudoers_debug.c */ -void sudoers_debug_parse_flags(struct sudo_conf_debug_file_list *debug_files, const char *entry); +bool sudoers_debug_parse_flags(struct sudo_conf_debug_file_list *debug_files, const char *entry); void sudoers_debug_register(const char *plugin_path, struct sudo_conf_debug_file_list *debug_files); void sudoers_debug_deregister(void); @@ -360,15 +371,20 @@ void group_plugin_unload(void); int group_plugin_query(const char *user, const char *group, const struct passwd *pwd); +extern const char *path_plugin_dir; -#ifndef _SUDO_MAIN -extern struct sudo_user sudo_user; -extern struct passwd *list_pw; -extern int long_list; -extern int sudo_mode; -extern uid_t timestamp_uid; -extern sudo_conv_t sudo_conv; -extern sudo_printf_t sudo_printf; -#endif +/* editor.c */ +char *resolve_editor(const char *ed, size_t edlen, int nfiles, char **files, + int *argc_out, char ***argv_out, char * const *whitelist); + +/* gc.c */ +enum sudoers_gc_types { + GC_UNKNOWN, + GC_VECTOR, + GC_PTR +}; +bool sudoers_gc_add(enum sudoers_gc_types type, void *ptr); +bool sudoers_gc_remove(enum sudoers_gc_types type, void *ptr); +void sudoers_gc_init(void); -#endif /* _SUDOERS_SUDOERS_H */ +#endif /* SUDOERS_SUDOERS_H */ diff -Nru sudo-1.8.12/plugins/sudoers/sudoers.in sudo-1.8.16/plugins/sudoers/sudoers.in --- sudo-1.8.12/plugins/sudoers/sudoers.in 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/sudoers.in 2015-10-31 23:34:59.000000000 +0000 @@ -56,6 +56,12 @@ ## this may allow users to subvert the command being run via sudo. # Defaults env_keep += "XMODIFIERS GTK_IM_MODULE QT_IM_MODULE QT_IM_SWITCHER" ## +## Uncomment to use a hard-coded PATH instead of the user's to find commands +# Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" +## +## Uncomment to send mail if the user does not enter the correct password. +# Defaults mail_badpass +## ## Uncomment to enable logging of a command's output, except for ## sudoreplay and reboot. Use sudoreplay to play back logged sessions. # Defaults log_output diff -Nru sudo-1.8.12/plugins/sudoers/sudoers_version.h sudo-1.8.16/plugins/sudoers/sudoers_version.h --- sudo-1.8.12/plugins/sudoers/sudoers_version.h 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/sudoers_version.h 2015-10-31 23:35:24.000000000 +0000 @@ -62,11 +62,13 @@ * 41 sudo 1.7.6/1.8.4, Support for relative paths in #include and #includedir * 42 sudo 1.8.6, Support for empty Runas_List (with or without a colon) to mean the invoking user. Support for Solaris Privilege Sets (PRIVS= and LIMITPRIVS=). * 43 sudo 1.8.7, Support for specifying a digest along with the command. + * 44 sudo 1.8.13, added MAIL/NOMAIL tags. + * 45 sudo 1.8.15, added FOLLOW/NOFOLLOW tags as well as sudoedit_follow and sudoedit_checkdir Defaults. */ -#ifndef _SUDOERS_VERSION_H -#define _SUDOERS_VERSION_H +#ifndef SUDOERS_VERSION_H +#define SUDOERS_VERSION_H -#define SUDOERS_GRAMMAR_VERSION 43 +#define SUDOERS_GRAMMAR_VERSION 45 -#endif /* _SUDOERS_VERSION_H */ +#endif /* SUDOERS_VERSION_H */ diff -Nru sudo-1.8.12/plugins/sudoers/sudo_nss.c sudo-1.8.16/plugins/sudoers/sudo_nss.c --- sudo-1.8.12/plugins/sudoers/sudo_nss.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/sudo_nss.c 2015-10-31 23:35:24.000000000 +0000 @@ -20,23 +20,14 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include #include @@ -69,7 +60,7 @@ sudo_read_nss(void) { FILE *fp; - char *cp, *line = NULL; + char *line = NULL; size_t linesize = 0; #ifdef HAVE_SSSD bool saw_sss = false; @@ -86,6 +77,8 @@ goto nomatch; while (sudo_parseln(&line, &linesize, NULL, fp) != -1) { + char *cp, *last; + /* Skip blank or comment lines */ if (*line == '\0') continue; @@ -95,7 +88,7 @@ continue; /* Parse line */ - for ((cp = strtok(line + 8, " \t")); cp != NULL; (cp = strtok(NULL, " \t"))) { + for ((cp = strtok_r(line + 8, " \t", &last)); cp != NULL; (cp = strtok_r(NULL, " \t", &last))) { if (strcasecmp(cp, "files") == 0 && !saw_files) { SUDO_NSS_CHECK_UNUSED(sudo_nss_file, "files"); TAILQ_INSERT_TAIL(&snl, &sudo_nss_file, entries); @@ -149,7 +142,7 @@ sudo_read_nss(void) { FILE *fp; - char *cp, *ep, *line = NULL; + char *cp, *ep, *last, *line = NULL; size_t linesize = 0; #ifdef HAVE_SSSD bool saw_sss = false; @@ -178,7 +171,7 @@ continue; /* Parse line */ - for ((cp = strtok(cp, ",")); cp != NULL; (cp = strtok(NULL, ","))) { + for ((cp = strtok_r(cp, ",", &last)); cp != NULL; (cp = strtok_r(NULL, ",", &last))) { /* Trim leading whitespace. */ while (isspace((unsigned char)*cp)) cp++; @@ -268,16 +261,17 @@ msg.msg_type = SUDO_CONV_INFO_MSG; msg.msg = buf; memset(&repl, 0, sizeof(repl)); - if (sudo_conv(1, &msg, &repl) == -1) + if (sudo_conv(1, &msg, &repl, NULL) == -1) debug_return_int(0); debug_return_int(strlen(buf)); } /* * Print out privileges for the specified user. - * We only get here if the user is allowed to run something. + * Returns true if the user is allowed to run commands, false if not + * or -1 on error. */ -void +int display_privs(struct sudo_nss_list *snl, struct passwd *pw) { struct sudo_nss *nss; @@ -297,12 +291,17 @@ pw->pw_name, user_srunhost); count = 0; TAILQ_FOREACH(nss, snl, entries) { - count += nss->display_defaults(nss, pw, &defs); + const int n = nss->display_defaults(nss, pw, &defs); + if (n == -1) + goto bad; + count += n; } - if (count) + if (count) { sudo_lbuf_append(&defs, "\n\n"); - else + } else { + /* Undo Defaults header. */ defs.len = 0; + } /* Display Runas and Cmnd-specific defaults from all sources. */ olen = defs.len; @@ -310,12 +309,17 @@ pw->pw_name); count = 0; TAILQ_FOREACH(nss, snl, entries) { - count += nss->display_bound_defaults(nss, pw, &defs); + const int n = nss->display_bound_defaults(nss, pw, &defs); + if (n == -1) + goto bad; + count += n; } - if (count) + if (count) { sudo_lbuf_append(&defs, "\n\n"); - else + } else { + /* Undo Defaults header. */ defs.len = olen; + } /* Display privileges from all sources. */ sudo_lbuf_append(&privs, @@ -323,37 +327,55 @@ pw->pw_name, user_srunhost); count = 0; TAILQ_FOREACH(nss, snl, entries) { - count += nss->display_privs(nss, pw, &privs); + const int n = nss->display_privs(nss, pw, &privs); + if (n == -1) + goto bad; + count += n; } if (count == 0) { defs.len = 0; privs.len = 0; - sudo_lbuf_append(&privs, _("User %s is not allowed to run sudo on %s.\n"), + sudo_lbuf_append(&privs, + _("User %s is not allowed to run sudo on %s.\n"), pw->pw_name, user_shost); } + if (sudo_lbuf_error(&defs) || sudo_lbuf_error(&privs)) + goto bad; + sudo_lbuf_print(&defs); sudo_lbuf_print(&privs); sudo_lbuf_destroy(&defs); sudo_lbuf_destroy(&privs); - debug_return; + debug_return_int(count > 0); +bad: + sudo_lbuf_destroy(&defs); + sudo_lbuf_destroy(&privs); + + debug_return_int(-1); } /* * Check user_cmnd against sudoers and print the matching entry if the * command is allowed. - * Returns true if the command is allowed, else false. + * Returns true if the command is allowed, false if not or -1 on error. */ -bool +int display_cmnd(struct sudo_nss_list *snl, struct passwd *pw) { struct sudo_nss *nss; debug_decl(display_cmnd, SUDOERS_DEBUG_NSS) + /* XXX - display_cmnd return value is backwards */ + /* XXX - doesn't handle commands allowed by one backend denied by another. */ TAILQ_FOREACH(nss, snl, entries) { - if (nss->display_cmnd(nss, pw) == 0) - debug_return_bool(true); + switch (nss->display_cmnd(nss, pw)) { + case 0: + debug_return_int(true); + case -1: + debug_return_int(-1); + } } - debug_return_bool(false); + debug_return_int(false); } diff -Nru sudo-1.8.12/plugins/sudoers/sudo_nss.h sudo-1.8.16/plugins/sudoers/sudo_nss.h --- sudo-1.8.12/plugins/sudoers/sudo_nss.h 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/sudo_nss.h 2015-10-31 23:34:59.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007-2011, 2013 Todd C. Miller + * Copyright (c) 2007-2011, 2013-2015 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 @@ -14,8 +14,8 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _SUDOERS_NSS_H -#define _SUDOERS_NSS_H +#ifndef SUDOERS_NSS_H +#define SUDOERS_NSS_H struct sudo_lbuf; struct passwd; @@ -40,4 +40,4 @@ struct sudo_nss_list *sudo_read_nss(void); -#endif /* _SUDOERS_NSS_H */ +#endif /* SUDOERS_NSS_H */ diff -Nru sudo-1.8.12/plugins/sudoers/sudo_printf.c sudo-1.8.16/plugins/sudoers/sudo_printf.c --- sudo-1.8.12/plugins/sudoers/sudo_printf.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/sudo_printf.c 2015-10-31 23:34:59.000000000 +0000 @@ -18,14 +18,7 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #include #include @@ -34,7 +27,7 @@ #include "sudo_debug.h" static int -_sudo_printf(int msg_type, const char *fmt, ...) +sudo_printf_int(int msg_type, const char *fmt, ...) { va_list ap; int len; @@ -59,4 +52,4 @@ return len; } -sudo_printf_t sudo_printf = _sudo_printf; +sudo_printf_t sudo_printf = sudo_printf_int; diff -Nru sudo-1.8.12/plugins/sudoers/sudoreplay.c sudo-1.8.16/plugins/sudoers/sudoreplay.c --- sudo-1.8.12/plugins/sudoers/sudoreplay.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/sudoreplay.c 2015-10-31 23:35:24.000000000 +0000 @@ -23,52 +23,22 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #ifdef TIME_WITH_SYS_TIME # include #endif -#ifndef HAVE_STRUCT_TIMESPEC -# include "compat/timespec.h" -#endif #include #include #include #include -#ifdef HAVE_DIRENT_H -# include -# define NAMLEN(dirent) strlen((dirent)->d_name) -#else -# define dirent direct -# define NAMLEN(dirent) (dirent)->d_namlen -# ifdef HAVE_SYS_NDIR_H -# include -# endif -# ifdef HAVE_SYS_DIR_H -# include -# endif -# ifdef HAVE_NDIR_H -# include -# endif -#endif +#include #ifdef HAVE_STDBOOL_H # include #else @@ -85,7 +55,6 @@ #include "sudo_gettext.h" /* must be included before sudo_compat.h */ #include "sudo_compat.h" -#include "sudo_alloc.h" #include "sudo_fatal.h" #include "logging.h" #include "iolog.h" @@ -102,10 +71,6 @@ # include "compat/getopt.h" #endif /* HAVE_GETOPT_LONG */ -#ifndef LINE_MAX -# define LINE_MAX 2048 -#endif - /* * Info present in the I/O log file */ @@ -243,7 +208,8 @@ sudo_fatal_callback_register(sudoreplay_cleanup); /* Read sudo.conf and initialize the debug subsystem. */ - sudo_conf_read(NULL, SUDO_CONF_DEBUG); + if (sudo_conf_read(NULL, SUDO_CONF_DEBUG) == -1) + exit(EXIT_FAILURE); sudo_debug_register(getprogname(), NULL, NULL, sudo_conf_debug_files(getprogname())); @@ -255,7 +221,7 @@ case 'f': /* Set the replay filter. */ def_filter = false; - for (cp = strtok(optarg, ","); cp; cp = strtok(NULL, ",")) { + for (cp = strtok_r(optarg, ",", &ep); cp; cp = strtok_r(NULL, ",", &ep)) { if (strcmp(cp, "stdout") == 0) io_log_files[IOFD_STDOUT].enabled = true; else if (strcmp(cp, "stderr") == 0) @@ -397,8 +363,11 @@ /* Set stdin to raw mode if it is a tty */ interactive = isatty(STDIN_FILENO); if (interactive) { - if (!sudo_term_raw(STDIN_FILENO, 1)) - sudo_fatal(U_("unable to set tty to raw mode")); + while (!sudo_term_raw(STDIN_FILENO, 1)) { + if (errno != EINTR) + sudo_fatal(U_("unable to set tty to raw mode")); + kill(getpid(), SIGTTOU); + } } /* Setup event base and input/output events. */ @@ -497,8 +466,10 @@ /* Store the line in iov followed by \r\n pair. */ if (iovcnt + 3 > iovmax) { iov = iovmax ? - sudo_ereallocarray(iov, iovmax <<= 1, sizeof(*iov)) : - sudo_emallocarray(iovmax = 32, sizeof(*iov)); + reallocarray(iov, iovmax <<= 1, sizeof(*iov)) : + reallocarray(NULL, iovmax = 32, sizeof(*iov)); + if (iov == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); } linelen = (size_t)(nl - line) + 1; iov[iovcnt].iov_base = line; @@ -541,7 +512,7 @@ sudo_ev_loop(evbase, 0); } if (iov != &iovb) - sudo_efree(iov); + free(iov); } debug_return; } @@ -693,7 +664,8 @@ } /* Allocate new search node */ - sn = sudo_ecalloc(1, sizeof(*sn)); + if ((sn = calloc(1, sizeof(*sn))) == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); sn->type = type; sn->or = or; sn->negated = not; @@ -804,7 +776,8 @@ * 2) cwd * 3) command with args */ - li = sudo_ecalloc(1, sizeof(*li)); + if ((li = calloc(1, sizeof(*li))) == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (getline(&buf, &bufsize, fp) == -1 || getline(&li->cwd, &cwdsize, fp) == -1 || getline(&li->cmd, &cmdsize, fp) == -1) { @@ -843,7 +816,8 @@ sudo_warn(U_("%s: user field is missing"), logfile); goto bad; } - li->user = sudo_estrndup(cp, (size_t)(ep - cp)); + if ((li->user = strndup(cp, (size_t)(ep - cp))) == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); /* runas user */ cp = ep + 1; @@ -851,7 +825,8 @@ sudo_warn(U_("%s: runas user field is missing"), logfile); goto bad; } - li->runas_user = sudo_estrndup(cp, (size_t)(ep - cp)); + if ((li->runas_user = strndup(cp, (size_t)(ep - cp))) == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); /* runas group */ cp = ep + 1; @@ -859,17 +834,21 @@ sudo_warn(U_("%s: runas group field is missing"), logfile); goto bad; } - if (cp != ep) - li->runas_group = sudo_estrndup(cp, (size_t)(ep - cp)); + if (cp != ep) { + if ((li->runas_group = strndup(cp, (size_t)(ep - cp))) == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + } /* tty, followed by optional rows + columns */ cp = ep + 1; if ((ep = strchr(cp, ':')) == NULL) { /* just the tty */ - li->tty = sudo_estrdup(cp); + if ((li->tty = strdup(cp)) == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); } else { /* tty followed by rows + columns */ - li->tty = sudo_estrndup(cp, (size_t)(ep - cp)); + if ((li->tty = strndup(cp, (size_t)(ep - cp))) == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); cp = ep + 1; /* need to NULL out separator to use strtonum() */ if ((ep = strchr(cp, ':')) != NULL) { @@ -890,13 +869,13 @@ } } fclose(fp); - sudo_efree(buf); + free(buf); debug_return_ptr(li); bad: if (fp != NULL) fclose(fp); - sudo_efree(buf); + free(buf); free_log_info(li); debug_return_ptr(NULL); } @@ -905,13 +884,13 @@ free_log_info(struct log_info *li) { if (li != NULL) { - sudo_efree(li->cwd); - sudo_efree(li->user); - sudo_efree(li->runas_user); - sudo_efree(li->runas_group); - sudo_efree(li->tty); - sudo_efree(li->cmd); - sudo_efree(li); + free(li->cwd); + free(li->user); + free(li->runas_user); + free(li->runas_group); + free(li->tty); + free(li->cmd); + free(li); } } @@ -978,7 +957,7 @@ DIR *d; struct dirent *dp; struct stat sb; - size_t sdlen, sessions_len = 0, sessions_size = 36*36; + size_t sdlen, sessions_len = 0, sessions_size = 0; unsigned int i; int len; char pathbuf[PATH_MAX], **sessions = NULL; @@ -1003,7 +982,6 @@ pathbuf[sdlen] = '\0'; /* Store potential session dirs for sorting. */ - sessions = sudo_emallocarray(sessions_size, sizeof(char *)); while ((dp = readdir(d)) != NULL) { /* Skip "." and ".." */ if (dp->d_name[0] == '.' && (dp->d_name[1] == '\0' || @@ -1022,35 +1000,44 @@ /* Add name to session list. */ if (sessions_len + 1 > sessions_size) { - sessions_size <<= 1; - sessions = sudo_ereallocarray(sessions, sessions_size, sizeof(char *)); - } - sessions[sessions_len++] = sudo_estrdup(dp->d_name); + if (sessions_size == 0) + sessions_size = 36 * 36 / 2; + sessions = reallocarray(sessions, sessions_size, 2 * sizeof(char *)); + if (sessions == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + sessions_size *= 2; + } + if ((sessions[sessions_len] = strdup(dp->d_name)) == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + sessions_len++; } closedir(d); /* Sort and list the sessions. */ - qsort(sessions, sessions_len, sizeof(char *), session_compare); - for (i = 0; i < sessions_len; i++) { - len = snprintf(&pathbuf[sdlen], sizeof(pathbuf) - sdlen, - "%s/log", sessions[i]); - if (len <= 0 || (size_t)len >= sizeof(pathbuf) - sdlen) { - errno = ENAMETOOLONG; - sudo_fatal("%s/%s/log", dir, sessions[i]); - } - sudo_efree(sessions[i]); + if (sessions != NULL) { + qsort(sessions, sessions_len, sizeof(char *), session_compare); + for (i = 0; i < sessions_len; i++) { + len = snprintf(&pathbuf[sdlen], sizeof(pathbuf) - sdlen, + "%s/log", sessions[i]); + if (len <= 0 || (size_t)len >= sizeof(pathbuf) - sdlen) { + errno = ENAMETOOLONG; + sudo_fatal("%s/%s/log", dir, sessions[i]); + } + free(sessions[i]); - /* Check for dir with a log file. */ - if (lstat(pathbuf, &sb) == 0 && S_ISREG(sb.st_mode)) { - list_session(pathbuf, re, user, tty); - } else { - /* Strip off "/log" and recurse if a dir. */ - pathbuf[sdlen + len - 4] = '\0'; - if (checked_type || (lstat(pathbuf, &sb) == 0 && S_ISDIR(sb.st_mode))) - find_sessions(pathbuf, re, user, tty); + /* Check for dir with a log file. */ + if (lstat(pathbuf, &sb) == 0 && S_ISREG(sb.st_mode)) { + list_session(pathbuf, re, user, tty); + } else { + /* Strip off "/log" and recurse if a dir. */ + pathbuf[sdlen + len - 4] = '\0'; + if (checked_type || + (lstat(pathbuf, &sb) == 0 && S_ISDIR(sb.st_mode))) + find_sessions(pathbuf, re, user, tty); + } } + free(sessions); } - sudo_efree(sessions); debug_return_int(0); } diff -Nru sudo-1.8.12/plugins/sudoers/testsudoers.c sudo-1.8.16/plugins/sudoers/testsudoers.c --- sudo-1.8.12/plugins/sudoers/testsudoers.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/testsudoers.c 2016-03-17 16:13:11.000000000 +0000 @@ -21,31 +21,20 @@ * Materiel Command, USAF, under agreement number F39502-99-1-0512. */ -#define _SUDO_MAIN - #include #include #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #ifdef HAVE_NETGROUP_H # include #endif /* HAVE_NETGROUP_H */ @@ -67,6 +56,10 @@ # include "compat/fnmatch.h" #endif /* HAVE_FNMATCH */ +#ifndef YYDEBUG +# define YYDEBUG 0 +#endif + /* * Function Prototypes */ @@ -106,7 +99,7 @@ #if defined(SUDO_DEVEL) && defined(__OpenBSD__) extern char *malloc_options; #endif -#ifdef YYDEBUG +#if YYDEBUG extern int sudoersdebug; #endif @@ -119,7 +112,6 @@ struct privilege *priv; struct userspec *us; char *p, *grfile, *pwfile; - char hbuf[HOST_NAME_MAX + 1]; const char *errstr; int match, host_match, runas_match, cmnd_match; int ch, dflag, exitcode = 0; @@ -128,18 +120,20 @@ #if defined(SUDO_DEVEL) && defined(__OpenBSD__) malloc_options = "AFGJPR"; #endif -#ifdef YYDEBUG +#if YYDEBUG sudoersdebug = 1; #endif initprogname(argc > 0 ? argv[0] : "testsudoers"); - sudoers_initlocale(setlocale(LC_ALL, ""), def_sudoers_locale); + if (!sudoers_initlocale(setlocale(LC_ALL, ""), def_sudoers_locale)) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); bindtextdomain("sudoers", LOCALEDIR); /* XXX - should have own domain */ textdomain("sudoers"); /* Initialize the debug subsystem. */ - sudo_conf_read(NULL, SUDO_CONF_DEBUG); + if (sudo_conf_read(NULL, SUDO_CONF_DEBUG) == -1) + exit(EXIT_FAILURE); sudoers_debug_register(getprogname(), sudo_conf_debug_files(getprogname())); dflag = 0; @@ -190,8 +184,8 @@ setgrfile(grfile); if (pwfile) setpwfile(pwfile); - sudo_setpwent(); - sudo_setgrent(); + if (sudo_setpwent() == -1 || sudo_setgrent() == -1) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); if (argc < 2) { if (!dflag) @@ -212,14 +206,13 @@ sudo_fatalx(U_("unknown user: %s"), user_name); if (user_host == NULL) { - if (gethostname(hbuf, sizeof(hbuf)) != 0) + if ((user_host = sudo_gethostname()) == NULL) sudo_fatal("gethostname"); - hbuf[sizeof(hbuf) - 1] = '\0'; - user_host = hbuf; } if ((p = strchr(user_host, '.'))) { *p = '\0'; - user_shost = sudo_estrdup(user_host); + if ((user_shost = strdup(user_host)) == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); *p = '.'; } else { user_shost = user_host; @@ -235,7 +228,8 @@ for (size = 0, from = argv; *from; from++) size += strlen(*from) + 1; - user_args = (char *) sudo_emalloc(size); + if ((user_args = malloc(size)) == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); for (to = user_args, from = argv; *from; from++) { n = strlcpy(to, *from, size - (to - user_args)); if (n >= size - (to - user_args)) @@ -247,14 +241,17 @@ } /* Initialize default values. */ - init_defaults(); + if (!init_defaults()) + sudo_fatalx(U_("unable to initialize sudoers default values")); /* Set runas callback. */ sudo_defs_table[I_RUNAS_DEFAULT].callback = cb_runas_default; /* Load ip addr/mask for each interface. */ - if (get_net_ifs(&p) > 0) - set_interfaces(p); + if (get_net_ifs(&p) > 0) { + if (!set_interfaces(p)) + sudo_fatal(U_("unable to parse network address list")); + } /* Allocate space for data structures in the parser. */ init_parser("sudoers", false); @@ -308,7 +305,7 @@ putchar('\n'); print_privilege(priv); putchar('\n'); - host_match = hostlist_matches(&priv->hostlist); + host_match = hostlist_matches(sudo_user.pw, &priv->hostlist); if (host_match == ALLOW) { puts("\thost matched"); TAILQ_FOREACH_REVERSE(cs, &priv->cmndlist, cmndspec_list, entries) { @@ -356,7 +353,7 @@ uid_t uid = sudo_strtoid(user + 1, NULL, NULL, &errstr); if (errstr == NULL) { if ((pw = sudo_getpwuid(uid)) == NULL) - pw = sudo_fakepwnam(user, runas_gr ? runas_gr->gr_gid : 0); + pw = sudo_fakepwnam(user, user_gid); } } if (pw == NULL) { @@ -458,10 +455,10 @@ debug_return_ptr(fp); } -void +bool init_envtables(void) { - return; + return(true); } bool @@ -574,6 +571,12 @@ debug_return_int(0); } +#define TAG_SET(tt) \ + ((tt) != UNSPEC && (tt) != IMPLIED) + +#define TAG_CHANGED(t) \ + (TAG_SET(cs->tags.t) && cs->tags.t != tags.t) + void print_privilege(struct privilege *priv) { @@ -588,8 +591,7 @@ print_member(m); } fputs(" = ", stdout); - tags.nopasswd = UNSPEC; - tags.noexec = UNSPEC; + TAGS_INIT(tags); TAILQ_FOREACH(cs, &priv->cmndlist, entries) { if (cs != TAILQ_FIRST(&priv->cmndlist)) fputs(", ", stdout); @@ -628,10 +630,20 @@ if (cs->limitprivs) printf("LIMITPRIVS=%s ", cs->limitprivs); #endif /* HAVE_PRIV_SET */ - if (cs->tags.nopasswd != UNSPEC && cs->tags.nopasswd != tags.nopasswd) - printf("%sPASSWD: ", cs->tags.nopasswd ? "NO" : ""); - if (cs->tags.noexec != UNSPEC && cs->tags.noexec != tags.noexec) + if (TAG_CHANGED(follow)) + printf("%sFOLLOW: ", cs->tags.follow ? "" : "NO"); + if (TAG_CHANGED(log_input)) + printf("%sLOG_INPUT: ", cs->tags.log_input ? "" : "NO"); + if (TAG_CHANGED(log_output)) + printf("%sLOG_OUTPUT: ", cs->tags.log_output ? "" : "NO"); + if (TAG_CHANGED(noexec)) printf("%sEXEC: ", cs->tags.noexec ? "NO" : ""); + if (TAG_CHANGED(nopasswd)) + printf("%sPASSWD: ", cs->tags.nopasswd ? "NO" : ""); + if (TAG_CHANGED(send_mail)) + printf("%sMAIL: ", cs->tags.send_mail ? "" : "NO"); + if (TAG_CHANGED(setenv)) + printf("%sSETENV: ", cs->tags.setenv ? "" : "NO"); print_member(cs->cmnd); memcpy(&tags, &cs->tags, sizeof(tags)); } diff -Nru sudo-1.8.12/plugins/sudoers/timestamp.c sudo-1.8.16/plugins/sudoers/timestamp.c --- sudo-1.8.12/plugins/sudoers/timestamp.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/timestamp.c 2016-03-17 16:13:10.000000000 +0000 @@ -20,52 +20,56 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include +#if defined(HAVE_STDINT_H) +# include +#elif defined(HAVE_INTTYPES_H) +# include +#endif #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #ifdef TIME_WITH_SYS_TIME # include #endif -#ifndef HAVE_STRUCT_TIMESPEC -# include "compat/timespec.h" -#endif #include #include #include #include +#include #include "sudoers.h" #include "check.h" -/* On Linux, CLOCK_MONOTONIC does not run while suspended. */ -#if defined(CLOCK_BOOTTIME) -# define SUDO_CLOCK_MONOTONIC CLOCK_BOOTTIME -#elif defined(CLOCK_MONOTONIC) -# define SUDO_CLOCK_MONOTONIC CLOCK_MONOTONIC -#else -# define SUDO_CLOCK_MONOTONIC CLOCK_REALTIME -#endif +#define TIMESTAMP_OPEN_ERROR -1 +#define TIMESTAMP_PERM_ERROR -2 + +/* + * Each user has a single time stamp file that contains multiple records. + * Records are locked to ensure that changes are serialized. + * + * The first record is of type TS_LOCKEXCL and is used to gain exclusive + * access to create new records. This is a short-term lock and sudo + * should not sleep while holding it (or the user will not be able to sudo). + * The TS_LOCKEXCL entry must be unlocked before locking the actual record. + */ -static char timestamp_file[PATH_MAX]; -static off_t timestamp_hint = (off_t)-1; -static struct timestamp_entry timestamp_key; +struct ts_cookie { + char *fname; + int fd; + pid_t sid; + bool locked; + off_t pos; + struct timestamp_entry key; +}; /* * Returns true if entry matches key, else false. + * We don't match on the sid or actual time stamp. */ static bool ts_match_record(struct timestamp_entry *key, struct timestamp_entry *entry) @@ -113,8 +117,7 @@ debug_decl(ts_find_record, SUDOERS_DEBUG_AUTH) /* - * Look for a matching record. - * We don't match on the sid or actual time stamp. + * Find a matching record (does not match sid or time stamp value). */ while (read(fd, &cur, sizeof(cur)) == sizeof(cur)) { if (cur.size != sizeof(cur)) { @@ -136,73 +139,6 @@ } /* - * Find matching record to update or append a new one. - * Returns true if the entry was written successfully, else false. - */ -static bool -ts_update_record(int fd, struct timestamp_entry *entry, off_t timestamp_hint) -{ - struct timestamp_entry cur; - ssize_t nwritten; - off_t old_eof = (off_t)-1; - debug_decl(ts_update_record, SUDOERS_DEBUG_AUTH) - - /* First try the hint if one is given. */ - if (timestamp_hint != (off_t)-1) { - if (lseek(fd, timestamp_hint, SEEK_SET) != -1) { - if (read(fd, &cur, sizeof(cur)) == sizeof(cur)) { - if (ts_match_record(entry, &cur)) { - sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, - "found existing time stamp record using hint"); - goto found_it; - } - } - } - } - - /* Search for matching record. */ - sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, - "searching for time stamp record"); - lseek(fd, (off_t)0, SEEK_SET); - if (ts_find_record(fd, entry, &cur)) { - sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, - "found existing time stamp record"); -found_it: - /* back up over old record */ - lseek(fd, (off_t)0 - (off_t)cur.size, SEEK_CUR); - } else { - sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, - "appending new time stamp record"); - old_eof = lseek(fd, (off_t)0, SEEK_CUR); - } - - /* Overwrite existing record or append to end. */ - nwritten = write(fd, entry, sizeof(struct timestamp_entry)); - if ((size_t)nwritten == sizeof(struct timestamp_entry)) - debug_return_bool(true); - - if (nwritten == -1) { - log_warning(SLOG_SEND_MAIL, - N_("unable to write to %s"), timestamp_file); - } else { - log_warningx(SLOG_SEND_MAIL, - N_("unable to write to %s"), timestamp_file); - } - - /* Truncate on partial write to be safe. */ - if (nwritten > 0 && old_eof != (off_t)-1) { - sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, - "short write, truncating partial time stamp record"); - if (ftruncate(fd, old_eof) != 0) { - sudo_warn(U_("unable to truncate time stamp file to %lld bytes"), - (long long)old_eof); - } - } - - debug_return_bool(false); -} - -/* * Create a directory and any missing parent directories with the * specified mode. * Returns true on success. @@ -302,190 +238,512 @@ } /* - * Fills in the timestamp_file[] global variable. - * Returns the length of timestamp_file. + * Open the specified timestamp or lecture file and set the + * close on exec flag. + * Returns open file descriptor on success. + * Returns TIMESTAMP_OPEN_ERROR or TIMESTAMP_PERM_ERROR on error. */ -int -build_timestamp(struct passwd *pw) +static int +ts_open(const char *path, int flags) { - int len; - debug_decl(build_timestamp, SUDOERS_DEBUG_AUTH) + bool uid_changed = false; + int fd; + debug_decl(ts_open, SUDOERS_DEBUG_AUTH) + + if (timestamp_uid != 0) + uid_changed = set_perms(PERM_TIMESTAMP); + fd = open(path, flags, 0600); + if (uid_changed && !restore_perms()) { + /* Unable to restore permissions, should not happen. */ + if (fd != -1) { + int serrno = errno; + close(fd); + errno = serrno; + fd = TIMESTAMP_PERM_ERROR; + } + } + if (fd >= 0) + (void)fcntl(fd, F_SETFD, FD_CLOEXEC); - len = snprintf(timestamp_file, sizeof(timestamp_file), "%s/%s", - def_timestampdir, user_name); - if (len <= 0 || (size_t)len >= sizeof(timestamp_file)) { - log_warningx(SLOG_SEND_MAIL, - N_("timestamp path too long: %s/%s"), def_timestampdir, user_name); - len = -1; + debug_return_int(fd); +} + +static ssize_t +ts_write(int fd, const char *fname, struct timestamp_entry *entry, off_t offset) +{ + ssize_t nwritten; + off_t old_eof; + debug_decl(ts_write, SUDOERS_DEBUG_AUTH) + + if (offset == -1) { + old_eof = lseek(fd, 0, SEEK_CUR); + nwritten = write(fd, entry, entry->size); + } else { + old_eof = offset; +#ifdef HAVE_PWRITE + nwritten = pwrite(fd, entry, entry->size, offset); +#else + if (lseek(fd, offset, SEEK_SET) == -1) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO|SUDO_DEBUG_LINENO, + "unable to seek to %lld", offset); + nwritten = -1; + } else { + nwritten = write(fd, entry, entry->size); + } +#endif } + if ((size_t)nwritten != entry->size) { + if (nwritten == -1) { + log_warning(SLOG_SEND_MAIL, + N_("unable to write to %s"), fname); + } else { + log_warningx(SLOG_SEND_MAIL, + N_("unable to write to %s"), fname); + } - debug_return_int(len); + /* Truncate on partial write to be safe (assumes end of file). */ + if (nwritten > 0) { + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "short write, truncating partial time stamp record"); + if (ftruncate(fd, old_eof) != 0) { + sudo_warn(U_("unable to truncate time stamp file to %lld bytes"), + (long long)old_eof); + } + } + debug_return_ssize_t(-1); + } + debug_return_ssize_t(nwritten); } /* - * Update the time on the timestamp file/dir or create it if necessary. - * Returns true on success or false on failure. + * Full in struct timestamp_entry with the specified flags + * based on auth user pw. Does not set the time stamp. */ -bool -update_timestamp(struct passwd *pw) +static void +ts_fill4(struct timestamp_entry *entry, struct passwd *pw, int flags, bool tty_tickets) { - struct timestamp_entry entry; - bool uid_changed = false; - bool rval = false; - int fd; - debug_decl(update_timestamp, SUDOERS_DEBUG_AUTH) + struct stat sb; + debug_decl(ts_fill4, SUDOERS_DEBUG_AUTH) - /* Zero timeout means don't update the time stamp file. */ - if (def_timestamp_timeout == 0) - goto done; + memset(entry, 0, sizeof(*entry)); + entry->version = TS_VERSION; + entry->size = sizeof(*entry); + entry->type = TS_GLOBAL; /* may be overriden below */ + entry->flags = flags; + if (pw != NULL) { + entry->auth_uid = pw->pw_uid; + } else { + entry->flags |= TS_ANYUID; + } + entry->sid = user_sid; + if (tty_tickets) { + if (user_ttypath != NULL && stat(user_ttypath, &sb) == 0) { + /* tty-based time stamp */ + entry->type = TS_TTY; + entry->u.ttydev = sb.st_rdev; + } else { + /* ppid-based time stamp */ + entry->type = TS_PPID; + entry->u.ppid = getppid(); + } + } + + debug_return; +} + +static void +ts_fill(struct timestamp_entry *entry, struct passwd *pw, int flags) +{ + ts_fill4(entry, pw, flags, def_tty_tickets); +} + +static void +ts_fill_tty(struct timestamp_entry *entry, struct passwd *pw, int flags) +{ + ts_fill4(entry, pw, flags, true); +} + +/* + * Open the user's time stamp file. + * Returns a cookie or NULL on error, does not lock the file. + */ +void * +timestamp_open(const char *user, pid_t sid) +{ + struct ts_cookie *cookie = NULL; + char *fname = NULL; + int tries, fd = -1; + debug_decl(timestamp_open, SUDOERS_DEBUG_AUTH) - /* Check/create parent directories as needed. */ + /* Zero timeout means don't use the time stamp file. */ + if (def_timestamp_timeout == 0) { + errno = ENOENT; + goto bad; + } + + /* Sanity check timestamp dir and create if missing. */ if (!ts_secure_dir(def_timestampdir, true, false)) - goto done; + goto bad; - /* Fill in time stamp. */ - memcpy(&entry, ×tamp_key, sizeof(struct timestamp_entry)); - clock_gettime(SUDO_CLOCK_MONOTONIC, &entry.ts); + /* Open time stamp file. */ + if (asprintf(&fname, "%s/%s", def_timestampdir, user) == -1) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto bad; + } + for (tries = 1; ; tries++) { + struct stat sb; - /* Open time stamp file and lock it for exclusive access. */ - if (timestamp_uid != 0) - uid_changed = set_perms(PERM_TIMESTAMP); - fd = open(timestamp_file, O_RDWR|O_CREAT, 0600); - if (uid_changed) - (void) restore_perms(); - if (fd == -1) { - log_warning(SLOG_SEND_MAIL, N_("unable to open %s"), timestamp_file); - goto done; + fd = ts_open(fname, O_RDWR|O_CREAT); + switch (fd) { + case TIMESTAMP_OPEN_ERROR: + log_warning(SLOG_SEND_MAIL, N_("unable to open %s"), fname); + goto bad; + case TIMESTAMP_PERM_ERROR: + /* Already logged set_perms/restore_perms error. */ + goto bad; + } + + /* Remove time stamp file if its mtime predates boot time. */ + if (tries == 1 && fstat(fd, &sb) == 0) { + struct timespec boottime, mtime; + + mtim_get(&sb, mtime); + if (get_boottime(&boottime)) { + if (sudo_timespeccmp(&mtime, &boottime, <)) { + /* Time stamp file too old, remove it. */ + close(fd); + unlink(fname); + continue; + } + } + } + break; } - /* Update record or append a new one. */ - sudo_lock_file(fd, SUDO_LOCK); - ts_update_record(fd, &entry, timestamp_hint); - close(fd); + /* Allocate and fill in cookie to store state. */ + cookie = malloc(sizeof(*cookie)); + if (cookie == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto bad; + } + cookie->fd = fd; + cookie->fname = fname; + cookie->sid = sid; + cookie->pos = -1; - rval = true; + debug_return_ptr(cookie); +bad: + if (fd != -1) + close(fd); + free(cookie); + free(fname); + debug_return_ptr(NULL); +} + +static volatile sig_atomic_t got_signal; + +static void +timestamp_handler(int s) +{ + got_signal = s; +} + +/* + * Wrapper for sudo_lock_region() that is interruptible. + */ +static bool +timestamp_lock_record(int fd, off_t pos, off_t len) +{ + struct sigaction sa, saveint, savequit; + sigset_t mask, omask; + bool rval; + debug_decl(timestamp_lock_record, SUDOERS_DEBUG_AUTH) + + if (pos >= 0 && lseek(fd, pos, SEEK_SET) == -1) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO|SUDO_DEBUG_LINENO, + "unable to seek to %lld", (long long)pos); + debug_return_bool(false); + } + + /* Allow SIGINT and SIGQUIT to interrupt a lock. */ + got_signal = 0; + memset(&sa, 0, sizeof(sa)); + sigemptyset(&sa.sa_mask); + sa.sa_flags = SA_INTERRUPT; /* don't restart system calls */ + sa.sa_handler = timestamp_handler; + (void) sigaction(SIGINT, &sa, &saveint); + (void) sigaction(SIGQUIT, &sa, &savequit); + sigemptyset(&mask); + sigaddset(&mask, SIGINT); + sigaddset(&mask, SIGQUIT); + (void) sigprocmask(SIG_UNBLOCK, &mask, &omask); + + rval = sudo_lock_region(fd, SUDO_LOCK, len); + if (!rval) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO|SUDO_DEBUG_LINENO, + "failed to lock fd %d [%lld, %lld]", fd, + (long long)pos, (long long)len); + } + + /* Restore the old mask (SIGINT and SIGQUIT blocked) and handlers. */ + (void) sigprocmask(SIG_SETMASK, &omask, NULL); + (void) sigaction(SIGINT, &saveint, NULL); + (void) sigaction(SIGQUIT, &savequit, NULL); + + /* Re-deliver the signal that interrupted the lock, if any. */ + if (!rval && got_signal) + kill(getpid(), got_signal); -done: debug_return_bool(rval); } +static bool +timestamp_unlock_record(int fd, off_t pos, off_t len) +{ + debug_decl(timestamp_unlock_record, SUDOERS_DEBUG_AUTH) + + if (pos >= 0 && lseek(fd, pos, SEEK_SET) == -1) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO|SUDO_DEBUG_LINENO, + "unable to seek to %lld", (long long)pos); + debug_return_bool(false); + } + debug_return_bool(sudo_lock_region(fd, SUDO_UNLOCK, len)); +} + /* - * Check the timestamp file and directory and return their status. - * Returns one of TS_CURRENT, TS_OLD, TS_MISSING, TS_NOFILE, TS_ERROR. + * Seek to the record's position and read it, locking as needed. */ -int -timestamp_status(struct passwd *pw) +static ssize_t +ts_read(struct ts_cookie *cookie, struct timestamp_entry *entry) { - struct timestamp_entry entry; - struct timespec diff, timeout; - bool uid_changed = false; - int status = TS_ERROR; /* assume the worst */ - struct stat sb; - int fd = -1; - debug_decl(timestamp_status, SUDOERS_DEBUG_AUTH) + ssize_t nread = -1; + bool should_unlock = false; + debug_decl(ts_read, SUDOERS_DEBUG_AUTH) - /* Reset time stamp offset hint. */ - timestamp_hint = (off_t)-1; + /* If the record is not already locked, lock it now. */ + if (!cookie->locked) { + if (!timestamp_lock_record(cookie->fd, cookie->pos, sizeof(*entry))) + goto done; + should_unlock = true; + } - /* Zero timeout means ignore time stamp files. */ - if (def_timestamp_timeout == 0) { - status = TS_OLD; /* XXX - could also be TS_MISSING */ + /* Seek to the record position and read it. */ +#ifdef HAVE_PREAD + nread = pread(cookie->fd, entry, sizeof(*entry), cookie->pos); +#else + if (lseek(cookie->fd, cookie->pos, SEEK_SET) == -1) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_ERRNO|SUDO_DEBUG_LINENO, + "unable to seek to %lld", (long long)cookie->pos); goto done; } + nread = read(cookie->fd, entry, sizeof(*entry)); +#endif + if (nread != sizeof(*entry)) { + /* short read, should not happen */ + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "short read (%zd vs %zu), truncated time stamp file?", + nread, sizeof(*entry)); + goto done; + } + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "read %zd byte record at %lld", nread, (long long)cookie->pos); - /* Ignore time stamp files in an insecure directory. */ - if (!ts_secure_dir(def_timestampdir, false, false)) { - if (errno != ENOENT) { - status = TS_ERROR; - goto done; - } - status = TS_MISSING; /* not insecure, just missing */ +done: + /* If the record was not locked initially, unlock it. */ + if (should_unlock) + timestamp_unlock_record(cookie->fd, cookie->pos, sizeof(*entry)); + + debug_return_ssize_t(nread); +} + +/* + * Lock a record in the time stamp file for exclusive access. + * If the record does not exist, it is created (as disabled). + */ +bool +timestamp_lock(void *vcookie, struct passwd *pw) +{ + struct ts_cookie *cookie = vcookie; + struct timestamp_entry entry; + off_t lock_pos; + ssize_t nread; + debug_decl(timestamp_lock, SUDOERS_DEBUG_AUTH) + + if (cookie == NULL) { + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "called with a NULL cookie!"); + debug_return_bool(false); } /* - * Create a key used for matching entries in the time stamp file. - * The actual time stamp in the key is used below as the time "now". + * Take a lock on the "write" record (the first record in the file). + * This will let us seek for the record or extend as needed + * without colliding with anyone else. */ - memset(×tamp_key, 0, sizeof(timestamp_key)); - timestamp_key.version = TS_VERSION; - timestamp_key.size = sizeof(timestamp_key); - timestamp_key.type = TS_GLOBAL; /* may be overriden below */ - if (pw != NULL) { - timestamp_key.auth_uid = pw->pw_uid; + if (!timestamp_lock_record(cookie->fd, 0, sizeof(struct timestamp_entry))) + debug_return_bool(false); + + /* Make sure the first record is of type TS_LOCKEXCL. */ + memset(&entry, 0, sizeof(entry)); + nread = read(cookie->fd, &entry, sizeof(entry)); + if (nread == 0) { + /* New file, add TS_LOCKEXCL record. */ + entry.version = TS_VERSION; + entry.size = sizeof(entry); + entry.type = TS_LOCKEXCL; + if (ts_write(cookie->fd, cookie->fname, &entry, -1) == -1) + debug_return_bool(false); + } else if (entry.type != TS_LOCKEXCL) { + /* Old sudo record, convert it to TS_LOCKEXCL. */ + entry.type = TS_LOCKEXCL; + memset((char *)&entry + offsetof(struct timestamp_entry, type), 0, + nread - offsetof(struct timestamp_entry, type)); + if (ts_write(cookie->fd, cookie->fname, &entry, 0) == -1) + debug_return_bool(false); + } + + /* Search for a tty-based record or append a new one. */ + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "searching for tty time stamp record"); + ts_fill_tty(&cookie->key, pw, TS_DISABLED); + if (ts_find_record(cookie->fd, &cookie->key, &entry)) { + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "found existing tty time stamp record"); + lock_pos = lseek(cookie->fd, 0, SEEK_CUR) - (off_t)entry.size; } else { - timestamp_key.flags = TS_ANYUID; + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "appending new tty time stamp record"); + lock_pos = lseek(cookie->fd, 0, SEEK_CUR); + if (ts_write(cookie->fd, cookie->fname, &cookie->key, -1) == -1) + debug_return_bool(false); } - timestamp_key.sid = user_sid; + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "tty time stamp position is %lld", (long long)lock_pos); + if (def_tty_tickets) { - if (user_ttypath != NULL && stat(user_ttypath, &sb) == 0) { - /* tty-based time stamp */ - timestamp_key.type = TS_TTY; - timestamp_key.u.ttydev = sb.st_rdev; + /* For tty tickets the tty lock is the same as the record lock. */ + cookie->pos = lock_pos; + cookie->locked = true; + } else { + /* + * For non-tty tickets we use a separate record lock that we + * cannot hold long-term since it is shared between all ttys. + */ + cookie->locked = false; + cookie->key.type = TS_GLOBAL; /* find a non-tty record */ + + (void)lseek(cookie->fd, 0, SEEK_SET); + if (ts_find_record(cookie->fd, &cookie->key, &entry)) { + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "found existing global record"); + cookie->pos = lseek(cookie->fd, 0, SEEK_CUR) - (off_t)entry.size; } else { - /* ppid-based time stamp */ - timestamp_key.type = TS_PPID; - timestamp_key.u.ppid = getppid(); + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "appending new global record"); + cookie->pos = lseek(cookie->fd, 0, SEEK_CUR); + if (ts_write(cookie->fd, cookie->fname, &cookie->key, -1) == -1) + debug_return_bool(false); } } - clock_gettime(SUDO_CLOCK_MONOTONIC, ×tamp_key.ts); - /* If the time stamp dir is missing there is nothing to do. */ - if (status == TS_MISSING) - goto done; + /* Unlock the TS_LOCKEXCL record. */ + timestamp_unlock_record(cookie->fd, 0, sizeof(struct timestamp_entry)); - /* Open time stamp file and lock it for exclusive access. */ - if (timestamp_uid != 0) - uid_changed = set_perms(PERM_TIMESTAMP); - fd = open(timestamp_file, O_RDWR); - if (uid_changed) - (void) restore_perms(); - if (fd == -1) { - status = TS_MISSING; - goto done; - } - sudo_lock_file(fd, SUDO_LOCK); - - /* Ignore and clear time stamp file if mtime predates boot time. */ - if (fstat(fd, &sb) == 0) { - struct timeval boottime, mtime; - - mtim_get(&sb, &mtime); - if (get_boottime(&boottime) && sudo_timevalcmp(&mtime, &boottime, <)) { - ignore_result(ftruncate(fd, (off_t)0)); - status = TS_MISSING; - goto done; - } + /* Lock the per-tty record (may sleep). */ + if (!timestamp_lock_record(cookie->fd, lock_pos, sizeof(struct timestamp_entry))) + debug_return_bool(false); + + debug_return_bool(true); +} + +void +timestamp_close(void *vcookie) +{ + struct ts_cookie *cookie = vcookie; + debug_decl(timestamp_close, SUDOERS_DEBUG_AUTH) + + if (cookie != NULL) { + close(cookie->fd); + free(cookie->fname); + free(cookie); } - /* Read existing record, if any. */ - if (!ts_find_record(fd, ×tamp_key, &entry)) { - status = TS_MISSING; + debug_return; +} + +/* + * Check the time stamp file and directory and return their status. + * Called with the file position before the locked record to read. + * Returns one of TS_CURRENT, TS_OLD, TS_MISSING, TS_ERROR, TS_FATAL. + * Fills in fdp with an open file descriptor positioned at the + * appropriate (and locked) record. + */ +int +timestamp_status(void *vcookie, struct passwd *pw) +{ + struct ts_cookie *cookie = vcookie; + struct timestamp_entry entry; + struct timespec diff, now, timeout; + int status = TS_ERROR; /* assume the worst */ + ssize_t nread; + debug_decl(timestamp_status, SUDOERS_DEBUG_AUTH) + + /* Zero timeout means don't use time stamp files. */ + if (def_timestamp_timeout == 0) { + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "timestamps disabled"); + status = TS_OLD; + goto done; + } + if (cookie == NULL || cookie->pos < 0) { + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "NULL cookie or invalid position"); + status = TS_OLD; goto done; } - /* Set record position hint for use by update_timestamp() */ - timestamp_hint = lseek(fd, (off_t)0, SEEK_CUR); - if (timestamp_hint != (off_t)-1) - timestamp_hint -= entry.size; + /* Read the record at the correct position. */ + if ((nread = ts_read(cookie, &entry)) != sizeof(entry)) + goto done; + + /* Make sure what we read matched the expected record. */ + if (entry.version != TS_VERSION || entry.size != nread) { + /* do something else? */ + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "invalid time stamp file @ %lld", (long long)cookie->pos); + status = TS_OLD; + goto done; + } if (ISSET(entry.flags, TS_DISABLED)) { + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "time stamp record disabled"); status = TS_OLD; /* disabled via sudo -k */ goto done; } - if (entry.type != TS_GLOBAL && entry.sid != timestamp_key.sid) { + if (entry.type != TS_GLOBAL && entry.sid != cookie->sid) { + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "time stamp record sid mismatch"); status = TS_OLD; /* belongs to different session */ goto done; } /* Negative timeouts only expire manually (sudo -k). */ if (def_timestamp_timeout < 0) { + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "time stamp record does not expire"); status = TS_CURRENT; goto done; } /* Compare stored time stamp with current time. */ - sudo_timespecsub(×tamp_key.ts, &entry.ts, &diff); + if (sudo_gettime_mono(&now) == -1) { + log_warning(0, N_("unable to read the clock")); + status = TS_ERROR; + goto done; + } + sudo_timespecsub(&now, &entry.ts, &diff); timeout.tv_sec = 60 * def_timestamp_timeout; timeout.tv_nsec = ((60.0 * def_timestamp_timeout) - (double)timeout.tv_sec) * 1000000000.0; @@ -498,11 +756,11 @@ N_("ignoring time stamp from the future")); status = TS_OLD; SET(entry.flags, TS_DISABLED); - ts_update_record(fd, &entry, timestamp_hint); + ts_write(cookie->fd, cookie->fname, &entry, cookie->pos); } #else /* Check for bogus (future) time in the stampfile. */ - sudo_timespecsub(&entry.ts, ×tamp_key.ts, &diff); + sudo_timespecsub(&entry.ts, &now, &diff); timeout.tv_sec *= 2; if (sudo_timespeccmp(&diff, &timeout, >)) { time_t tv_sec = (time_t)entry.ts.tv_sec; @@ -511,7 +769,7 @@ 4 + ctime(&tv_sec)); status = TS_OLD; SET(entry.flags, TS_DISABLED); - ts_update_record(fd, &entry, timestamp_hint); + ts_write(cookie->fd, cookie->fname, &entry, cookie->pos); } #endif /* CLOCK_MONOTONIC */ } else { @@ -519,78 +777,113 @@ } done: - if (fd != -1) - close(fd); debug_return_int(status); } /* - * Remove the timestamp entry or file if unlink_it is set. + * Update the time on the time stamp file/dir or create it if necessary. + * Returns true on success, false on failure or -1 on setuid failure. */ -void -remove_timestamp(bool unlink_it) +bool +timestamp_update(void *vcookie, struct passwd *pw) { - struct timestamp_entry entry; - bool uid_changed = false; - int fd = -1; - debug_decl(remove_timestamp, SUDOERS_DEBUG_AUTH) + struct ts_cookie *cookie = vcookie; + int rval = false; + debug_decl(timestamp_update, SUDOERS_DEBUG_AUTH) - if (build_timestamp(NULL) == -1) - debug_return; + /* Zero timeout means don't use time stamp files. */ + if (def_timestamp_timeout == 0) { + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "timestamps disabled"); + goto done; + } + if (cookie == NULL || cookie->pos < 0) { + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "NULL cookie or invalid position"); + goto done; + } - /* For "sudo -K" simply unlink the time stamp file. */ - if (unlink_it) { - (void) unlink(timestamp_file); - debug_return; + /* Update timestamp in key and enable it. */ + CLR(cookie->key.flags, TS_DISABLED); + if (sudo_gettime_mono(&cookie->key.ts) == -1) { + log_warning(0, N_("unable to read the clock")); + goto done; } - /* - * Create a key used for matching entries in the time stamp file. - */ - memset(×tamp_key, 0, sizeof(timestamp_key)); - timestamp_key.version = TS_VERSION; - timestamp_key.size = sizeof(timestamp_key); - timestamp_key.type = TS_GLOBAL; /* may be overriden below */ - timestamp_key.flags = TS_ANYUID; - if (def_tty_tickets) { - struct stat sb; - if (user_ttypath != NULL && stat(user_ttypath, &sb) == 0) { - /* tty-based time stamp */ - timestamp_key.type = TS_TTY; - timestamp_key.u.ttydev = sb.st_rdev; - } else { - /* ppid-based time stamp */ - timestamp_key.type = TS_PPID; - timestamp_key.u.ppid = getppid(); - } + /* Write out the locked record. */ + sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, + "writing %zu byte record at %lld", sizeof(cookie->key), + (long long)cookie->pos); + if (ts_write(cookie->fd, cookie->fname, &cookie->key, cookie->pos) != -1) + rval = true; + +done: + debug_return_int(rval); +} + +/* + * Remove the timestamp entry or file if unlink_it is set. + * Returns true on success, false on failure or -1 on setuid failure. + * A missing timestamp entry is not considered an error. + */ +int +timestamp_remove(bool unlink_it) +{ + struct timestamp_entry key, entry; + int fd = -1, rval = true; + char *fname = NULL; + debug_decl(timestamp_remove, SUDOERS_DEBUG_AUTH) + + if (asprintf(&fname, "%s/%s", def_timestampdir, user_name) == -1) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + rval = -1; + goto done; + } + + /* For "sudo -K" simply unlink the time stamp file. */ + if (unlink_it) { + rval = unlink(fname) ? -1 : true; + goto done; } /* Open time stamp file and lock it for exclusive access. */ - if (timestamp_uid != 0) - uid_changed = set_perms(PERM_TIMESTAMP); - fd = open(timestamp_file, O_RDWR); - if (uid_changed) - (void) restore_perms(); - if (fd == -1) + fd = ts_open(fname, O_RDWR); + switch (fd) { + case TIMESTAMP_OPEN_ERROR: + if (errno != ENOENT) + rval = false; + goto done; + case TIMESTAMP_PERM_ERROR: + /* Already logged set_perms/restore_perms error. */ + rval = -1; + goto done; + } + /* Lock first record to gain exclusive access. */ + if (!timestamp_lock_record(fd, -1, sizeof(struct timestamp_entry))) { + sudo_warn(U_("unable to lock time stamp file %s"), fname); + rval = -1; goto done; - sudo_lock_file(fd, SUDO_LOCK); + } /* * Find matching entries and invalidate them. */ - while (ts_find_record(fd, ×tamp_key, &entry)) { - /* Set record position hint for use by update_timestamp() */ - timestamp_hint = lseek(fd, (off_t)0, SEEK_CUR); - if (timestamp_hint != (off_t)-1) - timestamp_hint -= (off_t)entry.size; - /* Disable the entry. */ - SET(entry.flags, TS_DISABLED); - ts_update_record(fd, &entry, timestamp_hint); + ts_fill(&key, NULL, 0); + while (ts_find_record(fd, &key, &entry)) { + /* Back up and disable the entry. */ + if (!ISSET(entry.flags, TS_DISABLED)) { + SET(entry.flags, TS_DISABLED); + lseek(fd, 0 - (off_t)sizeof(entry), SEEK_CUR); + if (ts_write(fd, fname, &entry, -1) == -1) + rval = false; + } } - close(fd); done: - debug_return; + if (fd != -1) + close(fd); + free(fname); + debug_return_int(rval); } /* @@ -618,14 +911,13 @@ /* * Create the lecture status file. - * Returns true on success or false on failure. + * Returns true on success, false on failure or -1 on setuid failure. */ -bool +int set_lectured(void) { char lecture_status[PATH_MAX]; - bool uid_changed = false; - int len, fd = -1; + int len, fd, rval = false; debug_decl(set_lectured, SUDOERS_DEBUG_AUTH) len = snprintf(lecture_status, sizeof(lecture_status), "%s/%s", @@ -641,14 +933,22 @@ goto done; /* Create lecture file. */ - if (timestamp_uid != 0) - uid_changed = set_perms(PERM_TIMESTAMP); - fd = open(lecture_status, O_WRONLY|O_CREAT|O_TRUNC, 0600); - if (uid_changed) - (void) restore_perms(); - if (fd != -1) + fd = ts_open(lecture_status, O_WRONLY|O_CREAT|O_EXCL); + switch (fd) { + case TIMESTAMP_OPEN_ERROR: + /* Failed to open, not a fatal error. */ + break; + case TIMESTAMP_PERM_ERROR: + /* Already logged set_perms/restore_perms error. */ + rval = -1; + break; + default: + /* Success. */ close(fd); + rval = true; + break; + } done: - debug_return_bool(fd != -1 ? true : false); + debug_return_int(rval); } diff -Nru sudo-1.8.12/plugins/sudoers/timestr.c sudo-1.8.16/plugins/sudoers/timestr.c --- sudo-1.8.12/plugins/sudoers/timestr.c 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/timestr.c 2015-10-31 23:34:59.000000000 +0000 @@ -18,14 +18,7 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #include #include "sudo_compat.h" diff -Nru sudo-1.8.12/plugins/sudoers/toke.c sudo-1.8.16/plugins/sudoers/toke.c --- sudo-1.8.12/plugins/sudoers/toke.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/toke.c 2016-03-17 16:13:10.000000000 +0000 @@ -306,100 +306,105 @@ *yy_cp = '\0'; \ yy_c_buf_p = yy_cp; -#define YY_NUM_RULES 67 -#define YY_END_OF_BUFFER 68 -static yyconst short int yy_accept[814] = +#define YY_NUM_RULES 71 +#define YY_END_OF_BUFFER 72 +static yyconst short int yy_accept[862] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 68, 55, 63, 62, 61, 54, - 65, 34, 56, 57, 34, 58, 55, 55, 55, 55, - 60, 59, 66, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 66, 55, 55, 63, 65, 46, 46, - 46, 46, 46, 2, 66, 1, 55, 46, 46, 55, - 17, 16, 17, 16, 16, 66, 65, 66, 3, 9, - 8, 9, 4, 9, 5, 66, 13, 13, 13, 11, - 12, 66, 19, 19, 18, 18, 18, 19, 18, 18, - 18, 19, 19, 19, 19, 19, 18, 19, 19, 55, - - 0, 63, 61, 65, 65, 0, 55, 36, 0, 34, - 0, 35, 0, 53, 53, 0, 55, 55, 0, 55, - 55, 55, 55, 0, 39, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 55, 64, 55, - 55, 63, 0, 0, 0, 0, 0, 65, 55, 55, - 55, 55, 55, 2, 1, 0, 1, 47, 47, 0, - 55, 17, 17, 15, 14, 15, 0, 0, 3, 9, - 0, 6, 7, 9, 9, 13, 0, 13, 13, 0, - 10, 36, 0, 0, 35, 19, 19, 0, 19, 0, - 0, 18, 18, 18, 18, 18, 18, 19, 19, 46, - - 19, 19, 19, 19, 19, 19, 19, 65, 65, 0, - 36, 55, 55, 55, 55, 55, 0, 0, 39, 39, - 46, 41, 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 55, 55, 0, 0, 0, 0, - 0, 65, 55, 55, 55, 55, 55, 0, 55, 10, - 0, 0, 0, 18, 18, 18, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 65, 55, 55, - 55, 55, 55, 55, 0, 40, 40, 40, 0, 0, - 39, 39, 39, 39, 39, 39, 39, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 42, 46, 43, - - 55, 55, 55, 55, 0, 0, 0, 0, 0, 65, - 55, 55, 55, 55, 0, 0, 0, 0, 0, 18, - 18, 19, 46, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 55, 55, 55, 0, 0, 40, 40, - 40, 0, 39, 39, 0, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 0, 27, 46, 46, - 46, 46, 46, 46, 46, 46, 44, 46, 55, 55, - 55, 55, 55, 0, 0, 0, 65, 55, 55, 55, - 0, 0, 0, 18, 18, 46, 46, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, 55, 55, - - 55, 55, 55, 0, 40, 0, 39, 39, 39, 0, - 0, 0, 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 48, 49, 50, 51, 55, 0, - 0, 65, 55, 55, 55, 0, 0, 0, 0, 0, - 46, 46, 19, 46, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 37, 37, 37, 0, 0, 39, 39, - 39, 39, 39, 39, 39, 0, 0, 0, 0, 0, - 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 46, 46, 46, 0, 26, 46, - - 46, 46, 46, 0, 25, 0, 28, 55, 0, 0, - 65, 55, 55, 55, 37, 37, 37, 46, 46, 46, - 46, 19, 19, 19, 55, 37, 37, 37, 37, 0, - 39, 0, 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 0, 0, 0, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, 39, 46, - 46, 46, 46, 46, 46, 46, 52, 0, 0, 65, - 55, 22, 47, 0, 37, 37, 37, 37, 46, 46, - 46, 46, 19, 19, 19, 38, 38, 38, 38, 39, - 0, 0, 0, 39, 39, 39, 39, 39, 39, 39, - - 39, 39, 39, 39, 39, 39, 0, 0, 0, 0, - 0, 39, 39, 39, 39, 39, 39, 39, 39, 46, - 46, 46, 46, 46, 0, 24, 0, 29, 0, 22, - 65, 65, 55, 0, 55, 38, 38, 38, 38, 46, - 46, 46, 46, 55, 55, 38, 38, 38, 38, 0, - 0, 0, 0, 0, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 45, 0, 32, 46, 46, 46, - 0, 65, 65, 20, 65, 23, 22, 0, 0, 0, - 0, 0, 22, 0, 0, 0, 38, 38, 38, 38, - - 46, 46, 46, 55, 55, 55, 0, 0, 0, 39, - 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 0, 30, 46, - 46, 23, 65, 0, 22, 0, 0, 0, 46, 46, - 55, 55, 55, 55, 55, 0, 0, 0, 0, 0, - 39, 39, 39, 39, 39, 39, 39, 39, 0, 33, - 46, 65, 0, 0, 0, 0, 0, 46, 55, 55, - 55, 39, 39, 39, 39, 39, 39, 0, 31, 65, - 65, 21, 0, 0, 0, 55, 55, 55, 55, 55, - 39, 39, 39, 39, 39, 0, 0, 0, 0, 0, - - 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 0 + 0, 0, 0, 0, 72, 59, 67, 66, 65, 58, + 69, 38, 60, 61, 38, 62, 59, 59, 59, 59, + 64, 63, 70, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 70, 59, 59, 67, 69, + 50, 50, 50, 50, 50, 2, 70, 1, 59, 50, + 50, 59, 17, 16, 17, 16, 16, 70, 69, 70, + 3, 9, 8, 9, 4, 9, 5, 70, 13, 13, + 13, 11, 12, 70, 19, 19, 18, 18, 18, 19, + 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, + + 18, 19, 19, 59, 0, 67, 65, 69, 69, 0, + 59, 40, 0, 38, 0, 39, 0, 57, 57, 0, + 59, 59, 0, 59, 59, 59, 59, 0, 43, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 59, 68, 59, 59, 67, 0, 0, + 0, 0, 0, 69, 59, 59, 59, 59, 59, 2, + 1, 0, 1, 51, 51, 0, 59, 17, 17, 15, + 14, 15, 0, 0, 3, 9, 0, 6, 7, 9, + 9, 13, 0, 13, 13, 0, 10, 40, 0, 0, + 39, 19, 19, 0, 19, 0, 0, 18, 18, 18, + + 18, 18, 18, 19, 19, 50, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 69, 69, 0, 40, 59, + 59, 59, 59, 59, 0, 0, 43, 43, 50, 45, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 59, 59, 0, 0, + 0, 0, 0, 69, 59, 59, 59, 59, 59, 0, + 59, 10, 0, 0, 0, 18, 18, 18, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 69, 59, 59, 59, 59, 59, 59, + 0, 44, 44, 44, 0, 0, 43, 43, 43, 43, + + 43, 43, 43, 50, 50, 50, 50, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 46, 50, 47, + 59, 59, 59, 59, 0, 0, 0, 0, 0, 69, + 59, 59, 59, 59, 0, 0, 0, 0, 0, 18, + 18, 19, 19, 50, 19, 19, 19, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 59, 59, 59, + 0, 0, 44, 44, 44, 0, 43, 43, 0, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 0, 27, 50, 50, 50, 50, 0, 34, 50, 50, + 50, 50, 50, 50, 50, 48, 50, 59, 59, 59, + + 59, 59, 0, 0, 0, 69, 59, 59, 59, 0, + 0, 0, 18, 18, 19, 50, 50, 19, 19, 19, + 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, + 59, 59, 59, 59, 59, 0, 44, 0, 43, 43, + 43, 0, 0, 0, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 50, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 50, 52, + 53, 54, 55, 59, 0, 0, 69, 59, 59, 59, + 0, 0, 0, 0, 0, 19, 50, 50, 19, 19, + 50, 19, 19, 19, 19, 19, 19, 19, 19, 19, + + 19, 41, 41, 41, 0, 0, 43, 43, 43, 43, + 43, 43, 43, 0, 0, 0, 0, 0, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 0, 36, 50, 50, 50, 0, 26, 50, + 50, 50, 0, 35, 50, 50, 0, 25, 0, 28, + 59, 0, 0, 69, 59, 59, 59, 41, 41, 41, + 50, 50, 19, 50, 50, 19, 19, 19, 59, 41, + 41, 41, 41, 0, 43, 0, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 0, 0, 0, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + + 43, 43, 43, 50, 50, 50, 50, 50, 50, 50, + 50, 56, 0, 0, 69, 59, 22, 51, 0, 41, + 41, 41, 41, 50, 50, 19, 50, 50, 19, 19, + 19, 42, 42, 42, 42, 43, 0, 0, 0, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 0, 0, 0, 0, 0, 43, 43, 43, + 43, 43, 43, 43, 43, 50, 50, 50, 0, 37, + 50, 50, 0, 24, 0, 29, 0, 22, 69, 69, + 59, 0, 59, 42, 42, 42, 42, 50, 50, 50, + 50, 59, 59, 42, 42, 42, 42, 0, 0, 0, + + 0, 0, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 49, 0, 32, 50, 50, 50, 0, 69, + 69, 20, 69, 23, 22, 0, 0, 0, 0, 0, + 22, 0, 0, 0, 42, 42, 42, 42, 50, 50, + 50, 59, 59, 59, 0, 0, 0, 43, 43, 43, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 0, 30, 50, 50, 23, + 69, 0, 22, 0, 0, 0, 50, 50, 59, 59, + 59, 59, 59, 0, 0, 0, 0, 0, 43, 43, + + 43, 43, 43, 43, 43, 43, 0, 33, 50, 69, + 0, 0, 0, 0, 0, 50, 59, 59, 59, 43, + 43, 43, 43, 43, 43, 0, 31, 69, 69, 21, + 0, 0, 0, 59, 59, 59, 59, 59, 43, 43, + 43, 43, 43, 0, 0, 0, 0, 0, 41, 41, + 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, + 0 } ; static yyconst int yy_ec[256] = @@ -410,14 +415,14 @@ 1, 2, 4, 5, 6, 1, 7, 1, 1, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 1, 1, - 27, 28, 10, 29, 30, 31, 32, 33, 34, 31, - 35, 36, 37, 38, 38, 39, 40, 41, 42, 43, - 38, 44, 45, 46, 47, 48, 49, 50, 51, 38, - 10, 52, 10, 1, 53, 1, 54, 55, 56, 57, - - 58, 59, 60, 61, 62, 60, 60, 63, 64, 65, - 66, 60, 60, 67, 68, 69, 70, 60, 60, 60, - 60, 60, 1, 1, 1, 1, 1, 1, 1, 1, + 27, 28, 10, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 39, 40, 41, 42, 43, 44, + 39, 45, 46, 47, 48, 49, 50, 51, 52, 39, + 10, 53, 10, 1, 54, 1, 55, 56, 57, 58, + + 59, 60, 61, 62, 63, 61, 61, 64, 65, 66, + 67, 61, 61, 68, 69, 70, 71, 61, 61, 61, + 61, 61, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -434,858 +439,867 @@ 1, 1, 1, 1, 1 } ; -static yyconst int yy_meta[71] = +static yyconst int yy_meta[72] = { 0, 1, 2, 3, 4, 5, 6, 1, 7, 7, 1, 8, 9, 10, 11, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 15, 7, 1, 16, - 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, + 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 18, 19, 20, 20, 20, 20, 20, 20, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21 + 17, 17, 18, 19, 20, 20, 20, 20, 20, 20, + 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21 } ; -static yyconst short int yy_base[931] = +static yyconst short int yy_base[979] = { 0, - 0, 69, 71, 79, 94, 124, 175, 244, 153, 197, - 85, 130, 314, 0, 4514, 4461, 4510, 5604, 4507, 5604, - 382, 86, 5604, 5604, 4458, 5604, 140, 394, 195, 153, - 4483, 5604, 5604, 453, 4383, 43, 508, 37, 4379, 65, - 4378, 4385, 4367, 566, 581, 91, 151, 604, 39, 41, - 4351, 34, 4348, 117, 4402, 4412, 428, 4371, 4382, 136, - 0, 5604, 4407, 5604, 0, 606, 664, 105, 0, 4358, - 5604, 115, 5604, 133, 5604, 138, 4357, 152, 171, 5604, - 188, 383, 641, 694, 737, 235, 245, 794, 843, 4369, - 157, 898, 4365, 4364, 4375, 4370, 944, 0, 206, 4351, - - 266, 4400, 4397, 4397, 5604, 263, 532, 585, 4386, 608, - 707, 4346, 829, 648, 4345, 968, 981, 1018, 4359, 4370, - 563, 708, 422, 4357, 371, 1062, 1106, 4343, 4347, 4340, - 4344, 596, 4333, 4340, 4337, 4329, 4331, 644, 5604, 237, - 137, 946, 4309, 4314, 4305, 4300, 4301, 121, 225, 530, - 377, 369, 335, 445, 4366, 720, 4365, 931, 4314, 1018, - 169, 0, 4361, 160, 5604, 5604, 991, 388, 0, 4312, - 638, 5604, 5604, 4311, 661, 4310, 4356, 392, 221, 420, - 4358, 653, 665, 1139, 4296, 1145, 0, 1173, 1201, 1210, - 1037, 1239, 4333, 1081, 1170, 826, 1288, 1343, 4307, 0, - - 4311, 4309, 899, 4298, 4296, 4287, 4283, 4336, 4335, 1222, - 1258, 1389, 1362, 968, 1428, 4323, 4310, 1472, 520, 1517, - 1561, 1605, 4303, 4297, 4280, 4282, 4289, 4300, 4295, 4283, - 4279, 4292, 4291, 4290, 654, 493, 4258, 4252, 4242, 4244, - 4250, 534, 579, 4253, 491, 407, 506, 1413, 626, 4304, - 4251, 4239, 1651, 1661, 4227, 1705, 0, 4197, 4164, 4155, - 4151, 4151, 4135, 4112, 4111, 811, 4067, 4122, 1749, 378, - 0, 0, 1041, 243, 4098, 4097, 1786, 805, 4096, 4095, - 623, 1410, 1799, 1447, 1091, 1844, 1890, 4094, 429, 4073, - 632, 4084, 4082, 4056, 4054, 4050, 4053, 0, 4046, 0, - - 929, 638, 544, 561, 4022, 4024, 4008, 4022, 4008, 746, - 524, 1063, 413, 662, 1491, 4060, 4059, 4058, 1270, 1900, - 1944, 763, 904, 4037, 4020, 4009, 4007, 3992, 3988, 818, - 3993, 3988, 3912, 1990, 2002, 2014, 3930, 3929, 2024, 3929, - 3912, 3911, 3910, 919, 1536, 1003, 1580, 1142, 2037, 0, - 1626, 2083, 1680, 1372, 2128, 2174, 764, 5604, 3892, 3877, - 3870, 3884, 3862, 3869, 3879, 3879, 0, 3863, 698, 593, - 820, 973, 1093, 3857, 3824, 3825, 922, 897, 969, 1097, - 3866, 3858, 2186, 2196, 3829, 3807, 3800, 3814, 3778, 3784, - 3794, 3793, 3747, 3726, 3716, 3711, 3696, 3656, 2240, 1017, - - 2279, 2291, 1637, 3686, 3662, 3648, 3646, 2301, 1127, 3642, - 3641, 2347, 1154, 1205, 1209, 1724, 1761, 2359, 0, 1763, - 2405, 1774, 1457, 2450, 2496, 2521, 1024, 1127, 1181, 1190, - 1169, 1207, 1224, 1392, 3602, 3584, 3577, 3560, 1240, 3581, - 3547, 1313, 1391, 874, 1774, 1821, 3584, 3576, 3569, 1503, - 3523, 3519, 869, 1379, 3515, 3511, 949, 1045, 0, 0, - 0, 0, 3478, 2577, 1863, 1546, 3510, 3509, 3506, 1919, - 2616, 1963, 1590, 2660, 2706, 2056, 3517, 3509, 3487, 1692, - 1879, 1979, 2096, 2104, 2147, 2106, 2718, 0, 2217, 2764, - 2250, 1734, 2809, 2855, 2880, 2086, 1133, 1088, 5604, 421, - - 2087, 1184, 2088, 1369, 5604, 1370, 5604, 1197, 3418, 3389, - 1282, 2127, 1249, 1368, 3442, 3427, 2936, 3386, 3320, 3309, - 3295, 2951, 1219, 3272, 3006, 1181, 3044, 0, 1709, 3290, - 3263, 2260, 58, 2320, 1774, 3083, 0, 2380, 3129, 2424, - 1831, 3173, 3219, 3270, 3265, 3231, 2336, 2462, 2464, 2471, - 3256, 2477, 3243, 0, 2589, 3289, 2600, 1929, 3335, 3360, - 1376, 1087, 1847, 1409, 1542, 1586, 3218, 3184, 3166, 1832, - 1427, 2060, 3174, 2635, 3210, 3186, 3185, 2435, 3129, 3111, - 3114, 3066, 3429, 1454, 0, 3486, 2679, 2737, 1483, 3085, - 2989, 2839, 3525, 2819, 2003, 2280, 2783, 2381, 3537, 0, - - 2830, 3583, 3016, 2157, 3627, 3673, 3026, 2821, 2801, 2750, - 2228, 2472, 2474, 2695, 1189, 1531, 3685, 0, 2647, 1848, - 1925, 1602, 1522, 1849, 1587, 5604, 1664, 5604, 2692, 1967, - 1630, 2177, 2014, 2406, 2761, 2674, 2630, 3731, 2272, 1926, - 2155, 2500, 1927, 3741, 2076, 3780, 0, 1967, 2277, 3054, - 2598, 2535, 2509, 2841, 2470, 2431, 2485, 2600, 3064, 2617, - 3819, 0, 3104, 3865, 3148, 3036, 3909, 3955, 2390, 2373, - 3966, 3118, 2338, 1742, 2298, 2129, 5604, 2743, 1825, 1738, - 2219, 2153, 1825, 5604, 2062, 2083, 3130, 3172, 3276, 3281, - 1984, 2880, 1920, 3360, 3192, 1912, 1877, 1858, 3274, 1744, - - 2326, 2643, 2745, 3978, 3990, 4002, 1700, 1693, 4014, 1662, - 1623, 2856, 2951, 3496, 3084, 4026, 0, 3508, 4072, 3556, - 3074, 0, 1599, 1510, 1503, 3319, 1423, 2328, 5604, 3154, - 2037, 5604, 2124, 3602, 3646, 1409, 1403, 4118, 2407, 2791, - 4130, 2334, 4142, 4154, 3659, 3704, 1390, 1286, 1251, 3418, - 1158, 1087, 3105, 1077, 1056, 4166, 0, 3568, 2499, 5604, - 3270, 2220, 3751, 1014, 1005, 957, 3614, 2522, 4178, 4190, - 4202, 3761, 3790, 3800, 684, 0, 683, 2685, 5604, 658, - 2222, 5604, 522, 382, 4214, 4226, 2335, 4238, 4250, 3840, - 5604, 3846, 3884, 3202, 5604, 3928, 374, 208, 117, 3716, - - 4260, 4297, 4334, 4045, 4091, 4270, 59, 4371, 3941, 5604, - 4280, 3771, 5604, 4423, 4444, 4465, 4486, 4507, 4528, 4549, - 4570, 4591, 4600, 2074, 4620, 4641, 2383, 4662, 4683, 4704, - 4725, 4746, 4767, 4788, 4809, 2337, 4830, 4839, 4847, 4856, - 4876, 4897, 4918, 2474, 4939, 4960, 4981, 5002, 5011, 5030, - 5039, 5048, 2421, 2516, 5056, 5064, 5072, 5081, 5089, 5096, - 5104, 5112, 5121, 5131, 2600, 2694, 5139, 5147, 5155, 2695, - 2757, 5164, 5174, 5194, 2798, 5203, 5211, 2799, 5220, 5230, - 5250, 2228, 2615, 5259, 5271, 5280, 5290, 2803, 2825, 5299, - 5309, 5318, 5338, 2700, 5347, 5359, 2841, 2872, 5368, 5378, - - 2873, 5387, 5397, 5417, 5438, 5459, 3115, 3116, 5479, 3168, - 5486, 5496, 2951, 2967, 5505, 2520, 5525, 3304, 3313, 5534, - 5544, 3517, 3314, 3318, 5552, 5562, 5582, 3814, 3319, 3430 + 0, 70, 72, 80, 87, 126, 178, 248, 156, 200, + 132, 140, 319, 0, 4925, 4863, 4908, 5587, 4903, 5587, + 388, 95, 5587, 5587, 4853, 5587, 142, 400, 198, 155, + 4878, 5587, 5587, 460, 4863, 37, 40, 516, 62, 4868, + 4851, 49, 4846, 4852, 4831, 575, 590, 125, 223, 613, + 33, 45, 4815, 38, 4805, 94, 4860, 4866, 434, 4822, + 4832, 136, 0, 5587, 4857, 5587, 0, 615, 674, 108, + 0, 4800, 5587, 70, 5587, 104, 5587, 152, 4799, 73, + 135, 5587, 161, 171, 651, 705, 749, 256, 245, 807, + 857, 4807, 82, 151, 913, 4801, 4811, 4797, 4807, 4802, + + 960, 0, 94, 4782, 645, 4831, 4824, 4824, 5587, 266, + 541, 204, 4813, 614, 718, 4771, 843, 947, 4767, 984, + 997, 1035, 4793, 4804, 572, 719, 276, 4790, 175, 1080, + 1125, 4767, 4772, 4761, 4757, 4759, 4756, 406, 4728, 4705, + 4698, 4688, 4688, 391, 5587, 173, 339, 637, 4666, 4663, + 4650, 4644, 4645, 397, 133, 385, 139, 349, 395, 257, + 4711, 731, 4710, 1019, 4658, 1036, 345, 0, 4706, 296, + 5587, 5587, 941, 393, 0, 4649, 654, 5587, 5587, 4643, + 552, 4641, 4687, 435, 595, 425, 4689, 649, 981, 1159, + 4637, 1165, 0, 1194, 1222, 1189, 1057, 1261, 4675, 1100, + + 1221, 840, 1311, 1367, 4631, 0, 4635, 4599, 4597, 4592, + 991, 4583, 4580, 4571, 4563, 4614, 4609, 1236, 1246, 1414, + 1281, 985, 1454, 4595, 4580, 1499, 674, 1545, 1590, 1635, + 4573, 4557, 4558, 4537, 4548, 4534, 4541, 4538, 4550, 4549, + 4543, 4522, 4518, 4528, 4525, 4522, 976, 398, 4489, 4487, + 4477, 4475, 4480, 541, 411, 4483, 396, 490, 499, 1438, + 515, 4535, 4522, 4521, 1682, 1692, 4520, 1737, 0, 4494, + 4480, 4464, 4476, 4464, 4471, 4470, 4454, 4453, 4444, 4430, + 4441, 625, 4407, 4470, 1782, 415, 0, 0, 1061, 658, + 4446, 4445, 1820, 606, 4358, 4357, 702, 1387, 1833, 1435, + + 1110, 1879, 1926, 4356, 660, 4338, 4333, 645, 677, 4345, + 4338, 4341, 4338, 4329, 4327, 4323, 4326, 0, 4329, 0, + 832, 176, 419, 648, 4312, 4314, 4298, 4312, 4298, 660, + 516, 1081, 708, 672, 1474, 4351, 4350, 4349, 1191, 1936, + 1981, 776, 4319, 678, 820, 4327, 4320, 4323, 4320, 4300, + 4298, 4294, 4301, 249, 4318, 4324, 4281, 2028, 2040, 2052, + 4313, 4312, 2062, 4312, 4310, 4309, 4308, 828, 1519, 1139, + 1565, 1162, 2075, 0, 1612, 2122, 1655, 1291, 2168, 2215, + 884, 5587, 4283, 4288, 4289, 4282, 965, 5587, 4276, 4267, + 4252, 4265, 4258, 4269, 4269, 0, 4251, 533, 781, 709, + + 980, 896, 4244, 4226, 4227, 937, 1079, 1109, 1116, 4280, + 4279, 2227, 2237, 4244, 4143, 4139, 4121, 4125, 4095, 4069, + 4071, 4053, 4053, 4042, 4014, 4031, 4017, 4011, 4006, 3948, + 2282, 1035, 2322, 2334, 1667, 3979, 3978, 3977, 3966, 2344, + 1178, 3965, 3953, 2391, 1198, 1299, 1403, 1712, 1749, 2403, + 0, 1762, 2450, 1792, 1484, 2496, 2543, 2568, 1188, 1246, + 1394, 1313, 1419, 1880, 1338, 1393, 1440, 1481, 1524, 3902, + 3890, 3855, 3847, 946, 3863, 3811, 1167, 1164, 575, 983, + 1802, 3860, 3859, 3858, 1577, 1525, 3811, 3801, 1526, 3786, + 1510, 1547, 3753, 3736, 1615, 1616, 0, 0, 0, 0, + + 3712, 2625, 1853, 1722, 3737, 3734, 3687, 1908, 2665, 1956, + 1812, 2710, 2757, 2001, 3675, 3667, 3666, 1968, 1454, 1758, + 1893, 2017, 2095, 2135, 2769, 0, 2148, 2816, 2188, 2105, + 2862, 2909, 1617, 5587, 2934, 1023, 1596, 1637, 5587, 1411, + 1001, 2122, 1695, 5587, 1752, 2181, 1763, 5587, 1858, 5587, + 1393, 3591, 3557, 1130, 2210, 1220, 1721, 3604, 3595, 2991, + 3549, 3540, 3006, 3490, 3464, 1829, 786, 3418, 3062, 1493, + 3101, 0, 1391, 3461, 3446, 2258, 2041, 2292, 2145, 3141, + 0, 2304, 3154, 2364, 2268, 3199, 3246, 3449, 3378, 3258, + 2311, 2380, 2416, 2425, 3364, 2429, 3270, 0, 2472, 3317, + + 2516, 2429, 3364, 3389, 1040, 893, 1915, 1836, 1498, 1981, + 2102, 3301, 3282, 3252, 2100, 1519, 2519, 3264, 2635, 3292, + 3282, 3258, 2646, 3206, 3179, 3459, 3182, 3161, 2007, 2008, + 0, 3517, 2652, 2685, 1619, 3173, 3177, 3142, 3557, 3087, + 2305, 2427, 2730, 2532, 3569, 0, 2791, 3582, 2836, 2483, + 3627, 3674, 2882, 3098, 3077, 3020, 2697, 2746, 2898, 3074, + 1273, 1309, 3686, 0, 2848, 1837, 2171, 1615, 2170, 5587, + 1399, 1871, 2216, 5587, 2264, 5587, 2834, 2368, 1742, 1858, + 2280, 2817, 3088, 2802, 2750, 3698, 2742, 2430, 2548, 2523, + 2452, 3708, 1976, 3748, 0, 2192, 2318, 3085, 2743, 2723, + + 2705, 3113, 2686, 2570, 2666, 2792, 3126, 3006, 3788, 0, + 3176, 3801, 3219, 3119, 3846, 3893, 2509, 2482, 3904, 3235, + 2442, 1772, 2403, 2736, 5587, 2794, 1916, 1979, 2329, 2288, + 2173, 5587, 2261, 2212, 3199, 3304, 3309, 3314, 2182, 2934, + 1982, 3389, 3527, 1994, 1948, 1908, 3448, 1902, 2737, 2889, + 3180, 3916, 3928, 3940, 1873, 1867, 3952, 1808, 1740, 3085, + 3155, 3537, 3298, 3964, 0, 3604, 3977, 3647, 3547, 4024, + 1731, 1704, 1674, 3658, 1667, 2886, 5587, 2888, 2080, 5587, + 2219, 3718, 3728, 1630, 1585, 4036, 2914, 3296, 4048, 2320, + 4060, 4072, 3763, 3769, 1578, 1492, 1467, 3615, 1368, 1248, + + 3330, 1233, 1220, 4084, 0, 2368, 3033, 5587, 3297, 2325, + 3821, 1183, 1094, 1016, 3833, 3126, 4096, 4108, 4120, 3866, + 3997, 4130, 924, 0, 830, 3181, 5587, 754, 2492, 5587, + 694, 586, 4142, 4154, 3100, 4166, 4178, 3878, 5587, 4188, + 4198, 3738, 5587, 4208, 571, 286, 244, 4009, 4218, 4256, + 4294, 4228, 4238, 4266, 55, 4332, 4248, 5587, 4304, 3779, + 5587, 4385, 4406, 4427, 4448, 4469, 4490, 4511, 4532, 4553, + 4562, 2563, 4582, 4603, 2523, 4624, 4645, 4666, 4687, 4708, + 4729, 4750, 4771, 2567, 4792, 4801, 4809, 4818, 4838, 4859, + 4880, 2794, 4901, 4922, 4943, 4964, 4985, 4994, 5013, 5022, + + 5031, 2466, 2897, 5039, 5047, 5055, 5064, 5072, 5079, 5087, + 5095, 5104, 5114, 2898, 3084, 5122, 5130, 5138, 3085, 3187, + 5147, 5157, 5177, 3234, 5186, 5194, 3235, 5203, 5213, 5233, + 2681, 2785, 5242, 5254, 5263, 5273, 3238, 3342, 5282, 5292, + 5301, 5321, 2832, 5330, 5342, 3347, 3348, 5351, 5361, 3352, + 5370, 5380, 5400, 5421, 5442, 3353, 3357, 5462, 3358, 5469, + 5479, 2926, 3006, 5488, 3559, 5508, 3460, 3598, 5517, 5527, + 3615, 3643, 5535, 5545, 5565, 4279, 3763, 3817 } ; -static yyconst short int yy_def[931] = +static yyconst short int yy_def[979] = { 0, - 813, 1, 1, 1, 814, 814, 815, 815, 816, 816, - 817, 817, 813, 13, 813, 818, 813, 813, 813, 813, - 819, 820, 813, 813, 821, 813, 822, 818, 28, 28, - 823, 813, 813, 813, 34, 34, 34, 37, 37, 37, - 37, 37, 37, 818, 28, 818, 813, 819, 34, 34, - 37, 37, 37, 813, 824, 813, 825, 37, 37, 818, - 826, 813, 826, 813, 826, 813, 819, 813, 827, 828, - 813, 828, 813, 828, 813, 829, 830, 830, 830, 813, - 813, 831, 832, 833, 813, 85, 85, 85, 813, 89, - 89, 89, 92, 92, 92, 92, 85, 88, 88, 818, - - 818, 813, 813, 834, 813, 835, 813, 820, 836, 831, - 820, 821, 821, 822, 837, 818, 818, 28, 838, 118, - 118, 118, 118, 839, 840, 37, 126, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 818, 813, 818, - 818, 813, 813, 813, 813, 813, 813, 834, 818, 118, - 818, 818, 818, 813, 813, 813, 813, 841, 842, 818, - 818, 843, 843, 813, 813, 813, 835, 813, 844, 845, - 845, 813, 813, 845, 845, 830, 813, 830, 830, 813, - 813, 831, 831, 831, 846, 847, 88, 846, 848, 813, - 813, 85, 192, 192, 192, 192, 813, 197, 198, 849, - - 198, 198, 198, 198, 198, 88, 88, 834, 850, 813, - 813, 818, 212, 212, 118, 215, 851, 813, 852, 813, - 127, 221, 222, 222, 222, 222, 222, 222, 222, 222, - 222, 222, 222, 222, 818, 818, 813, 813, 813, 813, - 813, 834, 818, 215, 818, 818, 818, 813, 818, 813, - 853, 854, 813, 88, 254, 197, 198, 198, 198, 198, - 198, 198, 198, 198, 198, 88, 88, 850, 818, 818, - 212, 212, 212, 818, 855, 856, 856, 277, 857, 856, - 858, 220, 813, 283, 283, 813, 283, 222, 222, 222, - 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, - - 818, 818, 818, 818, 813, 813, 813, 813, 813, 834, - 818, 818, 818, 818, 813, 813, 853, 853, 813, 254, - 197, 198, 859, 198, 198, 198, 198, 198, 198, 88, - 88, 88, 88, 212, 212, 212, 813, 860, 860, 339, - 860, 861, 862, 863, 813, 864, 286, 864, 813, 349, - 864, 813, 352, 352, 813, 352, 813, 813, 222, 222, - 222, 222, 222, 222, 222, 222, 222, 222, 818, 818, - 818, 818, 818, 813, 813, 813, 834, 818, 818, 818, - 865, 866, 813, 88, 321, 859, 859, 198, 198, 198, - 198, 198, 198, 88, 88, 88, 88, 88, 818, 818, - - 212, 212, 818, 867, 867, 868, 869, 813, 813, 870, - 871, 813, 872, 872, 873, 355, 873, 813, 418, 873, - 813, 421, 421, 813, 421, 813, 426, 426, 426, 426, - 426, 426, 426, 426, 818, 818, 818, 818, 818, 813, - 813, 874, 818, 818, 818, 813, 813, 875, 875, 813, - 859, 859, 198, 859, 198, 198, 198, 198, 88, 88, - 88, 88, 88, 818, 464, 464, 813, 876, 877, 408, - 813, 471, 471, 813, 471, 813, 813, 878, 878, 813, - 813, 879, 879, 880, 424, 880, 813, 487, 880, 813, - 490, 490, 813, 490, 813, 495, 495, 813, 813, 495, - - 495, 495, 495, 813, 813, 813, 813, 818, 813, 813, - 881, 818, 818, 818, 882, 883, 813, 884, 884, 884, - 884, 813, 522, 885, 818, 818, 818, 527, 527, 813, - 886, 813, 887, 474, 887, 813, 536, 887, 813, 539, - 539, 813, 539, 888, 889, 813, 813, 890, 890, 891, - 892, 891, 813, 553, 891, 813, 556, 556, 556, 813, - 560, 560, 560, 560, 560, 560, 818, 813, 813, 893, - 818, 818, 818, 813, 813, 894, 894, 813, 895, 895, - 895, 895, 813, 583, 896, 818, 586, 586, 586, 813, - 897, 898, 813, 899, 899, 900, 542, 900, 813, 599, - - 900, 813, 602, 602, 813, 602, 813, 813, 901, 901, - 813, 813, 902, 902, 903, 903, 813, 617, 903, 560, - 560, 560, 560, 560, 813, 813, 813, 813, 813, 813, - 904, 893, 818, 905, 906, 907, 908, 813, 907, 909, - 909, 909, 909, 818, 818, 818, 646, 646, 818, 813, - 813, 910, 910, 813, 813, 911, 911, 912, 605, 912, - 813, 661, 912, 813, 664, 664, 813, 664, 913, 914, - 813, 813, 915, 915, 560, 813, 813, 560, 560, 560, - 813, 904, 904, 813, 893, 818, 905, 905, 905, 905, - 916, 905, 917, 917, 813, 813, 907, 907, 813, 813, - - 909, 909, 909, 646, 646, 646, 918, 919, 813, 813, - 920, 920, 921, 667, 921, 813, 716, 921, 813, 719, - 719, 922, 813, 913, 913, 813, 813, 813, 813, 560, - 560, 813, 893, 813, 813, 923, 924, 813, 909, 909, - 646, 818, 646, 646, 818, 813, 813, 918, 918, 813, - 813, 925, 925, 926, 926, 926, 756, 926, 813, 813, - 560, 927, 813, 813, 923, 923, 813, 909, 646, 646, - 646, 813, 813, 813, 813, 928, 928, 813, 813, 927, - 927, 813, 929, 930, 813, 646, 818, 646, 646, 818, - 813, 813, 813, 813, 813, 813, 813, 929, 929, 813, - - 818, 818, 818, 813, 813, 813, 818, 818, 818, 813, - 813, 813, 0, 813, 813, 813, 813, 813, 813, 813, - 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, - 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, - 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, - 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, - 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, - 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, - 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, - 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, - - 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, - 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, - 813, 813, 813, 813, 813, 813, 813, 813, 813, 813 + 861, 1, 1, 1, 862, 862, 863, 863, 864, 864, + 865, 865, 861, 13, 861, 866, 861, 861, 861, 861, + 867, 868, 861, 861, 869, 861, 870, 866, 28, 28, + 871, 861, 861, 861, 34, 34, 34, 34, 38, 38, + 38, 38, 38, 38, 38, 866, 28, 866, 861, 867, + 34, 34, 38, 38, 38, 861, 872, 861, 873, 38, + 38, 866, 874, 861, 874, 861, 874, 861, 867, 861, + 875, 876, 861, 876, 861, 876, 861, 877, 878, 878, + 878, 861, 861, 879, 880, 881, 861, 87, 87, 87, + 861, 91, 91, 91, 91, 95, 95, 95, 95, 95, + + 87, 90, 90, 866, 866, 861, 861, 882, 861, 883, + 861, 868, 884, 879, 868, 869, 869, 870, 885, 866, + 866, 28, 886, 122, 122, 122, 122, 887, 888, 38, + 130, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 866, 861, 866, 866, 861, 861, 861, + 861, 861, 861, 882, 866, 122, 866, 866, 866, 861, + 861, 861, 861, 889, 890, 866, 866, 891, 891, 861, + 861, 861, 883, 861, 892, 893, 893, 861, 861, 893, + 893, 894, 861, 894, 894, 861, 861, 879, 879, 879, + 895, 896, 90, 895, 897, 861, 861, 87, 198, 198, + + 198, 198, 861, 203, 204, 898, 204, 204, 204, 204, + 204, 204, 204, 90, 90, 882, 899, 861, 861, 866, + 220, 220, 122, 223, 900, 861, 901, 861, 131, 229, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 866, 866, 861, 861, + 861, 861, 861, 882, 866, 223, 866, 866, 866, 861, + 866, 861, 902, 903, 861, 90, 266, 203, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, + 204, 90, 90, 899, 866, 866, 220, 220, 220, 866, + 904, 905, 905, 293, 906, 905, 907, 228, 861, 299, + + 299, 861, 299, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 866, 866, 866, 866, 861, 861, 861, 861, 861, 882, + 866, 866, 866, 866, 861, 861, 902, 902, 861, 266, + 203, 204, 204, 908, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 90, 90, 90, 90, 220, 220, 220, + 861, 909, 909, 363, 909, 910, 911, 912, 861, 913, + 302, 913, 861, 373, 913, 861, 376, 376, 861, 376, + 861, 861, 230, 230, 230, 230, 861, 861, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 866, 866, 866, + + 866, 866, 861, 861, 861, 882, 866, 866, 866, 914, + 915, 861, 90, 341, 204, 908, 908, 204, 204, 204, + 204, 204, 204, 204, 204, 90, 90, 90, 90, 90, + 866, 866, 220, 220, 866, 916, 916, 917, 918, 861, + 861, 919, 920, 861, 921, 921, 922, 379, 922, 861, + 450, 922, 861, 453, 453, 861, 453, 861, 458, 458, + 458, 458, 458, 458, 458, 458, 458, 458, 458, 866, + 866, 866, 866, 866, 861, 861, 923, 866, 866, 866, + 861, 861, 924, 924, 861, 204, 908, 908, 204, 204, + 908, 204, 204, 204, 204, 204, 90, 90, 90, 90, + + 90, 866, 502, 502, 861, 925, 926, 440, 861, 509, + 509, 861, 509, 861, 861, 927, 927, 861, 861, 928, + 928, 929, 456, 929, 861, 525, 929, 861, 528, 528, + 861, 528, 861, 861, 861, 535, 535, 861, 861, 535, + 535, 535, 861, 861, 535, 535, 861, 861, 861, 861, + 866, 861, 861, 930, 866, 866, 866, 931, 932, 861, + 933, 933, 861, 933, 933, 563, 563, 934, 866, 866, + 866, 571, 571, 861, 935, 861, 936, 512, 936, 936, + 580, 936, 861, 583, 583, 861, 583, 937, 938, 861, + 861, 939, 939, 940, 941, 940, 861, 597, 940, 861, + + 600, 600, 600, 861, 604, 604, 604, 604, 604, 604, + 604, 866, 861, 861, 942, 866, 866, 866, 861, 861, + 943, 943, 861, 944, 944, 861, 944, 944, 626, 626, + 945, 866, 632, 632, 632, 861, 946, 947, 861, 948, + 948, 949, 586, 949, 949, 645, 949, 861, 648, 648, + 861, 648, 861, 861, 950, 950, 861, 861, 951, 951, + 952, 952, 952, 663, 952, 604, 604, 604, 861, 861, + 604, 604, 861, 861, 861, 861, 861, 861, 953, 942, + 866, 954, 955, 956, 957, 861, 956, 958, 958, 958, + 958, 866, 866, 866, 694, 694, 866, 861, 861, 959, + + 959, 861, 861, 960, 960, 961, 651, 961, 961, 709, + 961, 861, 712, 712, 861, 712, 962, 963, 861, 861, + 964, 964, 604, 861, 861, 604, 604, 604, 861, 953, + 953, 861, 942, 866, 954, 954, 954, 954, 965, 954, + 966, 966, 861, 861, 956, 956, 861, 861, 958, 958, + 958, 694, 694, 694, 967, 968, 861, 861, 969, 969, + 970, 715, 970, 970, 764, 970, 861, 767, 767, 767, + 861, 962, 962, 861, 861, 861, 861, 604, 604, 861, + 942, 861, 861, 971, 972, 861, 958, 958, 694, 866, + 694, 694, 866, 861, 861, 967, 967, 861, 861, 973, + + 973, 974, 974, 974, 804, 804, 861, 861, 604, 975, + 861, 861, 971, 971, 861, 958, 694, 694, 694, 861, + 861, 861, 861, 976, 976, 861, 861, 975, 975, 861, + 977, 978, 861, 694, 866, 694, 694, 866, 861, 861, + 861, 861, 861, 861, 861, 977, 977, 861, 866, 866, + 866, 861, 861, 861, 866, 866, 866, 861, 861, 861, + 0, 861, 861, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, + + 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 861, 861, 861, 861, 861, 861 } ; -static yyconst short int yy_nxt[5675] = +static yyconst short int yy_nxt[5659] = { 0, 16, 17, 18, 19, 20, 21, 22, 23, 24, 16, 25, 26, 16, 16, 27, 28, 29, 30, 28, 28, 28, 28, 28, 28, 28, 31, 32, 33, 16, 34, - 35, 35, 35, 36, 37, 37, 37, 37, 38, 37, - 39, 37, 40, 41, 42, 43, 37, 37, 37, 37, - 37, 44, 16, 45, 45, 45, 45, 45, 45, 16, - 16, 16, 16, 16, 16, 16, 16, 46, 16, 16, - 47, 532, 54, 130, 48, 135, 55, 127, 131, 127, - 54, 127, 56, 534, 55, 57, 78, 18, 79, 80, - 56, 109, 129, 57, 133, 17, 62, 63, 150, 64, - - 49, 50, 149, 152, 51, 64, 168, 139, 134, 58, - 101, 110, 52, 59, 37, 53, 37, 58, 154, 64, - 65, 59, 37, 105, 37, 17, 62, 63, 155, 64, - 796, 78, 18, 79, 80, 64, 81, 111, 60, 175, - 139, 172, 101, 115, 115, 66, 60, 115, 115, 64, - 65, 140, 142, 178, 17, 18, 19, 71, 67, 173, - 141, 168, 139, 72, 73, 74, 171, 115, 122, 122, - 122, 122, 122, 123, 179, 66, 17, 18, 19, 75, - 67, 81, 143, 144, 171, 242, 145, 101, 101, 180, - 181, 116, 176, 236, 146, 198, 140, 147, 17, 18, - - 19, 71, 67, 177, 76, 161, 201, 72, 73, 74, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 101, 796, 177, 75, 179, 249, 68, 69, 69, 69, - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 69, 17, 18, 19, 76, 67, - 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, - 195, 195, 195, 195, 195, 196, 206, 100, 119, 100, - 100, 100, 177, 100, 100, 207, 101, 100, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 101, 243, - 235, 100, 100, 100, 101, 68, 69, 69, 69, 69, - - 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, - 69, 69, 69, 69, 33, 17, 18, 19, 33, 33, - 82, 23, 24, 33, 83, 26, 33, 33, 84, 85, - 86, 87, 85, 85, 85, 85, 85, 85, 85, 31, - 88, 33, 33, 89, 90, 90, 90, 91, 92, 92, - 92, 92, 93, 92, 94, 92, 95, 92, 96, 92, - 92, 92, 92, 92, 92, 68, 33, 97, 97, 97, - 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, - 98, 99, 98, 98, 105, 218, 101, 796, 109, 168, - 139, 269, 247, 178, 106, 796, 220, 107, 107, 107, - - 107, 107, 107, 107, 107, 107, 107, 117, 183, 118, - 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, - 101, 180, 181, 120, 120, 120, 120, 120, 101, 101, - 357, 159, 159, 246, 184, 159, 159, 216, 216, 216, - 216, 216, 216, 177, 245, 101, 154, 120, 120, 120, - 120, 120, 120, 100, 358, 159, 155, 127, 101, 100, - 313, 563, 100, 100, 101, 100, 100, 100, 126, 126, - 126, 126, 126, 126, 126, 126, 126, 126, 119, 160, - 311, 100, 126, 126, 126, 126, 126, 127, 127, 127, - 127, 128, 127, 127, 127, 127, 127, 127, 127, 127, - - 127, 127, 127, 127, 101, 127, 120, 120, 120, 120, - 120, 120, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 813, 218, 796, 105, 127, 127, 127, - 127, 127, 101, 100, 101, 282, 127, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 101, 304, 311, - 372, 100, 100, 100, 100, 100, 100, 138, 139, 100, - 100, 100, 311, 100, 100, 101, 378, 100, 216, 216, - 216, 216, 216, 216, 216, 216, 216, 216, 244, 310, - 813, 100, 100, 100, 100, 101, 120, 120, 120, 120, - - 120, 120, 120, 120, 120, 120, 105, 164, 139, 165, - 813, 166, 101, 109, 436, 165, 106, 166, 373, 107, - 107, 107, 107, 107, 107, 107, 107, 107, 107, 226, - 101, 166, 166, 813, 227, 311, 111, 218, 228, 170, - 229, 185, 170, 170, 101, 168, 139, 185, 282, 170, - 185, 115, 115, 185, 185, 115, 115, 166, 813, 184, - 782, 371, 168, 139, 170, 148, 105, 187, 360, 185, - 109, 301, 302, 361, 303, 115, 167, 101, 813, 813, - 813, 813, 813, 813, 813, 813, 813, 813, 813, 101, - 813, 314, 188, 185, 115, 101, 532, 115, 115, 116, - - 115, 115, 115, 115, 184, 101, 115, 115, 108, 714, - 108, 108, 171, 101, 108, 108, 184, 435, 108, 380, - 187, 115, 115, 216, 216, 216, 216, 216, 216, 216, - 216, 216, 216, 108, 108, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 190, 115, 187, 105, 101, - 191, 187, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 119, 187, 357, 357, 193, 193, 193, 193, - 193, 187, 187, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 187, 187, 187, 187, 187, 187, 358, 358, - 193, 193, 193, 193, 193, 193, 187, 187, 187, 187, - - 187, 187, 187, 187, 187, 187, 187, 813, 377, 187, - 187, 187, 187, 187, 187, 187, 187, 187, 187, 813, - 341, 341, 341, 187, 187, 187, 187, 187, 330, 331, - 112, 332, 112, 112, 112, 394, 112, 112, 395, 437, - 112, 255, 255, 255, 255, 255, 255, 187, 187, 187, - 187, 187, 187, 187, 112, 112, 112, 187, 197, 197, - 197, 197, 197, 197, 197, 197, 197, 197, 119, 187, - 498, 101, 197, 197, 197, 197, 197, 198, 198, 198, - 198, 199, 198, 198, 198, 198, 198, 198, 198, 198, - 198, 198, 198, 198, 499, 200, 193, 193, 193, 193, - - 193, 193, 187, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 187, 198, 198, 198, 198, 198, 198, 198, - 198, 198, 198, 813, 105, 101, 443, 198, 198, 198, - 198, 198, 260, 218, 159, 159, 198, 261, 159, 159, - 386, 262, 513, 263, 282, 387, 369, 142, 101, 370, - 504, 187, 187, 187, 187, 187, 187, 813, 159, 193, - 193, 193, 193, 193, 193, 193, 193, 193, 193, 114, - 763, 100, 100, 114, 505, 100, 100, 143, 144, 114, - 101, 145, 160, 272, 272, 272, 272, 272, 273, 146, - 438, 442, 147, 114, 114, 100, 212, 213, 214, 212, - - 212, 212, 212, 212, 212, 212, 813, 813, 813, 813, - 813, 813, 813, 813, 813, 813, 345, 218, 763, 158, - 101, 100, 100, 158, 101, 100, 100, 763, 347, 158, - 399, 444, 101, 215, 215, 215, 215, 215, 215, 215, - 215, 215, 215, 158, 158, 100, 506, 215, 215, 215, - 215, 215, 251, 252, 253, 251, 251, 251, 251, 251, - 251, 251, 100, 100, 100, 100, 496, 127, 101, 813, - 507, 215, 215, 215, 215, 215, 215, 221, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 119, 119, 498, - 532, 221, 221, 221, 221, 221, 255, 255, 255, 255, - - 255, 255, 255, 255, 255, 255, 350, 350, 350, 350, - 350, 351, 714, 499, 101, 215, 215, 215, 215, 215, - 215, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 813, 379, 622, 127, 127, 127, 127, 127, 127, - 182, 218, 182, 182, 101, 185, 182, 182, 101, 439, - 182, 185, 282, 445, 185, 813, 218, 185, 185, 100, - 100, 100, 100, 100, 100, 182, 182, 347, 218, 127, - 127, 187, 497, 185, 185, 562, 185, 185, 185, 347, - 185, 185, 498, 659, 185, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 525, 188, 185, 185, 185, - - 185, 115, 345, 218, 115, 115, 499, 115, 115, 115, - 115, 115, 127, 115, 115, 115, 565, 502, 345, 218, - 127, 115, 345, 218, 127, 504, 500, 187, 115, 115, - 347, 501, 101, 127, 416, 115, 115, 211, 211, 211, - 211, 211, 211, 211, 211, 211, 211, 503, 101, 505, - 127, 198, 190, 115, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 746, 567, 584, 127, 254, 254, - 254, 254, 254, 211, 211, 211, 211, 211, 211, 211, - 211, 211, 211, 315, 105, 316, 316, 316, 316, 316, - 316, 101, 254, 254, 254, 254, 254, 254, 187, 746, - - 101, 508, 187, 256, 256, 256, 256, 256, 256, 256, - 256, 256, 256, 119, 187, 105, 572, 256, 256, 256, - 256, 256, 198, 198, 198, 198, 198, 198, 198, 198, - 198, 198, 198, 198, 198, 198, 198, 198, 198, 570, - 200, 254, 254, 254, 254, 254, 254, 187, 187, 187, - 187, 187, 187, 187, 187, 187, 187, 187, 198, 198, - 198, 198, 198, 198, 198, 198, 198, 198, 813, 511, - 504, 506, 198, 198, 198, 198, 198, 271, 271, 271, - 271, 271, 271, 271, 271, 271, 271, 419, 419, 419, - 419, 419, 420, 506, 505, 507, 187, 187, 187, 187, - - 187, 187, 269, 746, 270, 270, 270, 270, 270, 270, - 270, 270, 270, 270, 159, 520, 763, 507, 159, 101, - 521, 621, 763, 127, 159, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 127, 573, 218, 159, 159, - 101, 100, 101, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 512, 624, 627, 127, 274, 274, 274, - 274, 274, 349, 349, 349, 349, 349, 349, 349, 349, - 349, 349, 488, 488, 488, 488, 488, 489, 101, 628, - 633, 274, 274, 274, 274, 274, 274, 276, 277, 278, - 278, 278, 278, 278, 278, 278, 278, 279, 649, 649, - - 649, 280, 280, 280, 280, 280, 381, 382, 383, 381, - 381, 381, 381, 381, 381, 381, 446, 218, 447, 447, - 447, 447, 447, 447, 218, 280, 280, 280, 280, 280, - 280, 218, 283, 284, 285, 283, 283, 283, 283, 283, - 283, 283, 286, 625, 813, 218, 287, 287, 287, 287, - 287, 410, 411, 412, 410, 410, 410, 410, 410, 410, - 410, 528, 528, 528, 528, 528, 529, 626, 679, 127, - 287, 287, 287, 287, 287, 287, 288, 288, 288, 288, - 288, 288, 288, 288, 288, 288, 119, 627, 625, 127, - 288, 288, 288, 288, 288, 356, 356, 356, 356, 356, - - 356, 356, 356, 356, 356, 537, 537, 537, 537, 537, - 538, 628, 626, 218, 274, 274, 274, 274, 274, 274, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 813, 683, 684, 127, 127, 127, 127, 127, 127, 345, - 218, 414, 414, 414, 414, 414, 414, 678, 659, 127, - 399, 347, 400, 400, 400, 400, 400, 400, 100, 100, - 100, 100, 100, 100, 315, 627, 318, 318, 318, 318, - 318, 319, 316, 316, 316, 316, 320, 320, 320, 320, - 320, 320, 320, 320, 320, 320, 119, 597, 101, 628, - 320, 320, 320, 320, 320, 418, 418, 418, 418, 418, - - 418, 418, 418, 418, 418, 476, 746, 477, 477, 477, - 477, 477, 477, 746, 320, 320, 320, 320, 320, 320, - 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, - 100, 100, 100, 100, 321, 321, 321, 321, 321, 425, - 425, 425, 425, 425, 425, 425, 425, 425, 425, 554, - 554, 554, 554, 554, 555, 345, 218, 695, 320, 320, - 320, 320, 320, 320, 334, 335, 336, 334, 334, 334, - 334, 334, 334, 334, 813, 218, 345, 218, 483, 483, - 483, 483, 483, 483, 731, 127, 416, 813, 416, 487, - 487, 487, 487, 487, 487, 487, 487, 487, 487, 534, - - 101, 339, 339, 340, 341, 341, 341, 341, 341, 341, - 341, 279, 345, 218, 346, 346, 346, 346, 346, 346, - 346, 346, 346, 346, 347, 101, 683, 684, 348, 348, - 348, 348, 348, 631, 105, 514, 515, 516, 517, 515, - 515, 515, 515, 515, 515, 515, 600, 600, 600, 600, - 600, 601, 348, 348, 348, 348, 348, 348, 218, 352, - 353, 354, 352, 352, 352, 352, 352, 352, 352, 355, - 730, 695, 127, 356, 356, 356, 356, 356, 527, 527, - 527, 527, 527, 527, 527, 527, 527, 527, 632, 623, - 695, 680, 675, 218, 127, 127, 127, 356, 356, 356, - - 356, 356, 356, 813, 347, 348, 348, 348, 348, 348, - 348, 348, 348, 348, 348, 384, 384, 384, 384, 384, - 384, 384, 384, 384, 384, 695, 676, 676, 813, 384, - 384, 384, 384, 384, 475, 475, 475, 475, 475, 475, - 475, 475, 475, 475, 618, 618, 618, 618, 618, 619, - 677, 677, 813, 384, 384, 384, 384, 384, 384, 385, - 385, 385, 385, 385, 385, 385, 385, 385, 385, 703, - 634, 694, 127, 385, 385, 385, 385, 385, 536, 536, - 536, 536, 536, 536, 536, 536, 536, 536, 100, 100, - 100, 100, 634, 218, 634, 634, 734, 384, 384, 384, - - 384, 384, 384, 399, 416, 400, 400, 400, 400, 400, - 400, 400, 400, 400, 400, 399, 532, 401, 401, 401, - 401, 401, 401, 401, 401, 401, 401, 399, 534, 402, - 402, 402, 402, 402, 403, 400, 400, 400, 400, 405, - 405, 405, 405, 405, 405, 405, 405, 405, 405, 279, - 345, 218, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 347, 634, 105, 101, 413, 413, 413, 413, - 413, 544, 545, 546, 544, 544, 544, 544, 544, 544, - 544, 686, 761, 107, 127, 634, 107, 634, 635, 644, - 413, 413, 413, 413, 413, 413, 345, 218, 415, 415, - - 415, 415, 415, 415, 415, 415, 415, 415, 416, 345, - 218, 101, 417, 417, 417, 417, 417, 345, 218, 813, - 218, 416, 127, 127, 127, 762, 105, 101, 733, 485, - 676, 485, 561, 564, 101, 566, 417, 417, 417, 417, - 417, 417, 218, 421, 422, 423, 421, 421, 421, 421, - 421, 421, 421, 424, 677, 684, 813, 425, 425, 425, - 425, 425, 494, 494, 494, 494, 494, 494, 494, 494, - 494, 494, 662, 662, 662, 662, 662, 663, 101, 105, - 813, 425, 425, 425, 425, 425, 425, 813, 571, 417, - 417, 417, 417, 417, 417, 417, 417, 417, 417, 446, - - 701, 449, 449, 449, 449, 449, 450, 447, 447, 447, - 447, 384, 384, 384, 384, 384, 384, 384, 384, 384, - 384, 781, 782, 781, 782, 384, 384, 384, 384, 384, - 345, 218, 549, 549, 549, 549, 549, 549, 685, 575, - 575, 607, 485, 608, 608, 608, 608, 608, 608, 384, - 384, 384, 384, 384, 384, 464, 465, 466, 464, 464, - 464, 464, 464, 464, 464, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 553, 591, 592, 593, 591, 591, - 591, 591, 591, 591, 591, 695, 732, 700, 700, 700, - 644, 101, 399, 532, 400, 400, 400, 400, 400, 400, - - 400, 400, 400, 400, 399, 597, 400, 400, 400, 400, - 400, 400, 400, 400, 400, 400, 471, 472, 473, 471, - 471, 471, 471, 471, 471, 471, 474, 728, 101, 728, - 475, 475, 475, 475, 475, 543, 543, 543, 543, 543, - 543, 543, 543, 543, 543, 127, 211, 741, 786, 211, - 218, 729, 218, 729, 475, 475, 475, 475, 475, 475, - 476, 416, 479, 479, 479, 479, 479, 480, 477, 477, - 477, 477, 345, 218, 483, 483, 483, 483, 483, 483, - 483, 483, 483, 483, 416, 101, 101, 218, 482, 482, - 482, 482, 482, 532, 813, 595, 595, 595, 595, 595, - - 595, 169, 169, 169, 218, 534, 597, 688, 759, 689, - 690, 691, 482, 482, 482, 482, 482, 482, 345, 218, - 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, - 485, 316, 760, 316, 486, 486, 486, 486, 486, 599, - 599, 599, 599, 599, 599, 599, 599, 599, 599, 574, - 575, 575, 575, 575, 575, 575, 597, 692, 486, 486, - 486, 486, 486, 486, 218, 490, 491, 492, 490, 490, - 490, 490, 490, 490, 490, 493, 218, 345, 218, 494, - 494, 494, 494, 494, 345, 218, 218, 485, 218, 485, - 813, 218, 169, 169, 169, 534, 551, 485, 532, 551, - - 759, 813, 551, 494, 494, 494, 494, 494, 494, 813, - 597, 486, 486, 486, 486, 486, 486, 486, 486, 486, - 486, 100, 650, 778, 760, 813, 317, 100, 317, 735, - 100, 100, 735, 100, 100, 100, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 702, 779, 650, 100, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 495, 127, 127, 127, 127, 127, - 127, 127, 101, 127, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 525, 526, 526, 526, 526, 526, 526, 526, 526, - - 526, 526, 345, 218, 614, 614, 614, 614, 614, 614, - 447, 650, 447, 532, 551, 617, 617, 617, 617, 617, - 617, 617, 617, 617, 617, 659, 576, 576, 101, 532, - 813, 533, 533, 533, 533, 533, 533, 533, 533, 533, - 533, 534, 659, 695, 813, 535, 535, 535, 535, 535, - 636, 637, 638, 639, 636, 636, 636, 636, 636, 636, - 345, 218, 674, 674, 674, 674, 674, 674, 813, 535, - 535, 535, 535, 535, 535, 539, 540, 541, 539, 539, - 539, 539, 539, 539, 539, 542, 778, 695, 739, 543, - 543, 543, 543, 543, 646, 646, 646, 646, 646, 646, - - 646, 646, 646, 646, 448, 477, 448, 477, 345, 218, - 779, 575, 575, 543, 543, 543, 543, 543, 543, 813, - 551, 535, 535, 535, 535, 535, 535, 535, 535, 535, - 535, 345, 218, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 485, 728, 681, 813, 548, 548, 548, - 548, 548, 647, 647, 647, 647, 647, 648, 649, 649, - 649, 649, 688, 607, 689, 690, 691, 478, 729, 478, - 813, 548, 548, 548, 548, 548, 548, 345, 218, 550, - 550, 550, 550, 550, 550, 550, 550, 550, 550, 551, - 127, 740, 813, 552, 552, 552, 552, 552, 606, 606, - - 606, 606, 606, 606, 606, 606, 606, 606, 447, 477, - 447, 477, 694, 608, 607, 608, 813, 552, 552, 552, - 552, 552, 552, 218, 556, 557, 558, 556, 556, 556, - 556, 556, 556, 556, 607, 609, 768, 609, 559, 559, - 559, 559, 559, 532, 534, 657, 657, 657, 657, 657, - 657, 651, 650, 651, 650, 597, 651, 651, 651, 651, - 651, 651, 559, 559, 559, 559, 559, 559, 813, 532, - 552, 552, 552, 552, 552, 552, 552, 552, 552, 552, - 100, 659, 652, 608, 652, 608, 100, 687, 687, 100, - 100, 687, 100, 100, 100, 127, 127, 127, 127, 127, - - 127, 127, 127, 127, 127, 687, 687, 687, 100, 127, - 127, 127, 127, 127, 127, 127, 560, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 101, 127, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 574, 577, 577, 577, 577, 577, 578, 575, 575, 575, - 575, 187, 723, 723, 532, 187, 198, 198, 198, 198, - 198, 198, 198, 198, 198, 198, 714, 187, 724, 724, - 198, 198, 198, 583, 198, 198, 198, 198, 198, 198, - 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, - - 198, 198, 650, 200, 187, 187, 187, 187, 187, 187, - 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, - 187, 586, 587, 588, 589, 586, 586, 586, 586, 586, - 586, 661, 661, 661, 661, 661, 661, 661, 661, 661, - 661, 669, 670, 671, 669, 669, 669, 669, 669, 669, - 669, 717, 717, 717, 717, 717, 718, 101, 525, 526, - 526, 526, 526, 526, 526, 526, 526, 526, 526, 707, - 708, 709, 707, 707, 707, 707, 707, 707, 707, 668, - 668, 668, 668, 668, 668, 668, 668, 668, 668, 757, - 757, 757, 757, 757, 758, 101, 532, 813, 595, 595, - - 595, 595, 595, 595, 595, 595, 595, 595, 534, 714, - 470, 643, 594, 594, 594, 594, 594, 532, 532, 712, - 712, 712, 712, 712, 712, 696, 697, 696, 697, 659, - 714, 813, 218, 813, 813, 813, 594, 594, 594, 594, - 594, 594, 532, 551, 596, 596, 596, 596, 596, 596, - 596, 596, 596, 596, 597, 759, 642, 641, 598, 598, - 598, 598, 598, 716, 716, 716, 716, 716, 716, 716, - 716, 716, 716, 688, 640, 689, 690, 691, 651, 760, - 651, 692, 598, 598, 598, 598, 598, 598, 602, 603, - 604, 602, 602, 602, 602, 602, 602, 602, 605, 574, - - 574, 127, 606, 606, 606, 606, 606, 736, 737, 738, - 736, 736, 736, 736, 736, 736, 736, 791, 791, 791, - 791, 791, 791, 692, 574, 101, 606, 606, 606, 606, - 606, 606, 813, 630, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 607, 629, 610, 610, 610, 610, - 610, 611, 608, 608, 608, 608, 345, 218, 614, 614, - 614, 614, 614, 614, 614, 614, 614, 614, 551, 101, - 218, 778, 613, 613, 613, 613, 613, 813, 607, 689, - 690, 691, 813, 607, 813, 813, 691, 695, 470, 696, - 696, 696, 696, 696, 696, 779, 613, 613, 613, 613, - - 613, 613, 345, 218, 615, 615, 615, 615, 615, 615, - 615, 615, 615, 615, 747, 343, 747, 127, 616, 616, - 616, 616, 616, 748, 764, 748, 764, 692, 765, 797, - 765, 797, 692, 218, 723, 723, 723, 723, 723, 723, - 585, 582, 616, 616, 616, 616, 616, 616, 813, 581, - 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, - 100, 693, 580, 693, 693, 693, 100, 693, 693, 100, - 100, 693, 100, 100, 100, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 693, 693, 693, 100, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - - 127, 127, 127, 127, 127, 127, 127, 620, 127, 127, - 127, 101, 127, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 625, 746, 579, 747, 747, 747, 747, 747, 747, 187, - 798, 574, 798, 187, 198, 198, 198, 198, 198, 198, - 198, 198, 198, 198, 626, 187, 574, 569, 198, 198, - 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, - 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, - 568, 200, 187, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 187, 187, 187, 187, 187, 187, 187, 644, - - 476, 645, 645, 645, 645, 645, 645, 645, 645, 645, - 645, 722, 722, 722, 722, 722, 722, 722, 722, 722, - 722, 532, 476, 753, 753, 753, 753, 753, 753, 755, - 476, 470, 755, 714, 343, 279, 755, 101, 650, 524, - 653, 653, 653, 653, 653, 654, 651, 651, 651, 651, - 532, 523, 657, 657, 657, 657, 657, 657, 657, 657, - 657, 657, 597, 522, 519, 518, 656, 656, 656, 656, - 656, 756, 756, 756, 756, 756, 756, 756, 756, 756, - 756, 532, 446, 777, 777, 777, 777, 777, 777, 446, - 656, 656, 656, 656, 656, 656, 532, 446, 658, 658, - - 658, 658, 658, 658, 658, 658, 658, 658, 659, 510, - 509, 101, 660, 660, 660, 660, 660, 735, 735, 735, - 735, 735, 735, 735, 735, 735, 735, 763, 101, 764, - 764, 764, 764, 764, 764, 101, 660, 660, 660, 660, - 660, 660, 664, 665, 666, 664, 664, 664, 664, 664, - 664, 664, 667, 101, 476, 476, 668, 668, 668, 668, - 668, 735, 735, 735, 735, 735, 735, 735, 735, 735, - 735, 470, 741, 343, 742, 742, 742, 742, 742, 742, - 668, 668, 668, 668, 668, 668, 813, 279, 660, 660, - 660, 660, 660, 660, 660, 660, 660, 660, 345, 218, - - 674, 674, 674, 674, 674, 674, 674, 674, 674, 674, - 101, 279, 463, 462, 673, 673, 673, 673, 673, 772, - 773, 774, 772, 772, 772, 772, 772, 772, 772, 796, - 461, 797, 797, 797, 797, 797, 797, 460, 673, 673, - 673, 673, 673, 673, 695, 459, 698, 698, 698, 698, - 698, 699, 700, 700, 700, 700, 704, 705, 706, 704, - 704, 704, 704, 704, 704, 704, 783, 784, 785, 783, - 783, 783, 783, 783, 783, 783, 791, 791, 791, 791, - 791, 791, 791, 791, 791, 791, 810, 810, 810, 810, - 810, 810, 101, 644, 458, 645, 645, 645, 645, 645, - - 645, 645, 645, 645, 645, 792, 792, 792, 792, 792, - 792, 792, 792, 792, 792, 793, 793, 793, 793, 793, - 794, 791, 791, 791, 791, 457, 795, 456, 455, 795, - 454, 101, 532, 795, 712, 712, 712, 712, 712, 712, - 712, 712, 712, 712, 659, 453, 452, 451, 711, 711, - 711, 711, 711, 786, 813, 787, 787, 787, 787, 787, - 787, 791, 791, 791, 791, 791, 791, 791, 791, 791, - 791, 446, 711, 711, 711, 711, 711, 711, 532, 446, - 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, - 714, 101, 374, 441, 715, 715, 715, 715, 715, 791, - - 791, 791, 791, 791, 791, 791, 791, 791, 791, 440, - 434, 433, 432, 431, 430, 429, 428, 427, 715, 715, - 715, 715, 715, 715, 719, 720, 721, 719, 719, 719, - 719, 719, 719, 719, 426, 408, 343, 279, 722, 722, - 722, 722, 722, 804, 805, 806, 804, 804, 804, 804, - 804, 804, 804, 404, 279, 125, 807, 807, 807, 807, - 807, 807, 722, 722, 722, 722, 722, 722, 813, 398, - 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, - 218, 725, 725, 725, 725, 725, 726, 723, 723, 723, - 723, 741, 101, 742, 742, 742, 742, 742, 742, 742, - - 742, 742, 742, 741, 397, 743, 743, 743, 743, 743, - 743, 743, 743, 743, 743, 741, 396, 744, 744, 744, - 744, 744, 745, 742, 742, 742, 742, 746, 393, 749, - 749, 749, 749, 749, 750, 747, 747, 747, 747, 532, - 392, 753, 753, 753, 753, 753, 753, 753, 753, 753, - 753, 714, 391, 390, 389, 752, 752, 752, 752, 752, - 810, 810, 810, 810, 810, 810, 810, 810, 810, 810, - 388, 315, 315, 315, 374, 376, 374, 375, 374, 752, - 752, 752, 752, 752, 752, 532, 368, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 367, 366, 365, - - 364, 755, 755, 755, 755, 755, 804, 804, 804, 804, - 804, 804, 804, 804, 804, 804, 363, 362, 359, 119, - 279, 343, 279, 125, 105, 755, 755, 755, 755, 755, - 755, 763, 333, 766, 766, 766, 766, 766, 767, 764, - 764, 764, 764, 100, 329, 769, 770, 771, 769, 769, - 769, 769, 769, 769, 769, 741, 328, 742, 742, 742, - 742, 742, 742, 742, 742, 742, 742, 741, 327, 742, - 742, 742, 742, 742, 742, 742, 742, 742, 742, 532, - 326, 777, 777, 777, 777, 777, 777, 777, 777, 777, - 777, 786, 325, 787, 787, 787, 787, 787, 787, 787, - - 787, 787, 787, 786, 324, 788, 788, 788, 788, 788, - 788, 788, 788, 788, 788, 786, 323, 789, 789, 789, - 789, 789, 790, 787, 787, 787, 787, 796, 322, 799, - 799, 799, 799, 799, 800, 797, 797, 797, 797, 100, - 191, 801, 802, 803, 801, 801, 801, 801, 801, 801, - 801, 786, 315, 787, 787, 787, 787, 787, 787, 787, - 787, 787, 787, 786, 315, 787, 787, 787, 787, 787, - 787, 787, 787, 787, 787, 807, 807, 807, 807, 807, - 807, 807, 807, 807, 807, 811, 811, 811, 811, 811, - 812, 810, 810, 810, 810, 810, 810, 810, 810, 810, - - 810, 810, 810, 810, 810, 250, 312, 309, 308, 307, - 306, 101, 801, 801, 801, 801, 801, 801, 801, 801, - 801, 801, 305, 300, 299, 298, 297, 296, 295, 294, - 293, 292, 291, 290, 289, 125, 117, 105, 105, 267, - 266, 265, 264, 259, 258, 257, 813, 188, 101, 808, - 808, 808, 808, 808, 809, 807, 807, 807, 807, 250, - 176, 177, 171, 171, 163, 248, 157, 157, 241, 240, - 239, 238, 237, 234, 233, 232, 231, 230, 225, 224, - 223, 222, 125, 100, 125, 101, 807, 807, 807, 807, - 807, 807, 807, 807, 807, 807, 190, 113, 210, 105, - - 103, 102, 101, 205, 204, 203, 202, 198, 177, 171, - 163, 133, 131, 157, 156, 153, 151, 137, 136, 135, - 132, 127, 101, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 70, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, - - 77, 77, 77, 77, 77, 77, 77, 100, 125, 113, - 103, 102, 101, 813, 100, 813, 100, 100, 100, 100, - 813, 813, 100, 100, 100, 100, 100, 100, 104, 104, + 35, 35, 35, 36, 37, 38, 38, 38, 38, 39, + 40, 41, 38, 42, 43, 44, 45, 38, 38, 38, + 38, 38, 46, 16, 47, 47, 47, 47, 47, 47, + 16, 16, 16, 16, 16, 16, 16, 16, 48, 16, + 16, 49, 131, 56, 184, 50, 131, 57, 139, 131, + 141, 56, 134, 58, 131, 57, 59, 133, 17, 64, + 65, 58, 66, 140, 59, 160, 178, 155, 66, 135, + + 113, 51, 52, 156, 136, 161, 53, 105, 158, 174, + 145, 60, 66, 67, 54, 61, 38, 55, 38, 60, + 114, 204, 177, 61, 38, 183, 38, 17, 64, 65, + 179, 66, 207, 80, 18, 81, 82, 66, 185, 68, + 62, 80, 18, 81, 82, 119, 119, 115, 62, 119, + 119, 66, 67, 181, 145, 214, 177, 17, 18, 19, + 73, 69, 186, 187, 215, 182, 74, 75, 76, 119, + 126, 126, 126, 126, 126, 127, 113, 105, 68, 17, + 18, 19, 77, 69, 83, 105, 146, 183, 105, 226, + 204, 105, 83, 208, 120, 147, 189, 146, 255, 400, + + 228, 17, 18, 19, 73, 69, 167, 257, 78, 861, + 74, 75, 76, 125, 125, 125, 125, 125, 125, 125, + 125, 125, 125, 190, 148, 105, 77, 247, 105, 861, + 70, 71, 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71, 71, 17, + 18, 19, 78, 69, 149, 150, 115, 844, 160, 151, + 201, 201, 201, 201, 201, 202, 426, 152, 161, 427, + 153, 200, 200, 200, 200, 200, 200, 200, 200, 200, + 200, 111, 111, 111, 111, 111, 111, 111, 111, 111, + 111, 224, 224, 224, 224, 224, 224, 174, 145, 844, + + 70, 71, 71, 71, 71, 71, 71, 71, 71, 71, + 71, 71, 71, 71, 71, 71, 71, 71, 71, 33, + 17, 18, 19, 33, 33, 84, 23, 24, 33, 85, + 26, 33, 33, 86, 87, 88, 89, 87, 87, 87, + 87, 87, 87, 87, 31, 90, 33, 33, 91, 92, + 92, 92, 93, 94, 95, 95, 95, 95, 96, 97, + 98, 95, 99, 95, 100, 95, 95, 95, 95, 95, + 95, 70, 33, 101, 101, 101, 101, 101, 101, 102, + 102, 102, 102, 102, 102, 102, 102, 103, 102, 102, + 109, 105, 174, 145, 174, 145, 248, 105, 104, 109, + + 110, 105, 261, 111, 111, 111, 111, 111, 111, 111, + 111, 111, 111, 121, 258, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 123, 186, 187, 285, 124, + 124, 124, 124, 124, 124, 401, 184, 165, 165, 236, + 237, 165, 165, 105, 256, 238, 239, 105, 105, 240, + 105, 241, 105, 259, 124, 124, 124, 124, 124, 124, + 104, 165, 254, 105, 324, 331, 104, 105, 331, 104, + 104, 105, 104, 104, 104, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 123, 166, 183, 104, 130, + 130, 130, 130, 130, 130, 131, 131, 131, 131, 132, + + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 105, 131, 124, 124, 124, 124, 124, 124, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 861, 105, 109, 333, 131, 131, 131, 131, 131, + 131, 105, 470, 174, 145, 131, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 331, 105, 105, 407, + 104, 104, 104, 104, 104, 104, 144, 145, 104, 104, + 104, 334, 104, 104, 844, 105, 104, 224, 224, 224, + 224, 224, 224, 224, 224, 224, 224, 330, 185, 844, + + 104, 104, 104, 104, 177, 124, 124, 124, 124, 124, + 124, 124, 124, 124, 124, 109, 170, 145, 171, 113, + 172, 365, 365, 365, 171, 110, 172, 105, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 111, 148, 861, + 172, 172, 354, 355, 556, 356, 104, 183, 104, 104, + 104, 191, 104, 104, 861, 176, 104, 191, 176, 176, + 191, 381, 109, 191, 191, 176, 190, 172, 149, 150, + 104, 104, 104, 151, 861, 154, 109, 193, 387, 191, + 176, 152, 385, 123, 153, 382, 173, 386, 226, 861, + 861, 861, 861, 861, 861, 861, 861, 861, 861, 298, + + 105, 190, 388, 194, 191, 119, 402, 844, 119, 119, + 105, 119, 119, 119, 119, 416, 226, 119, 119, 112, + 417, 112, 112, 406, 105, 112, 112, 298, 472, 112, + 409, 193, 119, 119, 224, 224, 224, 224, 224, 224, + 224, 224, 224, 224, 112, 112, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 830, 196, 119, 193, + 105, 105, 197, 193, 198, 198, 198, 198, 198, 198, + 198, 198, 198, 198, 123, 193, 331, 381, 199, 199, + 199, 199, 199, 199, 193, 193, 193, 193, 193, 193, + 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, + + 193, 382, 471, 199, 199, 199, 199, 199, 199, 193, + 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, + 861, 387, 193, 193, 193, 193, 193, 193, 193, 193, + 193, 193, 861, 105, 630, 204, 193, 193, 193, 193, + 193, 193, 226, 576, 116, 388, 116, 116, 116, 398, + 116, 116, 399, 298, 116, 267, 267, 267, 267, 267, + 267, 193, 193, 193, 193, 193, 193, 193, 116, 116, + 116, 193, 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 123, 193, 105, 381, 203, 203, 203, 203, + 203, 203, 204, 204, 204, 204, 205, 204, 204, 204, + + 204, 204, 204, 204, 204, 204, 204, 204, 204, 382, + 206, 199, 199, 199, 199, 199, 199, 193, 193, 193, + 193, 193, 193, 193, 193, 193, 193, 193, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, 861, 109, + 668, 131, 204, 204, 204, 204, 204, 204, 105, 762, + 119, 119, 204, 474, 119, 119, 861, 861, 861, 861, + 861, 861, 861, 861, 861, 861, 387, 193, 193, 193, + 193, 193, 193, 861, 119, 199, 199, 199, 199, 199, + 199, 199, 199, 199, 199, 118, 113, 104, 104, 118, + 388, 104, 104, 321, 322, 118, 323, 473, 105, 120, + + 288, 288, 288, 288, 288, 289, 861, 477, 551, 118, + 118, 104, 220, 221, 222, 220, 220, 220, 220, 220, + 220, 220, 165, 165, 274, 275, 165, 165, 105, 811, + 276, 277, 105, 190, 278, 105, 279, 164, 131, 104, + 104, 164, 608, 104, 104, 557, 165, 164, 431, 105, + 223, 223, 223, 223, 223, 223, 223, 223, 223, 223, + 131, 164, 164, 104, 223, 223, 223, 223, 223, 223, + 605, 166, 263, 264, 265, 263, 263, 263, 263, 263, + 263, 263, 104, 104, 104, 104, 667, 105, 131, 223, + 223, 223, 223, 223, 223, 229, 229, 229, 229, 229, + + 229, 229, 229, 229, 229, 123, 123, 811, 478, 229, + 229, 229, 229, 229, 229, 267, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 374, 374, 374, 374, 374, + 375, 105, 109, 105, 223, 223, 223, 223, 223, 223, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 861, 408, 369, 226, 131, 131, 131, 131, 131, 131, + 188, 105, 188, 188, 371, 191, 188, 188, 105, 109, + 188, 191, 479, 480, 191, 861, 226, 191, 191, 104, + 104, 104, 104, 104, 104, 188, 188, 371, 615, 861, + 119, 193, 226, 191, 119, 191, 811, 191, 191, 191, + + 119, 191, 191, 298, 335, 191, 336, 336, 336, 336, + 336, 336, 226, 861, 119, 119, 105, 194, 191, 191, + 191, 191, 119, 371, 554, 119, 119, 555, 119, 119, + 119, 119, 535, 861, 119, 119, 267, 267, 267, 267, + 267, 267, 267, 267, 267, 267, 576, 861, 193, 119, + 119, 219, 219, 219, 219, 219, 219, 219, 219, 219, + 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, + 219, 861, 105, 762, 196, 119, 266, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 369, 226, 617, 536, + 266, 266, 266, 266, 266, 266, 287, 287, 287, 287, + + 287, 287, 287, 287, 287, 287, 451, 451, 451, 451, + 451, 452, 369, 226, 538, 266, 266, 266, 266, 266, + 266, 193, 861, 226, 371, 193, 268, 268, 268, 268, + 268, 268, 268, 268, 268, 268, 123, 193, 539, 543, + 268, 268, 268, 268, 268, 268, 204, 204, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 544, 206, 266, 266, 266, 266, 266, + 266, 193, 193, 193, 193, 193, 193, 193, 193, 193, + 193, 193, 204, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 861, 707, 861, 861, 204, 204, 204, 204, + + 204, 204, 303, 303, 303, 303, 303, 303, 303, 303, + 303, 303, 104, 104, 104, 104, 369, 226, 861, 861, + 861, 193, 193, 193, 193, 193, 193, 285, 448, 286, + 286, 286, 286, 286, 286, 286, 286, 286, 286, 165, + 537, 861, 545, 165, 861, 105, 727, 131, 131, 165, + 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, + 607, 540, 612, 165, 165, 861, 105, 104, 226, 290, + 290, 290, 290, 290, 290, 290, 290, 290, 290, 371, + 794, 546, 547, 290, 290, 290, 290, 290, 290, 410, + 411, 412, 410, 410, 410, 410, 410, 410, 410, 526, + + 526, 526, 526, 526, 527, 794, 548, 569, 290, 290, + 290, 290, 290, 290, 292, 293, 294, 294, 294, 294, + 294, 294, 294, 294, 295, 549, 533, 538, 296, 296, + 296, 296, 296, 296, 442, 443, 444, 442, 442, 442, + 442, 442, 442, 442, 672, 105, 131, 564, 543, 550, + 534, 539, 565, 296, 296, 296, 296, 296, 296, 226, + 299, 300, 301, 299, 299, 299, 299, 299, 299, 299, + 302, 105, 544, 681, 303, 303, 303, 303, 303, 303, + 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, + 481, 794, 482, 482, 482, 482, 482, 482, 811, 303, + + 303, 303, 303, 303, 303, 304, 304, 304, 304, 304, + 304, 304, 304, 304, 304, 123, 547, 549, 533, 304, + 304, 304, 304, 304, 304, 369, 226, 446, 446, 446, + 446, 446, 446, 131, 697, 697, 697, 371, 538, 606, + 548, 550, 534, 811, 290, 290, 290, 290, 290, 290, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 861, 726, 539, 131, 131, 131, 131, 131, 131, 131, + 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, + 431, 226, 432, 432, 432, 432, 432, 432, 226, 104, + 104, 104, 104, 104, 104, 335, 543, 338, 338, 338, + + 338, 338, 339, 336, 336, 336, 336, 340, 340, 340, + 340, 340, 340, 340, 340, 340, 340, 123, 226, 105, + 544, 340, 340, 340, 340, 340, 340, 457, 457, 457, + 457, 457, 457, 457, 457, 457, 457, 572, 572, 572, + 572, 572, 573, 731, 732, 226, 340, 340, 340, 340, + 340, 340, 341, 341, 341, 341, 341, 341, 341, 341, + 341, 341, 861, 226, 547, 707, 341, 341, 341, 341, + 341, 341, 226, 105, 448, 369, 226, 521, 521, 521, + 521, 521, 521, 448, 610, 369, 226, 448, 548, 131, + 618, 340, 340, 340, 340, 340, 340, 358, 359, 360, + + 358, 358, 358, 358, 358, 358, 358, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 558, 559, 560, + 558, 558, 558, 558, 558, 558, 558, 581, 581, 581, + 581, 581, 582, 643, 105, 363, 363, 364, 365, 365, + 365, 365, 365, 365, 365, 295, 369, 226, 370, 370, + 370, 370, 370, 370, 370, 370, 370, 370, 371, 549, + 109, 629, 372, 372, 372, 372, 372, 372, 571, 571, + 571, 571, 571, 571, 571, 571, 571, 571, 204, 671, + 794, 861, 723, 550, 131, 131, 794, 372, 372, 372, + 372, 372, 372, 226, 376, 377, 378, 376, 376, 376, + + 376, 376, 376, 376, 379, 861, 369, 226, 380, 380, + 380, 380, 380, 380, 728, 743, 669, 541, 448, 131, + 733, 743, 542, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 513, 380, 380, 380, 380, 380, 380, 861, + 670, 372, 372, 372, 372, 372, 372, 372, 372, 372, + 372, 413, 413, 413, 413, 413, 413, 413, 413, 413, + 413, 743, 778, 131, 131, 413, 413, 413, 413, 413, + 413, 580, 580, 580, 580, 580, 580, 580, 580, 580, + 580, 514, 673, 515, 515, 515, 515, 515, 515, 692, + 413, 413, 413, 413, 413, 413, 414, 414, 414, 414, + + 414, 414, 414, 414, 414, 414, 674, 743, 673, 675, + 414, 414, 414, 414, 414, 414, 588, 589, 590, 588, + 588, 588, 588, 588, 588, 588, 779, 131, 105, 131, + 369, 226, 674, 676, 742, 413, 413, 413, 413, 413, + 413, 431, 523, 432, 432, 432, 432, 432, 432, 432, + 432, 432, 432, 431, 576, 433, 433, 433, 433, 433, + 433, 433, 433, 433, 433, 431, 578, 434, 434, 434, + 434, 434, 435, 432, 432, 432, 432, 437, 437, 437, + 437, 437, 437, 437, 437, 437, 437, 295, 369, 226, + 446, 446, 446, 446, 446, 446, 446, 446, 446, 446, + + 371, 679, 109, 675, 445, 445, 445, 445, 445, 445, + 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, + 598, 598, 598, 598, 598, 599, 809, 676, 131, 445, + 445, 445, 445, 445, 445, 369, 226, 447, 447, 447, + 447, 447, 447, 447, 447, 447, 447, 448, 861, 226, + 131, 449, 449, 449, 449, 449, 449, 680, 861, 131, + 523, 369, 226, 593, 593, 593, 593, 593, 593, 609, + 578, 669, 724, 523, 731, 732, 449, 449, 449, 449, + 449, 449, 226, 453, 454, 455, 453, 453, 453, 453, + 453, 453, 453, 456, 782, 670, 725, 457, 457, 457, + + 457, 457, 457, 597, 597, 597, 597, 597, 597, 597, + 597, 597, 597, 104, 104, 104, 104, 673, 131, 131, + 810, 109, 457, 457, 457, 457, 457, 457, 861, 611, + 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, + 481, 674, 484, 484, 484, 484, 484, 485, 482, 482, + 482, 482, 413, 413, 413, 413, 413, 413, 413, 413, + 413, 413, 105, 109, 105, 675, 413, 413, 413, 413, + 413, 413, 616, 637, 638, 639, 637, 637, 637, 637, + 637, 637, 637, 646, 646, 646, 646, 646, 647, 676, + 732, 413, 413, 413, 413, 413, 413, 502, 503, 504, + + 502, 502, 502, 502, 502, 502, 502, 587, 587, 587, + 587, 587, 587, 587, 587, 587, 587, 576, 576, 641, + 641, 641, 641, 641, 641, 226, 829, 830, 781, 578, + 578, 692, 105, 789, 105, 431, 448, 432, 432, 432, + 432, 432, 432, 432, 432, 432, 432, 431, 734, 432, + 432, 432, 432, 432, 432, 432, 432, 432, 432, 509, + 510, 511, 509, 509, 509, 509, 509, 509, 509, 512, + 105, 682, 105, 513, 513, 513, 513, 513, 513, 645, + 645, 645, 645, 645, 645, 645, 645, 645, 645, 824, + 824, 824, 824, 682, 226, 682, 682, 780, 513, 513, + + 513, 513, 513, 513, 514, 523, 517, 517, 517, 517, + 517, 518, 515, 515, 515, 515, 369, 226, 521, 521, + 521, 521, 521, 521, 521, 521, 521, 521, 448, 369, + 226, 724, 520, 520, 520, 520, 520, 520, 369, 226, + 576, 523, 861, 226, 664, 664, 664, 664, 664, 665, + 595, 131, 643, 861, 595, 725, 226, 520, 520, 520, + 520, 520, 520, 369, 226, 522, 522, 522, 522, 522, + 522, 522, 522, 522, 522, 523, 336, 861, 336, 524, + 524, 524, 524, 524, 524, 369, 226, 660, 660, 660, + 660, 660, 660, 829, 830, 751, 226, 595, 710, 710, + + 710, 710, 710, 711, 524, 524, 524, 524, 524, 524, + 226, 528, 529, 530, 528, 528, 528, 528, 528, 528, + 528, 531, 682, 226, 861, 532, 532, 532, 532, 532, + 532, 663, 663, 663, 663, 663, 663, 663, 663, 663, + 663, 175, 175, 175, 682, 861, 682, 683, 861, 861, + 532, 532, 532, 532, 532, 532, 861, 643, 524, 524, + 524, 524, 524, 524, 524, 524, 524, 524, 104, 533, + 750, 105, 111, 861, 104, 111, 219, 104, 104, 219, + 104, 104, 104, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 534, 749, 643, 104, 131, 131, 131, + + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 105, 131, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 569, + 570, 570, 570, 570, 570, 570, 570, 570, 570, 570, + 684, 685, 686, 687, 684, 684, 684, 684, 684, 684, + 619, 620, 620, 620, 620, 620, 620, 694, 694, 694, + 694, 694, 694, 694, 694, 694, 694, 105, 576, 576, + 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, + 578, 643, 620, 620, 579, 579, 579, 579, 579, 579, + + 695, 695, 695, 695, 695, 696, 697, 697, 697, 697, + 653, 578, 654, 654, 654, 654, 654, 654, 698, 579, + 579, 579, 579, 579, 579, 583, 584, 585, 583, 583, + 583, 583, 583, 583, 583, 586, 698, 724, 776, 587, + 587, 587, 587, 587, 587, 652, 652, 652, 652, 652, + 652, 652, 652, 652, 652, 743, 698, 748, 748, 748, + 226, 725, 777, 743, 587, 587, 587, 587, 587, 587, + 861, 523, 579, 579, 579, 579, 579, 579, 579, 579, + 579, 579, 369, 226, 593, 593, 593, 593, 593, 593, + 593, 593, 593, 593, 523, 776, 621, 621, 592, 592, + + 592, 592, 592, 592, 576, 576, 705, 705, 705, 705, + 705, 705, 175, 175, 175, 743, 643, 707, 736, 777, + 737, 738, 739, 592, 592, 592, 592, 592, 592, 369, + 226, 594, 594, 594, 594, 594, 594, 594, 594, 594, + 594, 595, 131, 620, 620, 596, 596, 596, 596, 596, + 596, 709, 709, 709, 709, 709, 709, 709, 709, 709, + 709, 369, 226, 722, 722, 722, 722, 722, 722, 740, + 596, 596, 596, 596, 596, 596, 226, 600, 601, 602, + 600, 600, 600, 600, 600, 600, 600, 776, 729, 807, + 861, 603, 603, 603, 603, 603, 603, 717, 718, 719, + + 717, 717, 717, 717, 717, 717, 717, 337, 482, 337, + 482, 777, 226, 808, 861, 807, 603, 603, 603, 603, + 603, 603, 861, 595, 596, 596, 596, 596, 596, 596, + 596, 596, 596, 596, 104, 787, 131, 771, 771, 808, + 104, 735, 735, 104, 104, 735, 104, 104, 104, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 735, + 735, 735, 104, 131, 131, 131, 131, 131, 131, 131, + 131, 604, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 105, 131, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, - 104, 104, 104, 104, 104, 104, 104, 104, 104, 108, - 813, 813, 813, 813, 108, 813, 108, 813, 108, 108, - 108, 108, 108, 813, 108, 108, 108, 108, 108, 108, - 112, 813, 813, 813, 813, 813, 813, 112, 813, 112, - 112, 112, 112, 813, 813, 112, 112, 112, 112, 112, - 112, 114, 813, 813, 114, 114, 813, 114, 114, 813, - - 114, 114, 114, 114, 813, 813, 114, 114, 114, 114, - 114, 114, 124, 124, 813, 124, 813, 813, 813, 124, - 158, 813, 813, 158, 158, 813, 158, 158, 813, 158, - 158, 158, 158, 813, 813, 158, 158, 158, 158, 158, - 158, 162, 813, 813, 162, 162, 813, 162, 162, 813, - 162, 162, 162, 162, 813, 162, 162, 162, 813, 162, - 162, 162, 170, 813, 813, 170, 813, 813, 170, 170, - 813, 170, 170, 170, 170, 170, 813, 170, 170, 170, - 170, 170, 170, 174, 174, 174, 174, 174, 174, 174, - 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, - - 174, 174, 174, 174, 176, 176, 813, 176, 813, 176, - 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, - 176, 176, 176, 176, 176, 182, 813, 813, 813, 813, - 182, 813, 182, 813, 182, 182, 182, 182, 182, 813, - 182, 182, 182, 182, 182, 182, 186, 813, 813, 813, - 813, 813, 813, 186, 813, 186, 186, 186, 186, 813, - 186, 186, 186, 186, 186, 186, 186, 189, 813, 813, - 189, 189, 813, 189, 189, 813, 189, 189, 189, 189, - 813, 189, 189, 189, 189, 189, 189, 189, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - - 208, 208, 208, 208, 208, 208, 208, 208, 208, 209, - 209, 813, 209, 209, 209, 209, 209, 209, 209, 209, - 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, - 115, 813, 813, 115, 115, 813, 115, 115, 813, 115, - 115, 115, 115, 813, 813, 115, 115, 115, 115, 115, - 115, 124, 124, 813, 124, 813, 813, 813, 124, 217, - 217, 813, 217, 813, 813, 813, 217, 219, 219, 219, - 813, 219, 813, 813, 813, 219, 158, 813, 813, 158, - 158, 813, 158, 158, 813, 158, 158, 158, 158, 813, - 813, 158, 158, 158, 158, 158, 158, 159, 813, 813, - - 159, 159, 813, 159, 159, 813, 159, 159, 159, 159, - 813, 813, 159, 159, 159, 159, 159, 159, 162, 813, - 813, 162, 162, 813, 162, 162, 813, 162, 162, 162, - 162, 813, 162, 162, 162, 813, 162, 162, 162, 170, - 813, 813, 170, 813, 813, 170, 170, 813, 170, 170, - 170, 170, 170, 813, 170, 170, 170, 170, 170, 170, - 185, 813, 813, 813, 813, 813, 813, 185, 813, 185, - 185, 185, 185, 813, 813, 185, 185, 185, 185, 185, - 185, 186, 813, 813, 813, 813, 813, 813, 186, 813, - 186, 186, 186, 186, 813, 186, 186, 186, 186, 186, - - 186, 186, 189, 813, 813, 189, 189, 813, 189, 189, - 813, 189, 189, 189, 189, 813, 189, 189, 189, 189, - 189, 189, 189, 200, 813, 813, 200, 200, 813, 200, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 275, 275, 813, 275, 813, 813, 813, 275, 281, - 281, 281, 813, 281, 813, 813, 813, 281, 337, 337, - 813, 337, 813, 813, 813, 337, 338, 338, 813, 338, - 813, 813, 813, 338, 342, 342, 813, 342, 813, 813, - 813, 342, 344, 344, 344, 813, 344, 813, 813, 813, - - 344, 200, 813, 813, 200, 200, 813, 200, 404, 404, - 813, 404, 813, 813, 813, 404, 406, 406, 813, 406, - 813, 813, 813, 406, 407, 407, 813, 407, 813, 813, - 813, 407, 409, 409, 409, 813, 409, 813, 813, 813, - 409, 413, 413, 413, 413, 813, 413, 813, 813, 813, - 413, 467, 467, 813, 467, 813, 813, 813, 467, 468, - 468, 813, 468, 813, 813, 813, 468, 469, 469, 813, - 469, 813, 813, 813, 469, 481, 481, 481, 813, 481, - 813, 813, 813, 481, 482, 482, 482, 482, 813, 482, - 813, 813, 813, 482, 208, 208, 208, 208, 208, 208, - - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 530, 530, 813, 530, 813, - 813, 813, 530, 531, 531, 813, 531, 813, 813, 813, - 531, 547, 547, 547, 813, 547, 813, 813, 813, 547, - 548, 548, 548, 548, 813, 548, 813, 813, 813, 548, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 200, 813, 813, 200, 200, 813, 200, 187, 813, - 813, 813, 187, 187, 813, 187, 187, 187, 813, 813, - 187, 187, 590, 590, 813, 590, 813, 813, 813, 590, - - 594, 813, 594, 594, 813, 594, 813, 813, 813, 594, - 612, 612, 612, 813, 612, 813, 813, 813, 612, 613, - 613, 613, 613, 813, 613, 813, 813, 813, 613, 559, - 559, 813, 813, 559, 813, 813, 813, 559, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 200, - 813, 813, 200, 200, 813, 200, 187, 813, 813, 813, - 187, 187, 813, 187, 187, 187, 813, 813, 187, 187, - 655, 655, 813, 655, 813, 813, 813, 655, 656, 813, - 656, 656, 813, 656, 813, 813, 813, 656, 672, 672, - - 672, 813, 672, 813, 813, 813, 672, 673, 673, 673, - 813, 813, 673, 813, 813, 813, 673, 682, 682, 682, - 682, 682, 682, 682, 682, 682, 682, 682, 682, 682, - 682, 682, 682, 682, 682, 682, 682, 682, 687, 687, - 813, 687, 687, 687, 813, 687, 813, 687, 687, 687, - 687, 813, 813, 687, 687, 687, 687, 687, 687, 693, - 693, 813, 693, 693, 693, 813, 693, 813, 693, 693, - 693, 693, 813, 813, 693, 693, 693, 693, 693, 693, - 200, 813, 813, 813, 813, 813, 813, 813, 813, 813, - 813, 200, 200, 813, 200, 200, 813, 200, 710, 710, - - 813, 710, 813, 813, 813, 710, 711, 813, 711, 711, - 813, 711, 813, 813, 813, 711, 727, 727, 813, 813, - 727, 813, 813, 813, 727, 693, 813, 813, 813, 813, - 813, 813, 693, 813, 693, 693, 693, 693, 813, 813, - 693, 693, 693, 693, 693, 693, 751, 751, 813, 751, - 813, 813, 813, 751, 752, 813, 752, 752, 813, 752, - 813, 813, 813, 752, 775, 775, 813, 775, 813, 813, - 813, 775, 776, 813, 776, 813, 813, 776, 813, 813, - 813, 776, 780, 780, 780, 780, 780, 780, 780, 780, - 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, - - 780, 780, 780, 15, 813, 813, 813, 813, 813, 813, - 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, - 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, - 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, - 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, - 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, - 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, - 813, 813, 813, 813 + + 104, 104, 104, 104, 104, 619, 622, 622, 622, 622, + 622, 623, 620, 620, 620, 620, 193, 772, 772, 861, + 193, 204, 204, 204, 204, 204, 204, 204, 204, 204, + 204, 707, 193, 653, 807, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 204, 626, 204, 204, 808, 206, + 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, + 193, 193, 193, 193, 193, 193, 193, 632, 633, 634, + 635, 632, 632, 632, 632, 632, 632, 369, 226, 736, + 653, 737, 738, 739, 483, 515, 483, 515, 576, 595, + + 755, 756, 757, 755, 755, 755, 755, 755, 755, 755, + 707, 653, 578, 834, 105, 569, 570, 570, 570, 570, + 570, 570, 570, 570, 570, 570, 698, 826, 699, 699, + 699, 699, 699, 699, 765, 765, 765, 765, 765, 766, + 742, 716, 716, 716, 716, 716, 716, 716, 716, 716, + 716, 827, 105, 105, 576, 698, 641, 641, 641, 641, + 641, 641, 641, 641, 641, 641, 578, 576, 576, 642, + 642, 642, 642, 642, 642, 642, 642, 642, 642, 643, + 762, 861, 826, 644, 644, 644, 644, 644, 644, 576, + 698, 760, 760, 760, 760, 760, 760, 516, 508, 516, + + 861, 707, 861, 861, 861, 861, 827, 691, 644, 644, + 644, 644, 644, 644, 648, 649, 650, 648, 648, 648, + 648, 648, 648, 648, 651, 690, 689, 788, 652, 652, + 652, 652, 652, 652, 764, 764, 764, 764, 764, 764, + 764, 764, 764, 764, 482, 515, 482, 515, 654, 226, + 654, 740, 688, 652, 652, 652, 652, 652, 652, 861, + 595, 644, 644, 644, 644, 644, 644, 644, 644, 644, + 644, 653, 619, 656, 656, 656, 656, 656, 657, 654, + 654, 654, 654, 369, 226, 660, 660, 660, 660, 660, + 660, 660, 660, 660, 660, 595, 619, 861, 826, 659, + + 659, 659, 659, 659, 659, 736, 619, 737, 738, 739, + 861, 861, 737, 738, 739, 861, 105, 861, 861, 739, + 678, 861, 827, 762, 659, 659, 659, 659, 659, 659, + 369, 226, 661, 661, 661, 661, 661, 661, 661, 661, + 661, 661, 816, 576, 677, 131, 662, 662, 662, 662, + 662, 662, 655, 105, 655, 762, 740, 699, 700, 699, + 700, 740, 654, 744, 654, 744, 740, 745, 699, 745, + 699, 662, 662, 662, 662, 662, 662, 861, 226, 662, + 662, 662, 662, 662, 662, 662, 662, 662, 662, 104, + 741, 653, 741, 741, 741, 104, 741, 741, 104, 104, + + 741, 104, 104, 104, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 741, 741, 741, 104, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 131, 131, 131, 131, 131, 131, 666, 131, 131, + 131, 105, 131, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 669, 743, 653, 744, 744, 744, 744, 744, 744, 193, + 795, 508, 795, 193, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 204, 670, 193, 367, 631, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, + + 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, + 204, 628, 206, 193, 193, 193, 193, 193, 193, 193, + 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, + 692, 627, 693, 693, 693, 693, 693, 693, 693, 693, + 693, 693, 784, 785, 786, 784, 784, 784, 784, 784, + 784, 784, 770, 770, 770, 770, 770, 770, 770, 770, + 770, 770, 805, 805, 805, 805, 805, 806, 783, 105, + 698, 783, 701, 701, 701, 701, 701, 702, 699, 699, + 699, 699, 576, 625, 705, 705, 705, 705, 705, 705, + 705, 705, 705, 705, 643, 576, 624, 706, 706, 706, + + 706, 706, 706, 706, 706, 706, 706, 707, 796, 619, + 796, 708, 708, 708, 708, 708, 708, 576, 619, 801, + 801, 801, 801, 801, 801, 812, 614, 812, 794, 762, + 795, 795, 795, 795, 795, 795, 708, 708, 708, 708, + 708, 708, 712, 713, 714, 712, 712, 712, 712, 712, + 712, 712, 715, 813, 613, 813, 716, 716, 716, 716, + 716, 716, 804, 804, 804, 804, 804, 804, 804, 804, + 804, 804, 226, 771, 771, 771, 771, 771, 771, 514, + 514, 716, 716, 716, 716, 716, 716, 861, 514, 708, + 708, 708, 708, 708, 708, 708, 708, 708, 708, 369, + + 226, 722, 722, 722, 722, 722, 722, 722, 722, 722, + 722, 743, 508, 746, 746, 746, 746, 746, 747, 748, + 748, 748, 748, 752, 753, 754, 752, 752, 752, 752, + 752, 752, 752, 783, 783, 783, 783, 783, 783, 783, + 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, + 783, 783, 783, 839, 839, 839, 839, 839, 839, 367, + 105, 692, 295, 693, 693, 693, 693, 693, 693, 693, + 693, 693, 693, 845, 568, 845, 789, 567, 790, 790, + 790, 790, 790, 790, 820, 821, 822, 820, 820, 820, + 820, 820, 820, 820, 858, 858, 858, 858, 858, 858, + + 105, 576, 566, 760, 760, 760, 760, 760, 760, 760, + 760, 760, 760, 707, 576, 105, 761, 761, 761, 761, + 761, 761, 761, 761, 761, 761, 762, 846, 563, 846, + 763, 763, 763, 763, 763, 763, 831, 832, 833, 831, + 831, 831, 831, 831, 831, 831, 811, 562, 812, 812, + 812, 812, 812, 812, 561, 763, 763, 763, 763, 763, + 763, 767, 768, 769, 767, 767, 767, 767, 767, 767, + 767, 481, 481, 481, 553, 770, 770, 770, 770, 770, + 770, 839, 839, 839, 839, 839, 839, 839, 839, 839, + 839, 834, 552, 835, 835, 835, 835, 835, 835, 105, + + 770, 770, 770, 770, 770, 770, 861, 105, 763, 763, + 763, 763, 763, 763, 763, 763, 763, 763, 226, 773, + 773, 773, 773, 773, 774, 771, 771, 771, 771, 789, + 105, 790, 790, 790, 790, 790, 790, 790, 790, 790, + 790, 789, 105, 791, 791, 791, 791, 791, 791, 791, + 791, 791, 791, 789, 105, 792, 792, 792, 792, 792, + 793, 790, 790, 790, 790, 794, 514, 797, 797, 797, + 797, 797, 798, 795, 795, 795, 795, 576, 514, 801, + 801, 801, 801, 801, 801, 801, 801, 801, 801, 762, + 576, 508, 802, 802, 802, 802, 802, 802, 802, 802, + + 802, 802, 367, 295, 295, 501, 803, 803, 803, 803, + 803, 803, 840, 840, 840, 840, 840, 840, 840, 840, + 840, 840, 844, 500, 845, 845, 845, 845, 845, 845, + 499, 803, 803, 803, 803, 803, 803, 861, 498, 803, + 803, 803, 803, 803, 803, 803, 803, 803, 803, 811, + 497, 814, 814, 814, 814, 814, 815, 812, 812, 812, + 812, 104, 496, 817, 818, 819, 817, 817, 817, 817, + 817, 817, 817, 789, 495, 790, 790, 790, 790, 790, + 790, 790, 790, 790, 790, 789, 494, 790, 790, 790, + 790, 790, 790, 790, 790, 790, 790, 576, 493, 825, + + 825, 825, 825, 825, 825, 825, 825, 825, 825, 834, + 492, 835, 835, 835, 835, 835, 835, 835, 835, 835, + 835, 834, 491, 836, 836, 836, 836, 836, 836, 836, + 836, 836, 836, 834, 490, 837, 837, 837, 837, 837, + 838, 835, 835, 835, 835, 841, 841, 841, 841, 841, + 842, 839, 839, 839, 839, 844, 489, 847, 847, 847, + 847, 847, 848, 845, 845, 845, 845, 104, 488, 849, + 850, 851, 849, 849, 849, 849, 849, 849, 849, 834, + 487, 835, 835, 835, 835, 835, 835, 835, 835, 835, + 835, 834, 486, 835, 835, 835, 835, 835, 835, 835, + + 835, 835, 835, 839, 839, 839, 839, 839, 839, 839, + 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, + 839, 839, 839, 852, 853, 854, 852, 852, 852, 852, + 852, 852, 852, 855, 855, 855, 855, 855, 855, 855, + 855, 855, 855, 858, 858, 858, 858, 858, 858, 858, + 858, 858, 858, 852, 852, 852, 852, 852, 852, 852, + 852, 852, 852, 855, 855, 855, 855, 855, 855, 861, + 105, 849, 849, 849, 849, 849, 849, 849, 849, 849, + 849, 859, 859, 859, 859, 859, 860, 858, 858, 858, + 858, 843, 481, 481, 843, 403, 476, 475, 843, 469, + + 105, 468, 467, 466, 465, 464, 463, 462, 105, 856, + 856, 856, 856, 856, 857, 855, 855, 855, 855, 858, + 858, 858, 858, 858, 858, 858, 858, 858, 858, 461, + 460, 459, 458, 440, 367, 295, 436, 295, 129, 430, + 429, 428, 425, 424, 423, 422, 105, 855, 855, 855, + 855, 855, 855, 855, 855, 855, 855, 421, 420, 419, + 418, 415, 335, 335, 335, 403, 405, 403, 404, 403, + 397, 396, 395, 394, 393, 392, 391, 390, 389, 384, + 383, 123, 295, 367, 105, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, + + 63, 63, 63, 63, 63, 63, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 79, 79, 104, + 295, 129, 109, 357, 353, 352, 104, 351, 104, 104, + 104, 104, 350, 349, 104, 104, 104, 104, 104, 104, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 112, 348, 347, 346, 345, 112, 344, 112, 343, + 112, 112, 112, 112, 112, 342, 112, 112, 112, 112, + 112, 112, 116, 197, 335, 335, 262, 332, 329, 116, + 328, 116, 116, 116, 116, 327, 326, 116, 116, 116, + 116, 116, 116, 118, 325, 320, 118, 118, 319, 118, + 118, 318, 118, 118, 118, 118, 317, 316, 118, 118, + 118, 118, 118, 118, 128, 128, 315, 128, 314, 313, + 312, 128, 164, 311, 310, 164, 164, 309, 164, 164, + 308, 164, 164, 164, 164, 307, 306, 164, 164, 164, + + 164, 164, 164, 168, 305, 129, 168, 168, 121, 168, + 168, 109, 168, 168, 168, 168, 109, 168, 168, 168, + 283, 168, 168, 168, 176, 282, 281, 176, 280, 273, + 176, 176, 272, 176, 176, 176, 176, 176, 271, 176, + 176, 176, 176, 176, 176, 180, 180, 180, 180, 180, + 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, + 180, 180, 180, 180, 180, 180, 182, 182, 270, 182, + 269, 182, 182, 182, 182, 182, 182, 182, 182, 182, + 182, 182, 182, 182, 182, 182, 182, 188, 861, 194, + 262, 182, 188, 183, 188, 177, 188, 188, 188, 188, + + 188, 177, 188, 188, 188, 188, 188, 188, 192, 169, + 260, 163, 163, 253, 252, 192, 251, 192, 192, 192, + 192, 250, 192, 192, 192, 192, 192, 192, 192, 195, + 249, 246, 195, 195, 245, 195, 195, 244, 195, 195, + 195, 195, 243, 195, 195, 195, 195, 195, 195, 195, + 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, + 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, + 216, 217, 217, 242, 217, 217, 217, 217, 217, 217, + 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, + 217, 217, 119, 235, 234, 119, 119, 233, 119, 119, + + 232, 119, 119, 119, 119, 231, 230, 119, 119, 119, + 119, 119, 119, 128, 128, 129, 128, 104, 129, 196, + 128, 225, 225, 117, 225, 218, 109, 107, 225, 227, + 227, 227, 106, 227, 105, 213, 212, 227, 164, 211, + 210, 164, 164, 209, 164, 164, 204, 164, 164, 164, + 164, 183, 177, 164, 164, 164, 164, 164, 164, 165, + 169, 139, 165, 165, 136, 165, 165, 163, 165, 165, + 165, 165, 162, 159, 165, 165, 165, 165, 165, 165, + 168, 157, 143, 168, 168, 142, 168, 168, 141, 168, + 168, 168, 168, 138, 168, 168, 168, 137, 168, 168, + + 168, 176, 131, 129, 176, 117, 107, 176, 176, 106, + 176, 176, 176, 176, 176, 105, 176, 176, 176, 176, + 176, 176, 182, 182, 861, 182, 861, 182, 182, 182, + 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, + 182, 182, 182, 191, 861, 861, 861, 861, 861, 861, + 191, 861, 191, 191, 191, 191, 861, 861, 191, 191, + 191, 191, 191, 191, 192, 861, 861, 861, 861, 861, + 861, 192, 861, 192, 192, 192, 192, 861, 192, 192, + 192, 192, 192, 192, 192, 195, 861, 861, 195, 195, + 861, 195, 195, 861, 195, 195, 195, 195, 861, 195, + + 195, 195, 195, 195, 195, 195, 206, 861, 861, 206, + 206, 861, 206, 284, 284, 284, 284, 284, 284, 284, + 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, + 284, 284, 284, 284, 291, 291, 861, 291, 861, 861, + 861, 291, 297, 297, 297, 861, 297, 861, 861, 861, + 297, 361, 361, 861, 361, 861, 861, 861, 361, 362, + 362, 861, 362, 861, 861, 861, 362, 366, 366, 861, + 366, 861, 861, 861, 366, 368, 368, 368, 861, 368, + 861, 861, 861, 368, 206, 861, 861, 206, 206, 861, + 206, 436, 436, 861, 436, 861, 861, 861, 436, 438, + + 438, 861, 438, 861, 861, 861, 438, 439, 439, 861, + 439, 861, 861, 861, 439, 441, 441, 441, 861, 441, + 861, 861, 861, 441, 445, 445, 445, 445, 861, 445, + 861, 861, 861, 445, 505, 505, 861, 505, 861, 861, + 861, 505, 506, 506, 861, 506, 861, 861, 861, 506, + 507, 507, 861, 507, 861, 861, 861, 507, 519, 519, + 519, 861, 519, 861, 861, 861, 519, 520, 520, 520, + 520, 861, 520, 861, 861, 861, 520, 216, 216, 216, + 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, + 216, 216, 216, 216, 216, 216, 216, 216, 574, 574, + + 861, 574, 861, 861, 861, 574, 575, 575, 861, 575, + 861, 861, 861, 575, 591, 591, 591, 861, 591, 861, + 861, 861, 591, 592, 592, 592, 592, 861, 592, 861, + 861, 861, 592, 216, 216, 216, 216, 216, 216, 216, + 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, + 216, 216, 216, 216, 206, 861, 861, 206, 206, 861, + 206, 193, 861, 861, 861, 193, 193, 861, 193, 193, + 193, 861, 861, 193, 193, 636, 636, 861, 636, 861, + 861, 861, 636, 640, 861, 640, 640, 861, 640, 861, + 861, 861, 640, 658, 658, 658, 861, 658, 861, 861, + + 861, 658, 659, 659, 659, 659, 861, 659, 861, 861, + 861, 659, 603, 603, 861, 861, 603, 861, 861, 861, + 603, 216, 216, 216, 216, 216, 216, 216, 216, 216, + 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, + 216, 216, 206, 861, 861, 206, 206, 861, 206, 193, + 861, 861, 861, 193, 193, 861, 193, 193, 193, 861, + 861, 193, 193, 703, 703, 861, 703, 861, 861, 861, + 703, 704, 861, 704, 704, 861, 704, 861, 861, 861, + 704, 720, 720, 720, 861, 720, 861, 861, 861, 720, + 721, 721, 721, 861, 861, 721, 861, 861, 861, 721, + + 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, + 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, + 730, 735, 735, 861, 735, 735, 735, 861, 735, 861, + 735, 735, 735, 735, 861, 861, 735, 735, 735, 735, + 735, 735, 741, 741, 861, 741, 741, 741, 861, 741, + 861, 741, 741, 741, 741, 861, 861, 741, 741, 741, + 741, 741, 741, 206, 861, 861, 861, 861, 861, 861, + 861, 861, 861, 861, 206, 206, 861, 206, 206, 861, + 206, 758, 758, 861, 758, 861, 861, 861, 758, 759, + 861, 759, 759, 861, 759, 861, 861, 861, 759, 775, + + 775, 861, 861, 775, 861, 861, 861, 775, 741, 861, + 861, 861, 861, 861, 861, 741, 861, 741, 741, 741, + 741, 861, 861, 741, 741, 741, 741, 741, 741, 799, + 799, 861, 799, 861, 861, 861, 799, 800, 861, 800, + 800, 861, 800, 861, 861, 861, 800, 823, 823, 861, + 823, 861, 861, 861, 823, 824, 861, 824, 861, 861, + 824, 861, 861, 861, 824, 828, 828, 828, 828, 828, + 828, 828, 828, 828, 828, 828, 828, 828, 828, 828, + 828, 828, 828, 828, 828, 828, 15, 861, 861, 861, + 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, + + 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 861, 861, 861, 861, 861, 861 } ; -static yyconst short int yy_chk[5675] = +static yyconst short int yy_chk[5659] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1294,623 +1308,621 @@ 1, 1, 1, 1, 1, 1, 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, 533, 3, 38, 2, 52, 3, 49, 38, 50, - 4, 36, 3, 533, 4, 3, 11, 11, 11, 11, - 4, 22, 36, 4, 40, 5, 5, 5, 50, 5, - - 2, 2, 49, 52, 2, 5, 68, 68, 40, 3, - 807, 22, 2, 3, 3, 2, 3, 4, 54, 5, - 5, 4, 4, 148, 4, 6, 6, 6, 54, 6, - 799, 12, 12, 12, 12, 6, 11, 22, 3, 76, - 76, 72, 46, 27, 27, 5, 4, 27, 27, 6, - 6, 46, 47, 78, 9, 9, 9, 9, 9, 74, - 46, 164, 164, 9, 9, 9, 72, 27, 30, 30, - 30, 30, 30, 30, 79, 6, 7, 7, 7, 9, - 7, 12, 47, 47, 74, 148, 47, 60, 141, 81, - 81, 27, 81, 141, 47, 91, 60, 47, 10, 10, - - 10, 10, 10, 78, 9, 60, 91, 10, 10, 10, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 161, 798, 79, 10, 179, 161, 7, 7, 7, 7, + 1, 2, 51, 3, 80, 2, 36, 3, 42, 37, + 54, 4, 37, 3, 52, 4, 3, 36, 5, 5, + 5, 4, 5, 42, 4, 56, 74, 51, 5, 39, + + 22, 2, 2, 52, 39, 56, 2, 855, 54, 70, + 70, 3, 5, 5, 2, 3, 3, 2, 3, 4, + 22, 93, 74, 4, 4, 80, 4, 6, 6, 6, + 76, 6, 93, 11, 11, 11, 11, 6, 81, 5, + 3, 12, 12, 12, 12, 27, 27, 22, 4, 27, + 27, 6, 6, 78, 78, 103, 76, 9, 9, 9, + 9, 9, 83, 83, 103, 83, 9, 9, 9, 27, + 30, 30, 30, 30, 30, 30, 84, 48, 6, 7, + 7, 7, 9, 7, 11, 155, 48, 81, 62, 129, + 94, 157, 12, 94, 27, 48, 84, 62, 155, 322, + + 129, 10, 10, 10, 10, 10, 62, 157, 9, 112, + 10, 10, 10, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 84, 49, 146, 10, 146, 322, 112, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 8, 8, 8, 10, 8, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 87, 87, 87, 87, 87, 87, 99, 101, 274, 101, - 101, 101, 179, 101, 101, 99, 149, 101, 106, 106, - 106, 106, 106, 106, 106, 106, 106, 106, 140, 149, - 140, 101, 101, 101, 274, 8, 8, 8, 8, 8, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, + 8, 8, 10, 8, 49, 49, 112, 847, 160, 49, + 89, 89, 89, 89, 89, 89, 354, 49, 160, 354, + 49, 88, 88, 88, 88, 88, 88, 88, 88, 88, + 88, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 127, 127, 127, 127, 127, 127, 170, 170, 846, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 13, 13, 13, 13, 13, 13, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 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, 13, 21, 125, 153, 797, 82, 168, - 168, 270, 153, 178, 21, 784, 125, 21, 21, 21, + 21, 147, 144, 144, 174, 174, 147, 167, 156, 154, - 21, 21, 21, 21, 21, 21, 21, 28, 82, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 152, 180, 180, 28, 28, 28, 28, 28, 151, 270, - 289, 57, 57, 152, 82, 57, 57, 123, 123, 123, - 123, 123, 123, 178, 151, 28, 154, 28, 28, 28, - 28, 28, 28, 34, 289, 57, 154, 500, 246, 34, - 246, 500, 34, 34, 313, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 57, - 313, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 21, 158, 167, 21, 21, 21, 21, 21, 21, 21, + 21, 21, 21, 28, 158, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 186, 186, 286, 28, + 28, 28, 28, 28, 28, 323, 184, 59, 59, 138, + 138, 59, 59, 144, 156, 138, 138, 159, 257, 138, + 248, 138, 28, 159, 28, 28, 28, 28, 28, 28, + 34, 59, 154, 255, 248, 257, 34, 286, 255, 34, + 34, 323, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 34, 34, 34, 34, 34, 59, 184, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 37, 219, 783, 242, 37, 37, 37, - 37, 37, 245, 150, 236, 219, 37, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 247, 236, 245, - 303, 37, 37, 37, 37, 37, 37, 44, 44, 44, - 44, 44, 247, 44, 44, 311, 311, 44, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 150, 242, - 108, 44, 44, 44, 45, 303, 45, 45, 45, 45, - - 45, 45, 45, 45, 45, 45, 48, 66, 66, 66, - 108, 66, 304, 110, 370, 66, 48, 66, 304, 48, - 48, 48, 48, 48, 48, 48, 48, 48, 48, 132, - 243, 66, 66, 110, 132, 243, 108, 281, 132, 171, - 132, 83, 171, 171, 370, 138, 138, 83, 281, 171, - 83, 114, 114, 83, 83, 114, 114, 66, 182, 110, - 780, 302, 175, 175, 171, 48, 67, 83, 291, 83, - 183, 235, 235, 291, 235, 114, 67, 249, 182, 67, - 67, 67, 67, 67, 67, 67, 67, 67, 67, 302, - 183, 249, 83, 83, 84, 138, 777, 84, 84, 114, - - 84, 84, 84, 84, 182, 235, 84, 84, 111, 775, - 111, 111, 175, 314, 111, 111, 183, 369, 111, 314, - 84, 84, 84, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 111, 111, 156, 156, 156, 156, 156, - 156, 156, 156, 156, 156, 84, 84, 85, 310, 369, - 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 322, 357, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, 322, 357, - 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, - - 85, 85, 85, 85, 85, 85, 85, 88, 310, 88, - 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, - 278, 278, 278, 88, 88, 88, 88, 88, 266, 266, - 113, 266, 113, 113, 113, 330, 113, 113, 330, 371, - 113, 196, 196, 196, 196, 196, 196, 88, 88, 88, - 88, 88, 88, 89, 113, 113, 113, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 453, 371, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 453, 89, 89, 89, 89, 89, - - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 377, 444, 378, 92, 92, 92, - 92, 92, 203, 344, 158, 158, 92, 203, 158, 158, - 323, 203, 444, 203, 344, 323, 301, 142, 378, 301, - 457, 92, 92, 92, 92, 92, 92, 97, 158, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 116, - 766, 116, 116, 116, 457, 116, 116, 142, 142, 116, - 301, 142, 158, 214, 214, 214, 214, 214, 214, 142, - 372, 377, 142, 116, 116, 116, 117, 117, 117, 117, - - 117, 117, 117, 117, 117, 117, 167, 167, 167, 167, - 167, 167, 167, 167, 167, 167, 346, 346, 765, 160, - 379, 160, 160, 160, 372, 160, 160, 764, 346, 160, - 400, 379, 117, 118, 118, 118, 118, 118, 118, 118, - 118, 118, 118, 160, 160, 160, 458, 118, 118, 118, - 118, 118, 191, 191, 191, 191, 191, 191, 191, 191, - 191, 191, 273, 273, 273, 273, 427, 427, 400, 755, - 458, 118, 118, 118, 118, 118, 118, 126, 126, 126, - 126, 126, 126, 126, 126, 126, 126, 126, 312, 498, - 754, 126, 126, 126, 126, 126, 194, 194, 194, 194, - - 194, 194, 194, 194, 194, 194, 285, 285, 285, 285, - 285, 285, 752, 498, 312, 126, 126, 126, 126, 126, - 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 312, 562, 562, 127, 127, 127, 127, 127, - 184, 409, 184, 184, 373, 186, 184, 184, 380, 373, - 184, 186, 409, 380, 186, 348, 348, 186, 186, 127, - 127, 127, 127, 127, 127, 184, 184, 348, 413, 497, - 428, 186, 428, 186, 188, 497, 188, 188, 188, 413, - 188, 188, 429, 751, 188, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 526, 186, 186, 188, 188, - - 188, 189, 615, 615, 189, 189, 429, 189, 189, 189, - 189, 190, 431, 189, 189, 190, 502, 431, 414, 414, - 502, 190, 415, 415, 429, 433, 430, 189, 189, 189, - 414, 430, 526, 430, 415, 190, 190, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 432, 508, 433, - 432, 523, 189, 189, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 749, 508, 523, 433, 192, 192, - 192, 192, 192, 211, 211, 211, 211, 211, 211, 211, - 211, 211, 211, 319, 511, 319, 319, 319, 319, 319, - 319, 439, 192, 192, 192, 192, 192, 192, 197, 748, - - 513, 439, 197, 197, 197, 197, 197, 197, 197, 197, - 197, 197, 197, 197, 197, 442, 513, 197, 197, 197, - 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, - 197, 197, 197, 197, 197, 197, 197, 197, 197, 511, - 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, - 197, 197, 197, 197, 197, 197, 197, 197, 198, 198, - 198, 198, 198, 198, 198, 198, 198, 198, 198, 442, - 504, 506, 198, 198, 198, 198, 198, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 354, 354, 354, - 354, 354, 354, 434, 504, 506, 198, 198, 198, 198, - - 198, 198, 212, 747, 212, 212, 212, 212, 212, 212, - 212, 212, 212, 212, 248, 454, 737, 434, 248, 514, - 454, 561, 736, 561, 248, 282, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 434, 514, 727, 248, 248, - 212, 215, 443, 215, 215, 215, 215, 215, 215, 215, - 215, 215, 215, 443, 564, 584, 564, 215, 215, 215, - 215, 215, 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 423, 423, 423, 423, 423, 423, 571, 584, - 571, 215, 215, 215, 215, 215, 215, 218, 218, 218, - 218, 218, 218, 218, 218, 218, 218, 218, 589, 589, - - 589, 218, 218, 218, 218, 218, 315, 315, 315, 315, - 315, 315, 315, 315, 315, 315, 450, 725, 450, 450, - 450, 450, 450, 450, 724, 218, 218, 218, 218, 218, - 218, 220, 220, 220, 220, 220, 220, 220, 220, 220, - 220, 220, 220, 565, 616, 616, 220, 220, 220, 220, - 220, 345, 345, 345, 345, 345, 345, 345, 345, 345, - 345, 466, 466, 466, 466, 466, 466, 565, 623, 623, - 220, 220, 220, 220, 220, 220, 221, 221, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 566, 625, 565, - 221, 221, 221, 221, 221, 347, 347, 347, 347, 347, - - 347, 347, 347, 347, 347, 473, 473, 473, 473, 473, - 473, 566, 625, 723, 221, 221, 221, 221, 221, 221, - 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, - 222, 631, 631, 566, 222, 222, 222, 222, 222, 351, - 351, 351, 351, 351, 351, 351, 351, 622, 711, 622, - 403, 351, 403, 403, 403, 403, 403, 403, 222, 222, - 222, 222, 222, 222, 253, 627, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 710, 403, 627, - 254, 254, 254, 254, 254, 353, 353, 353, 353, 353, - - 353, 353, 353, 353, 353, 480, 708, 480, 480, 480, - 480, 480, 480, 707, 254, 254, 254, 254, 254, 254, - 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, - 529, 529, 529, 529, 256, 256, 256, 256, 256, 416, - 416, 416, 416, 416, 416, 416, 416, 416, 416, 492, - 492, 492, 492, 492, 492, 674, 674, 700, 256, 256, - 256, 256, 256, 256, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 417, 417, 420, 420, 420, 420, - 420, 420, 420, 420, 680, 680, 417, 535, 420, 422, - 422, 422, 422, 422, 422, 422, 422, 422, 422, 535, - - 269, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, 277, 283, 283, 283, 283, 283, 283, 283, 283, - 283, 283, 283, 283, 283, 445, 683, 683, 283, 283, - 283, 283, 283, 570, 570, 445, 446, 446, 446, 446, - 446, 446, 446, 446, 446, 446, 541, 541, 541, 541, - 541, 541, 283, 283, 283, 283, 283, 283, 286, 286, - 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, - 679, 698, 679, 286, 286, 286, 286, 286, 465, 465, - 465, 465, 465, 465, 465, 465, 465, 465, 570, 563, - 697, 624, 620, 481, 563, 620, 624, 286, 286, 286, - - 286, 286, 286, 287, 481, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 320, 320, 320, 320, 320, - 320, 320, 320, 320, 320, 696, 621, 640, 643, 320, - 320, 320, 320, 320, 470, 470, 470, 470, 470, 470, - 470, 470, 470, 470, 558, 558, 558, 558, 558, 558, - 621, 640, 643, 320, 320, 320, 320, 320, 320, 321, - 321, 321, 321, 321, 321, 321, 321, 321, 321, 643, - 630, 693, 621, 321, 321, 321, 321, 321, 472, 472, - 472, 472, 472, 472, 472, 472, 472, 472, 648, 648, - 648, 648, 630, 482, 630, 630, 691, 321, 321, 321, - - 321, 321, 321, 334, 482, 334, 334, 334, 334, 334, - 334, 334, 334, 334, 334, 335, 595, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 336, 595, 336, - 336, 336, 336, 336, 336, 336, 336, 336, 336, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 349, 349, 349, 349, 349, 349, 349, 349, 349, 349, - 349, 349, 349, 572, 685, 633, 349, 349, 349, 349, - 349, 476, 476, 476, 476, 476, 476, 476, 476, 476, - 476, 633, 731, 824, 731, 572, 824, 572, 572, 645, - 349, 349, 349, 349, 349, 349, 352, 352, 352, 352, - - 352, 352, 352, 352, 352, 352, 352, 352, 352, 483, - 483, 572, 352, 352, 352, 352, 352, 484, 484, 486, - 486, 483, 496, 501, 503, 733, 733, 645, 685, 484, - 676, 486, 496, 501, 686, 503, 352, 352, 352, 352, - 352, 352, 355, 355, 355, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 676, 682, 641, 355, 355, 355, - 355, 355, 485, 485, 485, 485, 485, 485, 485, 485, - 485, 485, 604, 604, 604, 604, 604, 604, 512, 632, - 641, 355, 355, 355, 355, 355, 355, 356, 512, 356, - 356, 356, 356, 356, 356, 356, 356, 356, 356, 383, - - 641, 383, 383, 383, 383, 383, 383, 383, 383, 383, - 383, 384, 384, 384, 384, 384, 384, 384, 384, 384, - 384, 762, 762, 781, 781, 384, 384, 384, 384, 384, - 489, 489, 489, 489, 489, 489, 489, 489, 632, 882, - 882, 611, 489, 611, 611, 611, 611, 611, 611, 384, - 384, 384, 384, 384, 384, 399, 399, 399, 399, 399, - 399, 399, 399, 399, 399, 491, 491, 491, 491, 491, - 491, 491, 491, 491, 491, 532, 532, 532, 532, 532, - 532, 532, 532, 532, 532, 639, 681, 639, 639, 639, - 649, 399, 401, 596, 401, 401, 401, 401, 401, 401, - - 401, 401, 401, 401, 402, 596, 402, 402, 402, 402, - 402, 402, 402, 402, 402, 402, 408, 408, 408, 408, - 408, 408, 408, 408, 408, 408, 408, 701, 649, 728, - 408, 408, 408, 408, 408, 534, 534, 534, 534, 534, - 534, 534, 534, 534, 534, 675, 836, 742, 787, 836, - 547, 701, 673, 728, 408, 408, 408, 408, 408, 408, - 412, 547, 412, 412, 412, 412, 412, 412, 412, 412, - 412, 412, 418, 418, 418, 418, 418, 418, 418, 418, - 418, 418, 418, 418, 418, 742, 787, 670, 418, 418, - 418, 418, 418, 538, 598, 538, 538, 538, 538, 538, - - 538, 827, 827, 827, 669, 538, 598, 634, 739, 634, - 634, 634, 418, 418, 418, 418, 418, 418, 421, 421, - 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, - 421, 853, 739, 853, 421, 421, 421, 421, 421, 540, - 540, 540, 540, 540, 540, 540, 540, 540, 540, 578, - 578, 578, 578, 578, 578, 578, 656, 634, 421, 421, - 421, 421, 421, 421, 424, 424, 424, 424, 424, 424, - 424, 424, 424, 424, 424, 424, 548, 549, 549, 424, - 424, 424, 424, 424, 550, 550, 612, 548, 613, 549, - 552, 552, 844, 844, 844, 655, 550, 612, 657, 613, - - 759, 642, 552, 424, 424, 424, 424, 424, 424, 425, - 657, 425, 425, 425, 425, 425, 425, 425, 425, 425, - 425, 426, 653, 768, 759, 642, 854, 426, 854, 916, - 426, 426, 916, 426, 426, 426, 426, 426, 426, 426, - 426, 426, 426, 426, 426, 426, 642, 768, 652, 426, - 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, - 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, - 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, - 426, 426, 426, 426, 426, 426, 426, 426, 426, 426, - 426, 464, 464, 464, 464, 464, 464, 464, 464, 464, - - 464, 464, 555, 555, 555, 555, 555, 555, 555, 555, - 865, 651, 865, 658, 555, 557, 557, 557, 557, 557, - 557, 557, 557, 557, 557, 658, 883, 883, 464, 471, - 660, 471, 471, 471, 471, 471, 471, 471, 471, 471, - 471, 471, 660, 637, 702, 471, 471, 471, 471, 471, - 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, - 619, 619, 619, 619, 619, 619, 619, 619, 702, 471, - 471, 471, 471, 471, 471, 474, 474, 474, 474, 474, - 474, 474, 474, 474, 474, 474, 778, 636, 702, 474, - 474, 474, 474, 474, 587, 587, 587, 587, 587, 587, - - 587, 587, 587, 587, 866, 870, 866, 870, 614, 614, - 778, 894, 894, 474, 474, 474, 474, 474, 474, 475, - 614, 475, 475, 475, 475, 475, 475, 475, 475, 475, - 475, 487, 487, 487, 487, 487, 487, 487, 487, 487, - 487, 487, 487, 487, 678, 629, 703, 487, 487, 487, - 487, 487, 588, 588, 588, 588, 588, 588, 588, 588, - 588, 588, 635, 610, 635, 635, 635, 871, 678, 871, - 703, 487, 487, 487, 487, 487, 487, 490, 490, 490, - 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, - 678, 703, 740, 490, 490, 490, 490, 490, 597, 597, - - 597, 597, 597, 597, 597, 597, 597, 597, 875, 878, - 875, 878, 635, 888, 609, 888, 740, 490, 490, 490, - 490, 490, 490, 493, 493, 493, 493, 493, 493, 493, - 493, 493, 493, 493, 608, 889, 740, 889, 493, 493, - 493, 493, 493, 601, 594, 601, 601, 601, 601, 601, - 601, 897, 592, 897, 654, 601, 654, 654, 654, 654, - 654, 654, 493, 493, 493, 493, 493, 493, 494, 712, - 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, - 495, 712, 898, 901, 898, 901, 495, 692, 692, 495, - 495, 692, 495, 495, 495, 495, 495, 495, 495, 495, - - 495, 495, 495, 495, 495, 692, 692, 692, 495, 495, - 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, - 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, - 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, - 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 522, 913, 913, 713, 522, 522, 522, 522, 522, - 522, 522, 522, 522, 522, 522, 713, 522, 914, 914, - 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, - 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, - - 522, 522, 591, 522, 522, 522, 522, 522, 522, 522, - 522, 522, 522, 522, 522, 522, 522, 522, 522, 522, - 522, 525, 525, 525, 525, 525, 525, 525, 525, 525, - 525, 603, 603, 603, 603, 603, 603, 603, 603, 603, - 603, 607, 607, 607, 607, 607, 607, 607, 607, 607, - 607, 666, 666, 666, 666, 666, 666, 525, 527, 527, - 527, 527, 527, 527, 527, 527, 527, 527, 527, 650, - 650, 650, 650, 650, 650, 650, 650, 650, 650, 659, - 659, 659, 659, 659, 659, 659, 659, 659, 659, 721, - 721, 721, 721, 721, 721, 527, 536, 715, 536, 536, - - 536, 536, 536, 536, 536, 536, 536, 536, 536, 715, - 590, 582, 536, 536, 536, 536, 536, 663, 753, 663, - 663, 663, 663, 663, 663, 907, 908, 907, 908, 663, - 753, 687, 672, 687, 687, 687, 536, 536, 536, 536, - 536, 536, 539, 672, 539, 539, 539, 539, 539, 539, - 539, 539, 539, 539, 539, 730, 581, 580, 539, 539, - 539, 539, 539, 665, 665, 665, 665, 665, 665, 665, - 665, 665, 665, 688, 579, 688, 688, 688, 910, 730, - 910, 687, 539, 539, 539, 539, 539, 539, 542, 542, - 542, 542, 542, 542, 542, 542, 542, 542, 542, 577, - - 576, 730, 542, 542, 542, 542, 542, 695, 695, 695, - 695, 695, 695, 695, 695, 695, 695, 794, 794, 794, - 794, 794, 794, 688, 575, 573, 542, 542, 542, 542, - 542, 542, 543, 569, 543, 543, 543, 543, 543, 543, - 543, 543, 543, 543, 546, 568, 546, 546, 546, 546, - 546, 546, 546, 546, 546, 546, 553, 553, 553, 553, - 553, 553, 553, 553, 553, 553, 553, 553, 553, 567, - 551, 761, 553, 553, 553, 553, 553, 689, 545, 689, - 689, 689, 690, 544, 690, 690, 690, 699, 531, 699, - 699, 699, 699, 699, 699, 761, 553, 553, 553, 553, - - 553, 553, 556, 556, 556, 556, 556, 556, 556, 556, - 556, 556, 556, 556, 918, 530, 918, 761, 556, 556, - 556, 556, 556, 919, 923, 919, 923, 689, 924, 929, - 924, 929, 690, 726, 726, 726, 726, 726, 726, 726, - 524, 521, 556, 556, 556, 556, 556, 556, 559, 520, - 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, - 560, 694, 519, 694, 694, 694, 560, 694, 694, 560, - 560, 694, 560, 560, 560, 560, 560, 560, 560, 560, - 560, 560, 560, 560, 560, 694, 694, 694, 560, 560, - 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, - - 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, - 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, - 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, - 583, 750, 518, 750, 750, 750, 750, 750, 750, 583, - 930, 516, 930, 583, 583, 583, 583, 583, 583, 583, - 583, 583, 583, 583, 583, 583, 515, 510, 583, 583, - 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, + 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, + 34, 38, 38, 38, 38, 38, 38, 38, 38, 38, + 38, 38, 258, 254, 258, 38, 38, 38, 38, 38, + 38, 259, 398, 181, 181, 38, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 259, 261, 331, 331, + 38, 38, 38, 38, 38, 38, 46, 46, 46, 46, + 46, 261, 46, 46, 845, 398, 46, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 254, 185, 832, + + 46, 46, 46, 47, 181, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 50, 68, 68, 68, 114, + 68, 294, 294, 294, 68, 50, 68, 479, 50, 50, + 50, 50, 50, 50, 50, 50, 50, 50, 148, 114, + 68, 68, 282, 282, 479, 282, 105, 185, 105, 105, + 105, 85, 105, 105, 188, 177, 105, 85, 177, 177, + 85, 305, 330, 85, 85, 177, 114, 68, 148, 148, + 105, 105, 105, 148, 188, 50, 69, 85, 309, 85, + 177, 148, 308, 290, 148, 305, 69, 308, 227, 69, + 69, 69, 69, 69, 69, 69, 69, 69, 69, 227, + + 324, 188, 309, 85, 85, 86, 324, 831, 86, 86, + 290, 86, 86, 86, 86, 344, 297, 86, 86, 115, + 344, 115, 115, 330, 334, 115, 115, 297, 400, 115, + 334, 86, 86, 86, 126, 126, 126, 126, 126, 126, + 126, 126, 126, 126, 115, 115, 162, 162, 162, 162, + 162, 162, 162, 162, 162, 162, 828, 86, 86, 87, + 333, 400, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 333, 342, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + + 87, 342, 399, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 90, 345, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 399, 567, 567, 90, 90, 90, 90, + 90, 90, 368, 825, 117, 345, 117, 117, 117, 321, + 117, 117, 321, 368, 117, 202, 202, 202, 202, 202, + 202, 90, 90, 90, 90, 90, 90, 91, 117, 117, + 117, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 321, 381, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + + 91, 91, 91, 91, 91, 91, 91, 91, 91, 381, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 406, + 606, 606, 95, 95, 95, 95, 95, 95, 402, 823, + 118, 118, 95, 402, 118, 118, 173, 173, 173, 173, + 173, 173, 173, 173, 173, 173, 387, 95, 95, 95, + 95, 95, 95, 101, 118, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 120, 189, 120, 120, 120, + 387, 120, 120, 247, 247, 120, 247, 401, 474, 118, + + 222, 222, 222, 222, 222, 222, 189, 406, 474, 120, + 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, + 121, 121, 164, 164, 211, 211, 164, 164, 247, 814, + 211, 211, 401, 189, 211, 480, 211, 166, 541, 166, + 166, 166, 541, 166, 166, 480, 164, 166, 432, 121, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 536, 166, 166, 166, 122, 122, 122, 122, 122, 122, + 536, 164, 197, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 289, 289, 289, 289, 605, 432, 605, 122, + 122, 122, 122, 122, 122, 130, 130, 130, 130, 130, + + 130, 130, 130, 130, 130, 130, 332, 813, 407, 130, + 130, 130, 130, 130, 130, 200, 200, 200, 200, 200, + 200, 200, 200, 200, 200, 301, 301, 301, 301, 301, + 301, 407, 554, 332, 130, 130, 130, 130, 130, 130, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, + 131, 332, 370, 370, 131, 131, 131, 131, 131, 131, + 190, 408, 190, 190, 370, 192, 190, 190, 409, 477, + 190, 192, 408, 409, 192, 372, 372, 192, 192, 131, + 131, 131, 131, 131, 131, 190, 190, 372, 554, 459, + 196, 192, 441, 192, 196, 194, 812, 194, 194, 194, + + 196, 194, 194, 441, 339, 194, 339, 339, 339, 339, + 339, 339, 445, 459, 196, 196, 478, 192, 192, 194, + 194, 194, 195, 445, 477, 195, 195, 478, 195, 195, + 195, 195, 459, 803, 195, 195, 201, 201, 201, 201, + 201, 201, 201, 201, 201, 201, 802, 460, 195, 195, + 195, 218, 218, 218, 218, 218, 218, 218, 218, 218, + 218, 219, 219, 219, 219, 219, 219, 219, 219, 219, + 219, 460, 556, 800, 195, 195, 198, 198, 198, 198, + 198, 198, 198, 198, 198, 198, 661, 661, 556, 460, + 198, 198, 198, 198, 198, 198, 221, 221, 221, 221, + + 221, 221, 221, 221, 221, 221, 378, 378, 378, 378, + 378, 378, 446, 446, 462, 198, 198, 198, 198, 198, + 198, 203, 662, 662, 446, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, 462, 465, + 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 465, 203, 203, 203, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 203, 203, 203, 203, + 203, 203, 204, 204, 204, 204, 204, 204, 204, 204, + 204, 204, 204, 799, 466, 461, 204, 204, 204, 204, + + 204, 204, 298, 298, 298, 298, 298, 298, 298, 298, + 298, 298, 573, 573, 573, 573, 447, 447, 466, 461, + 463, 204, 204, 204, 204, 204, 204, 220, 447, 220, + 220, 220, 220, 220, 220, 220, 220, 220, 220, 260, + 461, 467, 466, 260, 463, 551, 671, 671, 540, 260, + 300, 300, 300, 300, 300, 300, 300, 300, 300, 300, + 540, 463, 551, 260, 260, 467, 220, 223, 519, 223, + 223, 223, 223, 223, 223, 223, 223, 223, 223, 519, + 797, 467, 468, 223, 223, 223, 223, 223, 223, 335, + 335, 335, 335, 335, 335, 335, 335, 335, 335, 455, + + 455, 455, 455, 455, 455, 796, 468, 570, 223, 223, + 223, 223, 223, 223, 226, 226, 226, 226, 226, 226, + 226, 226, 226, 226, 226, 469, 486, 489, 226, 226, + 226, 226, 226, 226, 369, 369, 369, 369, 369, 369, + 369, 369, 369, 369, 609, 570, 609, 491, 492, 469, + 486, 489, 491, 226, 226, 226, 226, 226, 226, 228, + 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, + 228, 616, 492, 616, 228, 228, 228, 228, 228, 228, + 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, + 485, 795, 485, 485, 485, 485, 485, 485, 785, 228, + + 228, 228, 228, 228, 228, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 495, 496, 533, 229, + 229, 229, 229, 229, 229, 375, 375, 375, 375, 375, + 375, 375, 375, 537, 635, 635, 635, 375, 538, 537, + 495, 496, 533, 784, 229, 229, 229, 229, 229, 229, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 668, 538, 668, 230, 230, 230, 230, 230, 230, + 377, 377, 377, 377, 377, 377, 377, 377, 377, 377, + 435, 775, 435, 435, 435, 435, 435, 435, 773, 230, + 230, 230, 230, 230, 230, 265, 543, 265, 265, 265, + + 265, 265, 265, 265, 265, 265, 265, 266, 266, 266, + 266, 266, 266, 266, 266, 266, 266, 266, 772, 435, + 543, 266, 266, 266, 266, 266, 266, 448, 448, 448, + 448, 448, 448, 448, 448, 448, 448, 504, 504, 504, + 504, 504, 504, 679, 679, 771, 266, 266, 266, 266, + 266, 266, 268, 268, 268, 268, 268, 268, 268, 268, + 268, 268, 449, 449, 547, 759, 268, 268, 268, 268, + 268, 268, 520, 557, 449, 452, 452, 452, 452, 452, + 452, 452, 452, 520, 545, 722, 722, 452, 547, 545, + 557, 268, 268, 268, 268, 268, 268, 285, 285, 285, + + 285, 285, 285, 285, 285, 285, 285, 454, 454, 454, + 454, 454, 454, 454, 454, 454, 454, 481, 481, 481, + 481, 481, 481, 481, 481, 481, 481, 511, 511, 511, + 511, 511, 511, 758, 285, 293, 293, 293, 293, 293, + 293, 293, 293, 293, 293, 293, 299, 299, 299, 299, + 299, 299, 299, 299, 299, 299, 299, 299, 299, 549, + 680, 566, 299, 299, 299, 299, 299, 299, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 566, 608, + 756, 464, 666, 549, 608, 666, 755, 299, 299, 299, + 299, 299, 299, 302, 302, 302, 302, 302, 302, 302, + + 302, 302, 302, 302, 302, 464, 521, 521, 302, 302, + 302, 302, 302, 302, 672, 748, 607, 464, 521, 672, + 680, 746, 464, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 302, 302, 302, 302, 302, 302, 303, + 607, 303, 303, 303, 303, 303, 303, 303, 303, 303, + 303, 340, 340, 340, 340, 340, 340, 340, 340, 340, + 340, 745, 727, 607, 727, 340, 340, 340, 340, 340, + 340, 510, 510, 510, 510, 510, 510, 510, 510, 510, + 510, 518, 610, 518, 518, 518, 518, 518, 518, 693, + 340, 340, 340, 340, 340, 340, 341, 341, 341, 341, + + 341, 341, 341, 341, 341, 341, 610, 744, 629, 630, + 341, 341, 341, 341, 341, 341, 514, 514, 514, 514, + 514, 514, 514, 514, 514, 514, 728, 728, 693, 610, + 522, 522, 629, 630, 741, 341, 341, 341, 341, 341, + 341, 358, 522, 358, 358, 358, 358, 358, 358, 358, + 358, 358, 358, 359, 577, 359, 359, 359, 359, 359, + 359, 359, 359, 359, 359, 360, 577, 360, 360, 360, + 360, 360, 360, 360, 360, 360, 360, 363, 363, 363, + 363, 363, 363, 363, 363, 363, 363, 363, 373, 373, + 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, + + 373, 615, 615, 611, 373, 373, 373, 373, 373, 373, + 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, + 530, 530, 530, 530, 530, 530, 779, 611, 779, 373, + 373, 373, 373, 373, 373, 376, 376, 376, 376, 376, + 376, 376, 376, 376, 376, 376, 376, 376, 524, 524, + 611, 376, 376, 376, 376, 376, 376, 615, 579, 542, + 524, 527, 527, 527, 527, 527, 527, 527, 527, 542, + 579, 669, 667, 527, 731, 731, 376, 376, 376, 376, + 376, 376, 379, 379, 379, 379, 379, 379, 379, 379, + 379, 379, 379, 379, 739, 669, 667, 379, 379, 379, + + 379, 379, 379, 529, 529, 529, 529, 529, 529, 529, + 529, 529, 529, 696, 696, 696, 696, 673, 546, 667, + 781, 781, 379, 379, 379, 379, 379, 379, 380, 546, + 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, + 412, 673, 412, 412, 412, 412, 412, 412, 412, 412, + 412, 412, 413, 413, 413, 413, 413, 413, 413, 413, + 413, 413, 555, 733, 734, 675, 413, 413, 413, 413, + 413, 413, 555, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 585, 585, 585, 585, 585, 585, 675, + 730, 413, 413, 413, 413, 413, 413, 431, 431, 431, + + 431, 431, 431, 431, 431, 431, 431, 578, 578, 578, + 578, 578, 578, 578, 578, 578, 578, 582, 641, 582, + 582, 582, 582, 582, 582, 591, 810, 810, 733, 582, + 641, 697, 681, 790, 431, 433, 591, 433, 433, 433, + 433, 433, 433, 433, 433, 433, 433, 434, 681, 434, + 434, 434, 434, 434, 434, 434, 434, 434, 434, 440, + 440, 440, 440, 440, 440, 440, 440, 440, 440, 440, + 697, 678, 790, 440, 440, 440, 440, 440, 440, 584, + 584, 584, 584, 584, 584, 584, 584, 584, 584, 806, + 806, 806, 806, 678, 592, 678, 678, 729, 440, 440, + + 440, 440, 440, 440, 444, 592, 444, 444, 444, 444, + 444, 444, 444, 444, 444, 444, 450, 450, 450, 450, + 450, 450, 450, 450, 450, 450, 450, 450, 450, 593, + 593, 688, 450, 450, 450, 450, 450, 450, 594, 594, + 642, 593, 596, 596, 602, 602, 602, 602, 602, 602, + 594, 723, 642, 691, 596, 688, 721, 450, 450, 450, + 450, 450, 450, 453, 453, 453, 453, 453, 453, 453, + 453, 453, 453, 453, 453, 453, 902, 691, 902, 453, + 453, 453, 453, 453, 453, 599, 599, 599, 599, 599, + 599, 599, 599, 829, 829, 691, 718, 599, 650, 650, + + 650, 650, 650, 650, 453, 453, 453, 453, 453, 453, + 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, + 456, 456, 617, 717, 690, 456, 456, 456, 456, 456, + 456, 601, 601, 601, 601, 601, 601, 601, 601, 601, + 601, 875, 875, 875, 617, 644, 617, 617, 690, 689, + 456, 456, 456, 456, 456, 456, 457, 644, 457, 457, + 457, 457, 457, 457, 457, 457, 457, 457, 458, 458, + 690, 617, 872, 689, 458, 872, 884, 458, 458, 884, + 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, + 458, 458, 458, 458, 689, 704, 458, 458, 458, 458, + + 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, + 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, + 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, + 458, 458, 458, 458, 458, 458, 458, 458, 458, 502, + 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, + 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, + 623, 623, 623, 623, 623, 623, 623, 633, 633, 633, + 633, 633, 633, 633, 633, 633, 633, 502, 509, 705, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 705, 931, 931, 509, 509, 509, 509, 509, 509, + + 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, + 657, 703, 657, 657, 657, 657, 657, 657, 701, 509, + 509, 509, 509, 509, 509, 512, 512, 512, 512, 512, + 512, 512, 512, 512, 512, 512, 700, 724, 749, 512, + 512, 512, 512, 512, 512, 643, 643, 643, 643, 643, + 643, 643, 643, 643, 643, 687, 699, 687, 687, 687, + 658, 724, 749, 685, 512, 512, 512, 512, 512, 512, + 513, 658, 513, 513, 513, 513, 513, 513, 513, 513, + 513, 513, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 726, 932, 932, 525, 525, + + 525, 525, 525, 525, 647, 706, 647, 647, 647, 647, + 647, 647, 892, 892, 892, 684, 647, 706, 682, 726, + 682, 682, 682, 525, 525, 525, 525, 525, 525, 528, + 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, + 528, 528, 726, 943, 943, 528, 528, 528, 528, 528, + 528, 649, 649, 649, 649, 649, 649, 649, 649, 649, + 649, 665, 665, 665, 665, 665, 665, 665, 665, 682, + 528, 528, 528, 528, 528, 528, 531, 531, 531, 531, + 531, 531, 531, 531, 531, 531, 531, 776, 677, 778, + 750, 531, 531, 531, 531, 531, 531, 653, 653, 653, + + 653, 653, 653, 653, 653, 653, 653, 903, 914, 903, + 914, 776, 659, 778, 750, 787, 531, 531, 531, 531, + 531, 531, 532, 659, 532, 532, 532, 532, 532, 532, + 532, 532, 532, 532, 535, 750, 778, 962, 962, 787, + 535, 740, 740, 535, 535, 740, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 740, + 740, 740, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + + 535, 535, 535, 535, 535, 560, 560, 560, 560, 560, + 560, 560, 560, 560, 560, 560, 563, 963, 963, 708, + 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, + 563, 708, 563, 656, 807, 563, 563, 563, 563, 563, + 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, + 563, 563, 563, 563, 563, 563, 563, 563, 807, 563, + 563, 563, 563, 563, 563, 563, 563, 563, 563, 563, + 563, 563, 563, 563, 563, 563, 563, 569, 569, 569, + 569, 569, 569, 569, 569, 569, 569, 660, 660, 683, + 655, 683, 683, 683, 915, 919, 915, 919, 760, 660, + + 698, 698, 698, 698, 698, 698, 698, 698, 698, 698, + 760, 654, 640, 835, 569, 571, 571, 571, 571, 571, + 571, 571, 571, 571, 571, 571, 702, 816, 702, 702, + 702, 702, 702, 702, 714, 714, 714, 714, 714, 714, + 683, 707, 707, 707, 707, 707, 707, 707, 707, 707, + 707, 816, 835, 571, 580, 638, 580, 580, 580, 580, + 580, 580, 580, 580, 580, 580, 580, 583, 761, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, - 509, 583, 583, 583, 583, 583, 583, 583, 583, 583, - 583, 583, 583, 583, 583, 583, 583, 583, 583, 586, + 761, 751, 826, 583, 583, 583, 583, 583, 583, 711, + 637, 711, 711, 711, 711, 711, 711, 920, 636, 920, - 479, 586, 586, 586, 586, 586, 586, 586, 586, 586, - 586, 714, 714, 714, 714, 714, 714, 714, 714, 714, - 714, 718, 478, 718, 718, 718, 718, 718, 718, 922, - 477, 469, 922, 718, 468, 467, 922, 586, 593, 463, - 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, - 599, 456, 599, 599, 599, 599, 599, 599, 599, 599, - 599, 599, 599, 455, 452, 451, 599, 599, 599, 599, - 599, 720, 720, 720, 720, 720, 720, 720, 720, 720, - 720, 758, 449, 758, 758, 758, 758, 758, 758, 448, - 599, 599, 599, 599, 599, 599, 602, 447, 602, 602, - - 602, 602, 602, 602, 602, 602, 602, 602, 602, 441, - 440, 438, 602, 602, 602, 602, 602, 734, 734, 734, - 734, 734, 734, 734, 734, 734, 734, 767, 437, 767, - 767, 767, 767, 767, 767, 436, 602, 602, 602, 602, - 602, 602, 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 605, 435, 411, 410, 605, 605, 605, 605, - 605, 735, 735, 735, 735, 735, 735, 735, 735, 735, - 735, 407, 745, 406, 745, 745, 745, 745, 745, 745, - 605, 605, 605, 605, 605, 605, 606, 405, 606, 606, - 606, 606, 606, 606, 606, 606, 606, 606, 617, 617, - - 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, - 745, 404, 398, 397, 617, 617, 617, 617, 617, 746, - 746, 746, 746, 746, 746, 746, 746, 746, 746, 800, - 396, 800, 800, 800, 800, 800, 800, 395, 617, 617, - 617, 617, 617, 617, 638, 394, 638, 638, 638, 638, - 638, 638, 638, 638, 638, 638, 644, 644, 644, 644, - 644, 644, 644, 644, 644, 644, 763, 763, 763, 763, - 763, 763, 763, 763, 763, 763, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 812, 812, 812, 812, - 812, 812, 644, 646, 393, 646, 646, 646, 646, 646, - - 646, 646, 646, 646, 646, 773, 773, 773, 773, 773, - 773, 773, 773, 773, 773, 774, 774, 774, 774, 774, - 774, 774, 774, 774, 774, 392, 928, 391, 390, 928, - 389, 646, 661, 928, 661, 661, 661, 661, 661, 661, - 661, 661, 661, 661, 661, 388, 387, 386, 661, 661, - 661, 661, 661, 790, 385, 790, 790, 790, 790, 790, - 790, 792, 792, 792, 792, 792, 792, 792, 792, 792, - 792, 382, 661, 661, 661, 661, 661, 661, 664, 381, - 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, - 664, 790, 376, 375, 664, 664, 664, 664, 664, 793, - - 793, 793, 793, 793, 793, 793, 793, 793, 793, 374, - 368, 366, 365, 364, 363, 362, 361, 360, 664, 664, - 664, 664, 664, 664, 667, 667, 667, 667, 667, 667, - 667, 667, 667, 667, 359, 343, 342, 341, 667, 667, - 667, 667, 667, 796, 796, 796, 796, 796, 796, 796, - 796, 796, 796, 340, 338, 337, 809, 809, 809, 809, - 809, 809, 667, 667, 667, 667, 667, 667, 668, 333, - 668, 668, 668, 668, 668, 668, 668, 668, 668, 668, - 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, - 671, 704, 809, 704, 704, 704, 704, 704, 704, 704, - - 704, 704, 704, 705, 332, 705, 705, 705, 705, 705, - 705, 705, 705, 705, 705, 706, 331, 706, 706, 706, - 706, 706, 706, 706, 706, 706, 706, 709, 329, 709, - 709, 709, 709, 709, 709, 709, 709, 709, 709, 716, - 328, 716, 716, 716, 716, 716, 716, 716, 716, 716, - 716, 716, 327, 326, 325, 716, 716, 716, 716, 716, - 804, 804, 804, 804, 804, 804, 804, 804, 804, 804, - 324, 318, 317, 316, 309, 308, 307, 306, 305, 716, - 716, 716, 716, 716, 716, 719, 299, 719, 719, 719, - 719, 719, 719, 719, 719, 719, 719, 297, 296, 295, - - 294, 719, 719, 719, 719, 719, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 293, 292, 290, 288, - 280, 279, 276, 275, 268, 719, 719, 719, 719, 719, - 719, 738, 267, 738, 738, 738, 738, 738, 738, 738, - 738, 738, 738, 741, 265, 741, 741, 741, 741, 741, - 741, 741, 741, 741, 741, 743, 264, 743, 743, 743, - 743, 743, 743, 743, 743, 743, 743, 744, 263, 744, - 744, 744, 744, 744, 744, 744, 744, 744, 744, 756, - 262, 756, 756, 756, 756, 756, 756, 756, 756, 756, - 756, 769, 261, 769, 769, 769, 769, 769, 769, 769, - - 769, 769, 769, 770, 260, 770, 770, 770, 770, 770, - 770, 770, 770, 770, 770, 771, 259, 771, 771, 771, - 771, 771, 771, 771, 771, 771, 771, 785, 258, 785, - 785, 785, 785, 785, 785, 785, 785, 785, 785, 786, - 255, 786, 786, 786, 786, 786, 786, 786, 786, 786, - 786, 788, 252, 788, 788, 788, 788, 788, 788, 788, - 788, 788, 788, 789, 251, 789, 789, 789, 789, 789, - 789, 789, 789, 789, 789, 801, 801, 801, 801, 801, - 801, 801, 801, 801, 801, 806, 806, 806, 806, 806, - 806, 806, 806, 806, 806, 811, 811, 811, 811, 811, - - 811, 811, 811, 811, 811, 250, 244, 241, 240, 239, - 238, 801, 802, 802, 802, 802, 802, 802, 802, 802, - 802, 802, 237, 234, 233, 232, 231, 230, 229, 228, - 227, 226, 225, 224, 223, 217, 216, 209, 208, 207, - 206, 205, 204, 202, 201, 199, 193, 185, 802, 803, - 803, 803, 803, 803, 803, 803, 803, 803, 803, 181, - 177, 176, 174, 170, 163, 159, 157, 155, 147, 146, - 145, 144, 143, 137, 136, 135, 134, 133, 131, 130, - 129, 128, 124, 120, 119, 803, 808, 808, 808, 808, - 808, 808, 808, 808, 808, 808, 115, 112, 109, 104, - - 103, 102, 100, 96, 95, 94, 93, 90, 77, 70, - 63, 59, 58, 56, 55, 53, 51, 43, 42, 41, - 39, 35, 808, 814, 814, 814, 814, 814, 814, 814, - 814, 814, 814, 814, 814, 814, 814, 814, 814, 814, - 814, 814, 814, 814, 815, 815, 815, 815, 815, 815, - 815, 815, 815, 815, 815, 815, 815, 815, 815, 815, - 815, 815, 815, 815, 815, 816, 816, 816, 816, 816, - 816, 816, 816, 816, 816, 816, 816, 816, 816, 816, - 816, 816, 816, 816, 816, 816, 817, 817, 817, 817, - 817, 817, 817, 817, 817, 817, 817, 817, 817, 817, - - 817, 817, 817, 817, 817, 817, 817, 818, 31, 25, - 19, 17, 16, 15, 818, 0, 818, 818, 818, 818, - 0, 0, 818, 818, 818, 818, 818, 818, 819, 819, - 819, 819, 819, 819, 819, 819, 819, 819, 819, 819, - 819, 819, 819, 819, 819, 819, 819, 819, 819, 820, - 0, 0, 0, 0, 820, 0, 820, 0, 820, 820, - 820, 820, 820, 0, 820, 820, 820, 820, 820, 820, - 821, 0, 0, 0, 0, 0, 0, 821, 0, 821, - 821, 821, 821, 0, 0, 821, 821, 821, 821, 821, - 821, 822, 0, 0, 822, 822, 0, 822, 822, 0, - - 822, 822, 822, 822, 0, 0, 822, 822, 822, 822, - 822, 822, 823, 823, 0, 823, 0, 0, 0, 823, - 825, 0, 0, 825, 825, 0, 825, 825, 0, 825, - 825, 825, 825, 0, 0, 825, 825, 825, 825, 825, - 825, 826, 0, 0, 826, 826, 0, 826, 826, 0, - 826, 826, 826, 826, 0, 826, 826, 826, 0, 826, - 826, 826, 828, 0, 0, 828, 0, 0, 828, 828, - 0, 828, 828, 828, 828, 828, 0, 828, 828, 828, - 828, 828, 828, 829, 829, 829, 829, 829, 829, 829, - 829, 829, 829, 829, 829, 829, 829, 829, 829, 829, - - 829, 829, 829, 829, 830, 830, 0, 830, 0, 830, - 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, - 830, 830, 830, 830, 830, 831, 0, 0, 0, 0, - 831, 0, 831, 0, 831, 831, 831, 831, 831, 0, - 831, 831, 831, 831, 831, 831, 832, 0, 0, 0, - 0, 0, 0, 832, 0, 832, 832, 832, 832, 0, - 832, 832, 832, 832, 832, 832, 832, 833, 0, 0, - 833, 833, 0, 833, 833, 0, 833, 833, 833, 833, - 0, 833, 833, 833, 833, 833, 833, 833, 834, 834, - 834, 834, 834, 834, 834, 834, 834, 834, 834, 834, - - 834, 834, 834, 834, 834, 834, 834, 834, 834, 835, - 835, 0, 835, 835, 835, 835, 835, 835, 835, 835, - 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, - 837, 0, 0, 837, 837, 0, 837, 837, 0, 837, - 837, 837, 837, 0, 0, 837, 837, 837, 837, 837, - 837, 838, 838, 0, 838, 0, 0, 0, 838, 839, - 839, 0, 839, 0, 0, 0, 839, 840, 840, 840, - 0, 840, 0, 0, 0, 840, 841, 0, 0, 841, - 841, 0, 841, 841, 0, 841, 841, 841, 841, 0, - 0, 841, 841, 841, 841, 841, 841, 842, 0, 0, - - 842, 842, 0, 842, 842, 0, 842, 842, 842, 842, - 0, 0, 842, 842, 842, 842, 842, 842, 843, 0, - 0, 843, 843, 0, 843, 843, 0, 843, 843, 843, - 843, 0, 843, 843, 843, 0, 843, 843, 843, 845, - 0, 0, 845, 0, 0, 845, 845, 0, 845, 845, - 845, 845, 845, 0, 845, 845, 845, 845, 845, 845, - 846, 0, 0, 0, 0, 0, 0, 846, 0, 846, - 846, 846, 846, 0, 0, 846, 846, 846, 846, 846, - 846, 847, 0, 0, 0, 0, 0, 0, 847, 0, - 847, 847, 847, 847, 0, 847, 847, 847, 847, 847, - - 847, 847, 848, 0, 0, 848, 848, 0, 848, 848, - 0, 848, 848, 848, 848, 0, 848, 848, 848, 848, - 848, 848, 848, 849, 0, 0, 849, 849, 0, 849, - 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, - 850, 850, 850, 850, 850, 850, 850, 850, 850, 850, - 850, 851, 851, 0, 851, 0, 0, 0, 851, 852, - 852, 852, 0, 852, 0, 0, 0, 852, 855, 855, - 0, 855, 0, 0, 0, 855, 856, 856, 0, 856, - 0, 0, 0, 856, 857, 857, 0, 857, 0, 0, - 0, 857, 858, 858, 858, 0, 858, 0, 0, 0, - - 858, 859, 0, 0, 859, 859, 0, 859, 860, 860, - 0, 860, 0, 0, 0, 860, 861, 861, 0, 861, - 0, 0, 0, 861, 862, 862, 0, 862, 0, 0, - 0, 862, 863, 863, 863, 0, 863, 0, 0, 0, - 863, 864, 864, 864, 864, 0, 864, 0, 0, 0, - 864, 867, 867, 0, 867, 0, 0, 0, 867, 868, - 868, 0, 868, 0, 0, 0, 868, 869, 869, 0, - 869, 0, 0, 0, 869, 872, 872, 872, 0, 872, - 0, 0, 0, 872, 873, 873, 873, 873, 0, 873, - 0, 0, 0, 873, 874, 874, 874, 874, 874, 874, - - 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, - 874, 874, 874, 874, 874, 876, 876, 0, 876, 0, - 0, 0, 876, 877, 877, 0, 877, 0, 0, 0, - 877, 879, 879, 879, 0, 879, 0, 0, 0, 879, - 880, 880, 880, 880, 0, 880, 0, 0, 0, 880, - 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, - 881, 881, 881, 881, 881, 881, 881, 881, 881, 881, - 881, 884, 0, 0, 884, 884, 0, 884, 885, 0, - 0, 0, 885, 885, 0, 885, 885, 885, 0, 0, - 885, 885, 886, 886, 0, 886, 0, 0, 0, 886, - - 887, 0, 887, 887, 0, 887, 0, 0, 0, 887, - 890, 890, 890, 0, 890, 0, 0, 0, 890, 891, - 891, 891, 891, 0, 891, 0, 0, 0, 891, 892, - 892, 0, 0, 892, 0, 0, 0, 892, 893, 893, - 893, 893, 893, 893, 893, 893, 893, 893, 893, 893, - 893, 893, 893, 893, 893, 893, 893, 893, 893, 895, - 0, 0, 895, 895, 0, 895, 896, 0, 0, 0, - 896, 896, 0, 896, 896, 896, 0, 0, 896, 896, - 899, 899, 0, 899, 0, 0, 0, 899, 900, 0, - 900, 900, 0, 900, 0, 0, 0, 900, 902, 902, - - 902, 0, 902, 0, 0, 0, 902, 903, 903, 903, - 0, 0, 903, 0, 0, 0, 903, 904, 904, 904, - 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, - 904, 904, 904, 904, 904, 904, 904, 904, 905, 905, - 0, 905, 905, 905, 0, 905, 0, 905, 905, 905, - 905, 0, 0, 905, 905, 905, 905, 905, 905, 906, - 906, 0, 906, 906, 906, 0, 906, 0, 906, 906, - 906, 906, 0, 0, 906, 906, 906, 906, 906, 906, - 909, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 909, 909, 0, 909, 909, 0, 909, 911, 911, - - 0, 911, 0, 0, 0, 911, 912, 0, 912, 912, - 0, 912, 0, 0, 0, 912, 915, 915, 0, 0, - 915, 0, 0, 0, 915, 917, 0, 0, 0, 0, - 0, 0, 917, 0, 917, 917, 917, 917, 0, 0, - 917, 917, 917, 917, 917, 917, 920, 920, 0, 920, - 0, 0, 0, 920, 921, 0, 921, 921, 0, 921, - 0, 0, 0, 921, 925, 925, 0, 925, 0, 0, - 0, 925, 926, 0, 926, 0, 0, 926, 0, 0, - 0, 926, 927, 927, 927, 927, 927, 927, 927, 927, - 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, - - 927, 927, 927, 813, 813, 813, 813, 813, 813, 813, - 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, - 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, - 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, - 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, - 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, - 813, 813, 813, 813, 813, 813, 813, 813, 813, 813, - 813, 813, 813, 813 + 735, 711, 735, 735, 735, 751, 826, 628, 583, 583, + 583, 583, 583, 583, 586, 586, 586, 586, 586, 586, + 586, 586, 586, 586, 586, 627, 625, 751, 586, 586, + 586, 586, 586, 586, 713, 713, 713, 713, 713, 713, + 713, 713, 713, 713, 924, 927, 924, 927, 937, 720, + 937, 735, 624, 586, 586, 586, 586, 586, 586, 587, + 720, 587, 587, 587, 587, 587, 587, 587, 587, 587, + 587, 590, 622, 590, 590, 590, 590, 590, 590, 590, + 590, 590, 590, 597, 597, 597, 597, 597, 597, 597, + 597, 597, 597, 597, 597, 597, 621, 788, 809, 597, + + 597, 597, 597, 597, 597, 736, 620, 736, 736, 736, + 737, 763, 737, 737, 737, 738, 618, 738, 738, 738, + 614, 788, 809, 763, 597, 597, 597, 597, 597, 597, + 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, + 600, 600, 788, 801, 613, 809, 600, 600, 600, 600, + 600, 600, 938, 612, 938, 801, 736, 946, 947, 946, + 947, 737, 950, 956, 950, 956, 738, 957, 959, 957, + 959, 600, 600, 600, 600, 600, 600, 603, 595, 603, + 603, 603, 603, 603, 603, 603, 603, 603, 603, 604, + 742, 589, 742, 742, 742, 604, 742, 742, 604, 604, + + 742, 604, 604, 604, 604, 604, 604, 604, 604, 604, + 604, 604, 604, 604, 742, 742, 742, 604, 604, 604, + 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, + 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, + 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, + 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, + 626, 747, 588, 747, 747, 747, 747, 747, 747, 626, + 967, 575, 967, 626, 626, 626, 626, 626, 626, 626, + 626, 626, 626, 626, 626, 626, 574, 568, 626, 626, + 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, + + 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, + 626, 565, 626, 626, 626, 626, 626, 626, 626, 626, + 626, 626, 626, 626, 626, 626, 626, 626, 626, 626, + 632, 564, 632, 632, 632, 632, 632, 632, 632, 632, + 632, 632, 743, 743, 743, 743, 743, 743, 743, 743, + 743, 743, 762, 762, 762, 762, 762, 762, 762, 762, + 762, 762, 769, 769, 769, 769, 769, 769, 965, 632, + 639, 965, 639, 639, 639, 639, 639, 639, 639, 639, + 639, 639, 645, 562, 645, 645, 645, 645, 645, 645, + 645, 645, 645, 645, 645, 648, 561, 648, 648, 648, + + 648, 648, 648, 648, 648, 648, 648, 648, 968, 559, + 968, 648, 648, 648, 648, 648, 648, 766, 558, 766, + 766, 766, 766, 766, 766, 971, 553, 971, 798, 766, + 798, 798, 798, 798, 798, 798, 648, 648, 648, 648, + 648, 648, 651, 651, 651, 651, 651, 651, 651, 651, + 651, 651, 651, 972, 552, 972, 651, 651, 651, 651, + 651, 651, 768, 768, 768, 768, 768, 768, 768, 768, + 768, 768, 774, 774, 774, 774, 774, 774, 774, 517, + 516, 651, 651, 651, 651, 651, 651, 652, 515, 652, + 652, 652, 652, 652, 652, 652, 652, 652, 652, 663, + + 663, 663, 663, 663, 663, 663, 663, 663, 663, 663, + 663, 686, 507, 686, 686, 686, 686, 686, 686, 686, + 686, 686, 686, 692, 692, 692, 692, 692, 692, 692, + 692, 692, 692, 782, 782, 782, 782, 782, 782, 782, + 782, 782, 782, 783, 783, 783, 783, 783, 783, 783, + 783, 783, 783, 842, 842, 842, 842, 842, 842, 506, + 692, 694, 505, 694, 694, 694, 694, 694, 694, 694, + 694, 694, 694, 977, 501, 977, 793, 494, 793, 793, + 793, 793, 793, 793, 794, 794, 794, 794, 794, 794, + 794, 794, 794, 794, 860, 860, 860, 860, 860, 860, + + 694, 709, 493, 709, 709, 709, 709, 709, 709, 709, + 709, 709, 709, 709, 712, 793, 712, 712, 712, 712, + 712, 712, 712, 712, 712, 712, 712, 978, 490, 978, + 712, 712, 712, 712, 712, 712, 811, 811, 811, 811, + 811, 811, 811, 811, 811, 811, 815, 488, 815, 815, + 815, 815, 815, 815, 487, 712, 712, 712, 712, 712, + 712, 715, 715, 715, 715, 715, 715, 715, 715, 715, + 715, 484, 483, 482, 476, 715, 715, 715, 715, 715, + 715, 820, 820, 820, 820, 820, 820, 820, 820, 820, + 820, 838, 475, 838, 838, 838, 838, 838, 838, 473, + + 715, 715, 715, 715, 715, 715, 716, 472, 716, 716, + 716, 716, 716, 716, 716, 716, 716, 716, 719, 719, + 719, 719, 719, 719, 719, 719, 719, 719, 719, 752, + 838, 752, 752, 752, 752, 752, 752, 752, 752, 752, + 752, 753, 471, 753, 753, 753, 753, 753, 753, 753, + 753, 753, 753, 754, 470, 754, 754, 754, 754, 754, + 754, 754, 754, 754, 754, 757, 443, 757, 757, 757, + 757, 757, 757, 757, 757, 757, 757, 764, 442, 764, + 764, 764, 764, 764, 764, 764, 764, 764, 764, 764, + 767, 439, 767, 767, 767, 767, 767, 767, 767, 767, + + 767, 767, 438, 437, 436, 430, 767, 767, 767, 767, + 767, 767, 821, 821, 821, 821, 821, 821, 821, 821, + 821, 821, 848, 429, 848, 848, 848, 848, 848, 848, + 428, 767, 767, 767, 767, 767, 767, 770, 427, 770, + 770, 770, 770, 770, 770, 770, 770, 770, 770, 786, + 426, 786, 786, 786, 786, 786, 786, 786, 786, 786, + 786, 789, 425, 789, 789, 789, 789, 789, 789, 789, + 789, 789, 789, 791, 424, 791, 791, 791, 791, 791, + 791, 791, 791, 791, 791, 792, 423, 792, 792, 792, + 792, 792, 792, 792, 792, 792, 792, 804, 422, 804, + + 804, 804, 804, 804, 804, 804, 804, 804, 804, 817, + 421, 817, 817, 817, 817, 817, 817, 817, 817, 817, + 817, 818, 420, 818, 818, 818, 818, 818, 818, 818, + 818, 818, 818, 819, 419, 819, 819, 819, 819, 819, + 819, 819, 819, 819, 819, 822, 822, 822, 822, 822, + 822, 822, 822, 822, 822, 833, 418, 833, 833, 833, + 833, 833, 833, 833, 833, 833, 833, 834, 417, 834, + 834, 834, 834, 834, 834, 834, 834, 834, 834, 836, + 416, 836, 836, 836, 836, 836, 836, 836, 836, 836, + 836, 837, 415, 837, 837, 837, 837, 837, 837, 837, + + 837, 837, 837, 840, 840, 840, 840, 840, 840, 840, + 840, 840, 840, 841, 841, 841, 841, 841, 841, 841, + 841, 841, 841, 844, 844, 844, 844, 844, 844, 844, + 844, 844, 844, 849, 849, 849, 849, 849, 849, 849, + 849, 849, 849, 852, 852, 852, 852, 852, 852, 852, + 852, 852, 852, 853, 853, 853, 853, 853, 853, 853, + 853, 853, 853, 857, 857, 857, 857, 857, 857, 414, + 849, 850, 850, 850, 850, 850, 850, 850, 850, 850, + 850, 854, 854, 854, 854, 854, 854, 854, 854, 854, + 854, 976, 411, 410, 976, 405, 404, 403, 976, 397, + + 857, 395, 394, 393, 392, 391, 390, 389, 850, 851, + 851, 851, 851, 851, 851, 851, 851, 851, 851, 859, + 859, 859, 859, 859, 859, 859, 859, 859, 859, 386, + 385, 384, 383, 367, 366, 365, 364, 362, 361, 357, + 356, 355, 353, 352, 351, 350, 851, 856, 856, 856, + 856, 856, 856, 856, 856, 856, 856, 349, 348, 347, + 346, 343, 338, 337, 336, 329, 328, 327, 326, 325, + 319, 317, 316, 315, 314, 313, 312, 311, 310, 307, + 306, 304, 296, 295, 856, 862, 862, 862, 862, 862, + 862, 862, 862, 862, 862, 862, 862, 862, 862, 862, + + 862, 862, 862, 862, 862, 862, 863, 863, 863, 863, + 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, + 863, 863, 863, 863, 863, 863, 863, 864, 864, 864, + 864, 864, 864, 864, 864, 864, 864, 864, 864, 864, + 864, 864, 864, 864, 864, 864, 864, 864, 865, 865, + 865, 865, 865, 865, 865, 865, 865, 865, 865, 865, + 865, 865, 865, 865, 865, 865, 865, 865, 865, 866, + 292, 291, 284, 283, 281, 280, 866, 279, 866, 866, + 866, 866, 278, 277, 866, 866, 866, 866, 866, 866, + 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, + + 867, 867, 867, 867, 867, 867, 867, 867, 867, 867, + 867, 868, 276, 275, 274, 273, 868, 272, 868, 271, + 868, 868, 868, 868, 868, 270, 868, 868, 868, 868, + 868, 868, 869, 267, 264, 263, 262, 256, 253, 869, + 252, 869, 869, 869, 869, 251, 250, 869, 869, 869, + 869, 869, 869, 870, 249, 246, 870, 870, 245, 870, + 870, 244, 870, 870, 870, 870, 243, 242, 870, 870, + 870, 870, 870, 870, 871, 871, 241, 871, 240, 239, + 238, 871, 873, 237, 236, 873, 873, 235, 873, 873, + 234, 873, 873, 873, 873, 233, 232, 873, 873, 873, + + 873, 873, 873, 874, 231, 225, 874, 874, 224, 874, + 874, 217, 874, 874, 874, 874, 216, 874, 874, 874, + 215, 874, 874, 874, 876, 214, 213, 876, 212, 210, + 876, 876, 209, 876, 876, 876, 876, 876, 208, 876, + 876, 876, 876, 876, 876, 877, 877, 877, 877, 877, + 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, + 877, 877, 877, 877, 877, 877, 878, 878, 207, 878, + 205, 878, 878, 878, 878, 878, 878, 878, 878, 878, + 878, 878, 878, 878, 878, 878, 878, 879, 199, 191, + 187, 183, 879, 182, 879, 180, 879, 879, 879, 879, + + 879, 176, 879, 879, 879, 879, 879, 879, 880, 169, + 165, 163, 161, 153, 152, 880, 151, 880, 880, 880, + 880, 150, 880, 880, 880, 880, 880, 880, 880, 881, + 149, 143, 881, 881, 142, 881, 881, 141, 881, 881, + 881, 881, 140, 881, 881, 881, 881, 881, 881, 881, + 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, + 882, 882, 882, 882, 882, 882, 882, 882, 882, 882, + 882, 883, 883, 139, 883, 883, 883, 883, 883, 883, + 883, 883, 883, 883, 883, 883, 883, 883, 883, 883, + 883, 883, 885, 137, 136, 885, 885, 135, 885, 885, + + 134, 885, 885, 885, 885, 133, 132, 885, 885, 885, + 885, 885, 885, 886, 886, 128, 886, 124, 123, 119, + 886, 887, 887, 116, 887, 113, 108, 107, 887, 888, + 888, 888, 106, 888, 104, 100, 99, 888, 889, 98, + 97, 889, 889, 96, 889, 889, 92, 889, 889, 889, + 889, 79, 72, 889, 889, 889, 889, 889, 889, 890, + 65, 61, 890, 890, 60, 890, 890, 58, 890, 890, + 890, 890, 57, 55, 890, 890, 890, 890, 890, 890, + 891, 53, 45, 891, 891, 44, 891, 891, 43, 891, + 891, 891, 891, 41, 891, 891, 891, 40, 891, 891, + + 891, 893, 35, 31, 893, 25, 19, 893, 893, 17, + 893, 893, 893, 893, 893, 16, 893, 893, 893, 893, + 893, 893, 894, 894, 15, 894, 0, 894, 894, 894, + 894, 894, 894, 894, 894, 894, 894, 894, 894, 894, + 894, 894, 894, 895, 0, 0, 0, 0, 0, 0, + 895, 0, 895, 895, 895, 895, 0, 0, 895, 895, + 895, 895, 895, 895, 896, 0, 0, 0, 0, 0, + 0, 896, 0, 896, 896, 896, 896, 0, 896, 896, + 896, 896, 896, 896, 896, 897, 0, 0, 897, 897, + 0, 897, 897, 0, 897, 897, 897, 897, 0, 897, + + 897, 897, 897, 897, 897, 897, 898, 0, 0, 898, + 898, 0, 898, 899, 899, 899, 899, 899, 899, 899, + 899, 899, 899, 899, 899, 899, 899, 899, 899, 899, + 899, 899, 899, 899, 900, 900, 0, 900, 0, 0, + 0, 900, 901, 901, 901, 0, 901, 0, 0, 0, + 901, 904, 904, 0, 904, 0, 0, 0, 904, 905, + 905, 0, 905, 0, 0, 0, 905, 906, 906, 0, + 906, 0, 0, 0, 906, 907, 907, 907, 0, 907, + 0, 0, 0, 907, 908, 0, 0, 908, 908, 0, + 908, 909, 909, 0, 909, 0, 0, 0, 909, 910, + + 910, 0, 910, 0, 0, 0, 910, 911, 911, 0, + 911, 0, 0, 0, 911, 912, 912, 912, 0, 912, + 0, 0, 0, 912, 913, 913, 913, 913, 0, 913, + 0, 0, 0, 913, 916, 916, 0, 916, 0, 0, + 0, 916, 917, 917, 0, 917, 0, 0, 0, 917, + 918, 918, 0, 918, 0, 0, 0, 918, 921, 921, + 921, 0, 921, 0, 0, 0, 921, 922, 922, 922, + 922, 0, 922, 0, 0, 0, 922, 923, 923, 923, + 923, 923, 923, 923, 923, 923, 923, 923, 923, 923, + 923, 923, 923, 923, 923, 923, 923, 923, 925, 925, + + 0, 925, 0, 0, 0, 925, 926, 926, 0, 926, + 0, 0, 0, 926, 928, 928, 928, 0, 928, 0, + 0, 0, 928, 929, 929, 929, 929, 0, 929, 0, + 0, 0, 929, 930, 930, 930, 930, 930, 930, 930, + 930, 930, 930, 930, 930, 930, 930, 930, 930, 930, + 930, 930, 930, 930, 933, 0, 0, 933, 933, 0, + 933, 934, 0, 0, 0, 934, 934, 0, 934, 934, + 934, 0, 0, 934, 934, 935, 935, 0, 935, 0, + 0, 0, 935, 936, 0, 936, 936, 0, 936, 0, + 0, 0, 936, 939, 939, 939, 0, 939, 0, 0, + + 0, 939, 940, 940, 940, 940, 0, 940, 0, 0, + 0, 940, 941, 941, 0, 0, 941, 0, 0, 0, + 941, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 942, 942, 942, 942, 942, 942, 942, 942, + 942, 942, 944, 0, 0, 944, 944, 0, 944, 945, + 0, 0, 0, 945, 945, 0, 945, 945, 945, 0, + 0, 945, 945, 948, 948, 0, 948, 0, 0, 0, + 948, 949, 0, 949, 949, 0, 949, 0, 0, 0, + 949, 951, 951, 951, 0, 951, 0, 0, 0, 951, + 952, 952, 952, 0, 0, 952, 0, 0, 0, 952, + + 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, + 953, 953, 953, 953, 953, 953, 953, 953, 953, 953, + 953, 954, 954, 0, 954, 954, 954, 0, 954, 0, + 954, 954, 954, 954, 0, 0, 954, 954, 954, 954, + 954, 954, 955, 955, 0, 955, 955, 955, 0, 955, + 0, 955, 955, 955, 955, 0, 0, 955, 955, 955, + 955, 955, 955, 958, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 958, 958, 0, 958, 958, 0, + 958, 960, 960, 0, 960, 0, 0, 0, 960, 961, + 0, 961, 961, 0, 961, 0, 0, 0, 961, 964, + + 964, 0, 0, 964, 0, 0, 0, 964, 966, 0, + 0, 0, 0, 0, 0, 966, 0, 966, 966, 966, + 966, 0, 0, 966, 966, 966, 966, 966, 966, 969, + 969, 0, 969, 0, 0, 0, 969, 970, 0, 970, + 970, 0, 970, 0, 0, 0, 970, 973, 973, 0, + 973, 0, 0, 0, 973, 974, 0, 974, 0, 0, + 974, 0, 0, 0, 974, 975, 975, 975, 975, 975, + 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, + 975, 975, 975, 975, 975, 975, 861, 861, 861, 861, + 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, + + 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 861, 861, 861, 861, 861, 861, 861, 861, + 861, 861, 861, 861, 861, 861, 861, 861 } ; static yy_state_type yy_last_accepting_state; @@ -1956,14 +1968,7 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ @@ -1975,28 +1980,8 @@ #elif defined(HAVE_INTTYPES_H) # include #endif -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ -#if defined(HAVE_MALLOC_H) && !defined(STDC_HEADERS) -# include -#endif /* HAVE_MALLOC_H && !STDC_HEADERS */ -#ifdef HAVE_DIRENT_H -# include -# define NAMLEN(dirent) strlen((dirent)->d_name) -#else -# define dirent direct -# define NAMLEN(dirent) (dirent)->d_namlen -# ifdef HAVE_SYS_NDIR_H -# include -# endif -# ifdef HAVE_SYS_DIR_H -# include -# endif -# ifdef HAVE_NDIR_H -# include -# endif -#endif +#include +#include #include #include #include "sudoers.h" @@ -2011,6 +1996,12 @@ # include "compat/sha2.h" #endif +#if defined(HAVE_STRUCT_DIRENT_D_NAMLEN) && HAVE_STRUCT_DIRENT_D_NAMLEN +# define NAMLEN(dirent) (dirent)->d_namlen +#else +# define NAMLEN(dirent) strlen((dirent)->d_name) +#endif + int sudolineno; /* current sudoers line number. */ int last_token; /* last token that was parsed. */ char *sudoers; /* sudoers file being parsed. */ @@ -2023,9 +2014,9 @@ static bool continued, sawspace; static int prev_state; -static int digest_len; +static yy_size_t digest_len; -static bool _push_include(char *, bool); +static bool push_include_int(char *, bool); static bool pop_include(void); static char *parse_include(char *); @@ -2038,8 +2029,8 @@ #define ECHO ignore_result(fwrite(sudoerstext, sudoersleng, 1, sudoersout)) -#define push_include(_p) (_push_include((_p), false)) -#define push_includedir(_p) (_push_include((_p), true)) +#define push_include(_p) (push_include_int((_p), false)) +#define push_includedir(_p) (push_include_int((_p), true)) #define YY_NO_INPUT 1 #define YY_NO_UNPUT 1 #define GOTDEFS 1 @@ -2054,7 +2045,7 @@ #define WANTDIGEST 6 -#line 2057 "lex.sudoers.c" +#line 2048 "lex.sudoers.c" /* Macros after this point can all be overridden by user definitions in * section 1. @@ -2208,9 +2199,9 @@ register char *yy_cp, *yy_bp; register int yy_act; -#line 141 "toke.l" +#line 120 "toke.l" -#line 2213 "lex.sudoers.c" +#line 2204 "lex.sudoers.c" if ( yy_init ) { @@ -2262,13 +2253,13 @@ 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 >= 814 ) + if ( yy_current_state >= 862 ) 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] != 5604 ); + while ( yy_base[yy_current_state] != 5587 ); yy_find_action: yy_act = yy_accept[yy_current_state]; @@ -2296,7 +2287,7 @@ case 1: YY_RULE_SETUP -#line 142 "toke.l" +#line 121 "toke.l" { LEXTRACE(", "); LEXRETURN(','); @@ -2304,12 +2295,12 @@ YY_BREAK case 2: YY_RULE_SETUP -#line 147 "toke.l" +#line 126 "toke.l" BEGIN STARTDEFS; YY_BREAK case 3: YY_RULE_SETUP -#line 149 "toke.l" +#line 128 "toke.l" { BEGIN INDEFS; LEXTRACE("DEFVAR "); @@ -2321,7 +2312,7 @@ case 4: YY_RULE_SETUP -#line 158 "toke.l" +#line 137 "toke.l" { BEGIN STARTDEFS; LEXTRACE(", "); @@ -2330,7 +2321,7 @@ YY_BREAK case 5: YY_RULE_SETUP -#line 164 "toke.l" +#line 143 "toke.l" { LEXTRACE("= "); LEXRETURN('='); @@ -2338,7 +2329,7 @@ YY_BREAK case 6: YY_RULE_SETUP -#line 169 "toke.l" +#line 148 "toke.l" { LEXTRACE("+= "); LEXRETURN('+'); @@ -2346,7 +2337,7 @@ YY_BREAK case 7: YY_RULE_SETUP -#line 174 "toke.l" +#line 153 "toke.l" { LEXTRACE("-= "); LEXRETURN('-'); @@ -2354,7 +2345,7 @@ YY_BREAK case 8: YY_RULE_SETUP -#line 179 "toke.l" +#line 158 "toke.l" { LEXTRACE("BEGINSTR "); sudoerslval.string = NULL; @@ -2364,7 +2355,7 @@ YY_BREAK case 9: YY_RULE_SETUP -#line 186 "toke.l" +#line 165 "toke.l" { LEXTRACE("WORD(2) "); if (!fill(sudoerstext, sudoersleng)) @@ -2376,7 +2367,7 @@ case 10: YY_RULE_SETUP -#line 195 "toke.l" +#line 174 "toke.l" { /* Line continuation char followed by newline. */ sudolineno++; @@ -2385,7 +2376,7 @@ YY_BREAK case 11: YY_RULE_SETUP -#line 201 "toke.l" +#line 180 "toke.l" { LEXTRACE("ENDSTR "); BEGIN prev_state; @@ -2420,7 +2411,7 @@ YY_BREAK case 12: YY_RULE_SETUP -#line 233 "toke.l" +#line 212 "toke.l" { LEXTRACE("BACKSLASH "); if (!append(sudoerstext, sudoersleng)) @@ -2429,7 +2420,7 @@ YY_BREAK case 13: YY_RULE_SETUP -#line 239 "toke.l" +#line 218 "toke.l" { LEXTRACE("STRBODY "); if (!append(sudoerstext, sudoersleng)) @@ -2440,7 +2431,7 @@ case 14: YY_RULE_SETUP -#line 247 "toke.l" +#line 226 "toke.l" { /* quoted fnmatch glob char, pass verbatim */ LEXTRACE("QUOTEDCHAR "); @@ -2451,7 +2442,7 @@ YY_BREAK case 15: YY_RULE_SETUP -#line 255 "toke.l" +#line 234 "toke.l" { /* quoted sudoers special char, strip backslash */ LEXTRACE("QUOTEDCHAR "); @@ -2462,7 +2453,7 @@ YY_BREAK case 16: YY_RULE_SETUP -#line 263 "toke.l" +#line 242 "toke.l" { BEGIN INITIAL; yyless(0); @@ -2471,7 +2462,7 @@ YY_BREAK case 17: YY_RULE_SETUP -#line 269 "toke.l" +#line 248 "toke.l" { LEXTRACE("ARG "); if (!fill_args(sudoerstext, sudoersleng, sawspace)) @@ -2482,10 +2473,10 @@ case 18: YY_RULE_SETUP -#line 277 "toke.l" +#line 256 "toke.l" { /* Only return DIGEST if the length is correct. */ - if (sudoersleng == digest_len * 2) { + if ((yy_size_t)sudoersleng == digest_len * 2) { if (!fill(sudoerstext, sudoersleng)) yyterminate(); BEGIN INITIAL; @@ -2498,10 +2489,10 @@ YY_BREAK case 19: YY_RULE_SETUP -#line 290 "toke.l" +#line 269 "toke.l" { /* Only return DIGEST if the length is correct. */ - int len; + yy_size_t len; if (sudoerstext[sudoersleng - 1] == '=') { /* use padding */ len = 4 * ((digest_len + 2) / 3); @@ -2509,7 +2500,7 @@ /* no padding */ len = (4 * digest_len + 2) / 3; } - if (sudoersleng == len) { + if ((yy_size_t)sudoersleng == len) { if (!fill(sudoerstext, sudoersleng)) yyterminate(); BEGIN INITIAL; @@ -2522,7 +2513,7 @@ YY_BREAK case 20: YY_RULE_SETUP -#line 311 "toke.l" +#line 290 "toke.l" { char *path; @@ -2543,7 +2534,7 @@ YY_BREAK case 21: YY_RULE_SETUP -#line 329 "toke.l" +#line 308 "toke.l" { char *path; @@ -2567,7 +2558,7 @@ YY_BREAK case 22: YY_RULE_SETUP -#line 350 "toke.l" +#line 329 "toke.l" { char deftype; int n; @@ -2610,7 +2601,7 @@ YY_BREAK case 23: YY_RULE_SETUP -#line 390 "toke.l" +#line 369 "toke.l" { int n; @@ -2639,7 +2630,7 @@ YY_BREAK case 24: YY_RULE_SETUP -#line 416 "toke.l" +#line 395 "toke.l" { /* cmnd does not require passwd for this user */ LEXTRACE("NOPASSWD "); @@ -2648,7 +2639,7 @@ YY_BREAK case 25: YY_RULE_SETUP -#line 422 "toke.l" +#line 401 "toke.l" { /* cmnd requires passwd for this user */ LEXTRACE("PASSWD "); @@ -2657,7 +2648,7 @@ YY_BREAK case 26: YY_RULE_SETUP -#line 428 "toke.l" +#line 407 "toke.l" { LEXTRACE("NOEXEC "); LEXRETURN(NOEXEC); @@ -2665,7 +2656,7 @@ YY_BREAK case 27: YY_RULE_SETUP -#line 433 "toke.l" +#line 412 "toke.l" { LEXTRACE("EXEC "); LEXRETURN(EXEC); @@ -2673,7 +2664,7 @@ YY_BREAK case 28: YY_RULE_SETUP -#line 438 "toke.l" +#line 417 "toke.l" { LEXTRACE("SETENV "); LEXRETURN(SETENV); @@ -2681,7 +2672,7 @@ YY_BREAK case 29: YY_RULE_SETUP -#line 443 "toke.l" +#line 422 "toke.l" { LEXTRACE("NOSETENV "); LEXRETURN(NOSETENV); @@ -2689,7 +2680,7 @@ YY_BREAK case 30: YY_RULE_SETUP -#line 448 "toke.l" +#line 427 "toke.l" { LEXTRACE("LOG_OUTPUT "); LEXRETURN(LOG_OUTPUT); @@ -2697,7 +2688,7 @@ YY_BREAK case 31: YY_RULE_SETUP -#line 453 "toke.l" +#line 432 "toke.l" { LEXTRACE("NOLOG_OUTPUT "); LEXRETURN(NOLOG_OUTPUT); @@ -2705,7 +2696,7 @@ YY_BREAK case 32: YY_RULE_SETUP -#line 458 "toke.l" +#line 437 "toke.l" { LEXTRACE("LOG_INPUT "); LEXRETURN(LOG_INPUT); @@ -2713,7 +2704,7 @@ YY_BREAK case 33: YY_RULE_SETUP -#line 463 "toke.l" +#line 442 "toke.l" { LEXTRACE("NOLOG_INPUT "); LEXRETURN(NOLOG_INPUT); @@ -2721,16 +2712,48 @@ YY_BREAK case 34: YY_RULE_SETUP -#line 468 "toke.l" +#line 447 "toke.l" +{ + LEXTRACE("MAIL "); + LEXRETURN(MAIL); + } + YY_BREAK +case 35: +YY_RULE_SETUP +#line 452 "toke.l" +{ + LEXTRACE("NOMAIL "); + LEXRETURN(NOMAIL); + } + YY_BREAK +case 36: +YY_RULE_SETUP +#line 457 "toke.l" +{ + LEXTRACE("FOLLOW "); + LEXRETURN(FOLLOW); + } + YY_BREAK +case 37: +YY_RULE_SETUP +#line 462 "toke.l" +{ + LEXTRACE("NOFOLLOW "); + LEXRETURN(NOFOLLOW); + } + YY_BREAK +case 38: +YY_RULE_SETUP +#line 467 "toke.l" { /* empty group or netgroup */ LEXTRACE("ERROR "); LEXRETURN(ERROR); } YY_BREAK -case 35: +case 39: YY_RULE_SETUP -#line 474 "toke.l" +#line 473 "toke.l" { /* netgroup */ if (!fill(sudoerstext, sudoersleng)) @@ -2739,9 +2762,9 @@ LEXRETURN(NETGROUP); } YY_BREAK -case 36: +case 40: YY_RULE_SETUP -#line 482 "toke.l" +#line 481 "toke.l" { /* group */ if (!fill(sudoerstext, sudoersleng)) @@ -2750,9 +2773,9 @@ LEXRETURN(USERGROUP); } YY_BREAK -case 37: +case 41: YY_RULE_SETUP -#line 490 "toke.l" +#line 489 "toke.l" { if (!fill(sudoerstext, sudoersleng)) yyterminate(); @@ -2760,9 +2783,9 @@ LEXRETURN(NTWKADDR); } YY_BREAK -case 38: +case 42: YY_RULE_SETUP -#line 497 "toke.l" +#line 496 "toke.l" { if (!fill(sudoerstext, sudoersleng)) yyterminate(); @@ -2770,9 +2793,9 @@ LEXRETURN(NTWKADDR); } YY_BREAK -case 39: +case 43: YY_RULE_SETUP -#line 504 "toke.l" +#line 503 "toke.l" { if (!ipv6_valid(sudoerstext)) { LEXTRACE("ERROR "); @@ -2784,9 +2807,9 @@ LEXRETURN(NTWKADDR); } YY_BREAK -case 40: +case 44: YY_RULE_SETUP -#line 515 "toke.l" +#line 514 "toke.l" { if (!ipv6_valid(sudoerstext)) { LEXTRACE("ERROR "); @@ -2798,18 +2821,18 @@ LEXRETURN(NTWKADDR); } YY_BREAK -case 41: +case 45: YY_RULE_SETUP -#line 526 "toke.l" +#line 525 "toke.l" { LEXTRACE("ALL "); LEXRETURN(ALL); } YY_BREAK -case 42: +case 46: YY_RULE_SETUP -#line 532 "toke.l" +#line 531 "toke.l" { #ifdef HAVE_SELINUX LEXTRACE("ROLE "); @@ -2819,9 +2842,9 @@ #endif } YY_BREAK -case 43: +case 47: YY_RULE_SETUP -#line 541 "toke.l" +#line 540 "toke.l" { #ifdef HAVE_SELINUX LEXTRACE("TYPE "); @@ -2831,9 +2854,9 @@ #endif } YY_BREAK -case 44: +case 48: YY_RULE_SETUP -#line 549 "toke.l" +#line 548 "toke.l" { #ifdef HAVE_PRIV_SET LEXTRACE("PRIVS "); @@ -2843,9 +2866,9 @@ #endif } YY_BREAK -case 45: +case 49: YY_RULE_SETUP -#line 558 "toke.l" +#line 557 "toke.l" { #ifdef HAVE_PRIV_SET LEXTRACE("LIMITPRIVS "); @@ -2855,9 +2878,9 @@ #endif } YY_BREAK -case 46: +case 50: YY_RULE_SETUP -#line 567 "toke.l" +#line 566 "toke.l" { got_alias: if (!fill(sudoerstext, sudoersleng)) @@ -2866,9 +2889,9 @@ LEXRETURN(ALIAS); } YY_BREAK -case 47: +case 51: YY_RULE_SETUP -#line 575 "toke.l" +#line 574 "toke.l" { /* XXX - no way to specify digest for command */ /* no command args allowed for Defaults!/path */ @@ -2878,9 +2901,9 @@ LEXRETURN(COMMAND); } YY_BREAK -case 48: +case 52: YY_RULE_SETUP -#line 584 "toke.l" +#line 583 "toke.l" { digest_len = SHA224_DIGEST_LENGTH; BEGIN WANTDIGEST; @@ -2888,9 +2911,9 @@ LEXRETURN(SHA224_TOK); } YY_BREAK -case 49: +case 53: YY_RULE_SETUP -#line 591 "toke.l" +#line 590 "toke.l" { digest_len = SHA256_DIGEST_LENGTH; BEGIN WANTDIGEST; @@ -2898,9 +2921,9 @@ LEXRETURN(SHA256_TOK); } YY_BREAK -case 50: +case 54: YY_RULE_SETUP -#line 598 "toke.l" +#line 597 "toke.l" { digest_len = SHA384_DIGEST_LENGTH; BEGIN WANTDIGEST; @@ -2908,9 +2931,9 @@ LEXRETURN(SHA384_TOK); } YY_BREAK -case 51: +case 55: YY_RULE_SETUP -#line 605 "toke.l" +#line 604 "toke.l" { digest_len = SHA512_DIGEST_LENGTH; BEGIN WANTDIGEST; @@ -2918,9 +2941,9 @@ LEXRETURN(SHA512_TOK); } YY_BREAK -case 52: +case 56: YY_RULE_SETUP -#line 612 "toke.l" +#line 611 "toke.l" { BEGIN GOTCMND; LEXTRACE("COMMAND "); @@ -2928,9 +2951,9 @@ yyterminate(); } /* sudo -e */ YY_BREAK -case 53: +case 57: YY_RULE_SETUP -#line 619 "toke.l" +#line 618 "toke.l" { /* directories can't have args... */ if (sudoerstext[sudoersleng - 1] == '/') { @@ -2946,9 +2969,9 @@ } } /* a pathname */ YY_BREAK -case 54: +case 58: YY_RULE_SETUP -#line 634 "toke.l" +#line 633 "toke.l" { LEXTRACE("BEGINSTR "); sudoerslval.string = NULL; @@ -2956,9 +2979,9 @@ BEGIN INSTR; } YY_BREAK -case 55: +case 59: YY_RULE_SETUP -#line 641 "toke.l" +#line 640 "toke.l" { /* a word */ if (!fill(sudoerstext, sudoersleng)) @@ -2967,49 +2990,49 @@ LEXRETURN(WORD); } YY_BREAK -case 56: +case 60: YY_RULE_SETUP -#line 649 "toke.l" +#line 648 "toke.l" { LEXTRACE("( "); LEXRETURN('('); } YY_BREAK -case 57: +case 61: YY_RULE_SETUP -#line 654 "toke.l" +#line 653 "toke.l" { LEXTRACE(") "); LEXRETURN(')'); } YY_BREAK -case 58: +case 62: YY_RULE_SETUP -#line 659 "toke.l" +#line 658 "toke.l" { LEXTRACE(", "); LEXRETURN(','); } /* return ',' */ YY_BREAK -case 59: +case 63: YY_RULE_SETUP -#line 664 "toke.l" +#line 663 "toke.l" { LEXTRACE("= "); LEXRETURN('='); } /* return '=' */ YY_BREAK -case 60: +case 64: YY_RULE_SETUP -#line 669 "toke.l" +#line 668 "toke.l" { LEXTRACE(": "); LEXRETURN(':'); } /* return ':' */ YY_BREAK -case 61: +case 65: YY_RULE_SETUP -#line 674 "toke.l" +#line 673 "toke.l" { if (sudoersleng & 1) { LEXTRACE("!"); @@ -3017,9 +3040,9 @@ } } YY_BREAK -case 62: +case 66: YY_RULE_SETUP -#line 681 "toke.l" +#line 680 "toke.l" { if (YY_START == INSTR) { LEXTRACE("ERROR "); @@ -3032,25 +3055,25 @@ LEXRETURN(COMMENT); } /* return newline */ YY_BREAK -case 63: +case 67: YY_RULE_SETUP -#line 693 "toke.l" +#line 692 "toke.l" { /* throw away space/tabs */ sawspace = true; /* but remember for fill_args */ } YY_BREAK -case 64: +case 68: YY_RULE_SETUP -#line 697 "toke.l" +#line 696 "toke.l" { sawspace = true; /* remember for fill_args */ sudolineno++; continued = true; } /* throw away EOL after \ */ YY_BREAK -case 65: +case 69: YY_RULE_SETUP -#line 703 "toke.l" +#line 702 "toke.l" { if (sudoerstext[sudoersleng - 1] == '\n') { /* comment ending in a newline */ @@ -3065,9 +3088,9 @@ LEXRETURN(COMMENT); } /* comment, not uid/gid */ YY_BREAK -case 66: +case 70: YY_RULE_SETUP -#line 717 "toke.l" +#line 716 "toke.l" { LEXTRACE("ERROR "); LEXRETURN(ERROR); @@ -3080,7 +3103,7 @@ case YY_STATE_EOF(INDEFS): case YY_STATE_EOF(INSTR): case YY_STATE_EOF(WANTDIGEST): -#line 722 "toke.l" +#line 721 "toke.l" { if (YY_START != INITIAL) { BEGIN INITIAL; @@ -3091,12 +3114,12 @@ yyterminate(); } YY_BREAK -case 67: +case 71: YY_RULE_SETUP -#line 732 "toke.l" +#line 731 "toke.l" ECHO; YY_BREAK -#line 3099 "lex.sudoers.c" +#line 3122 "lex.sudoers.c" case YY_END_OF_BUFFER: { @@ -3387,7 +3410,7 @@ 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 >= 814 ) + if ( yy_current_state >= 862 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -3422,11 +3445,11 @@ 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 >= 814 ) + if ( yy_current_state >= 862 ) 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 == 813); + yy_is_jam = (yy_current_state == 861); return yy_is_jam ? 0 : yy_current_state; } @@ -3987,7 +4010,7 @@ return 0; } #endif -#line 732 "toke.l" +#line 731 "toke.l" struct path_list { SLIST_ENTRY(path_list) entries; @@ -4040,9 +4063,11 @@ } goto bad; } - paths = malloc(sizeof(*paths) * max_paths); - if (paths == NULL) + paths = reallocarray(NULL, max_paths, sizeof(*paths)); + if (paths == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); goto bad; + } while ((dent = readdir(dir)) != NULL) { struct path_list *pl; struct stat sb; @@ -4056,22 +4081,24 @@ if (asprintf(&path, "%s/%s", dirpath, dent->d_name) == -1) goto bad; if (stat(path, &sb) != 0 || !S_ISREG(sb.st_mode)) { - sudo_efree(path); + free(path); continue; } pl = malloc(sizeof(*pl)); if (pl == NULL) { - sudo_efree(path); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + free(path); goto bad; } pl->path = path; if (count >= max_paths) { struct path_list **tmp; max_paths <<= 1; - tmp = realloc(paths, sizeof(*paths) * max_paths); + tmp = reallocarray(paths, max_paths, sizeof(*paths)); if (tmp == NULL) { - sudo_efree(path); - sudo_efree(pl); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + free(path); + free(pl); goto bad; } paths = tmp; @@ -4080,7 +4107,7 @@ } closedir(dir); if (count == 0) { - sudo_efree(paths); + free(paths); paths = NULL; } *pathsp = paths; @@ -4089,10 +4116,10 @@ if (dir != NULL) closedir(dir); for (i = 0; i < count; i++) { - sudo_efree(paths[i]->path); - sudo_efree(paths[i]); + free(paths[i]->path); + free(paths[i]); } - sudo_efree(paths); + free(paths); debug_return_int(-1); } @@ -4116,7 +4143,7 @@ for (i = 0; i < count; i++) { SLIST_INSERT_HEAD(&stack->more, paths[i], entries); } - sudo_efree(paths); + free(paths); } debug_return_int(count); @@ -4139,15 +4166,15 @@ idepth--; while ((pl = SLIST_FIRST(&istack[idepth].more)) != NULL) { SLIST_REMOVE_HEAD(&istack[idepth].more, entries); - sudo_efree(pl->path); - sudo_efree(pl); + free(pl->path); + free(pl); } - sudo_efree(istack[idepth].path); + free(istack[idepth].path); if (idepth && !istack[idepth].keepopen) fclose(istack[idepth].bs->yy_input_file); sudoers_delete_buffer(istack[idepth].bs); } - sudo_efree(istack); + free(istack); istack = NULL; istacksize = idepth = 0; sudolineno = 1; @@ -4160,11 +4187,11 @@ } static bool -_push_include(char *path, bool isdir) +push_include_int(char *path, bool isdir) { struct path_list *pl; FILE *fp; - debug_decl(_push_include, SUDOERS_DEBUG_PARSER) + debug_decl(push_include_int, SUDOERS_DEBUG_PARSER) /* push current state onto stack */ if (idepth >= istacksize) { @@ -4175,10 +4202,9 @@ debug_return_bool(false); } istacksize += SUDOERS_STACK_INCREMENT; - new_istack = (struct include_stack *) realloc(istack, - sizeof(*istack) * istacksize); + new_istack = reallocarray(istack, istacksize, sizeof(*istack)); if (new_istack == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); sudoerserror(NULL); debug_return_bool(false); } @@ -4225,20 +4251,20 @@ count = switch_dir(&istack[idepth], path); if (count <= 0) { /* switch_dir() called sudoerserror() for us */ - sudo_efree(path); + free(path); debug_return_bool(count ? false : true); } /* Parse the first dir entry we can open, leave the rest for later. */ do { - sudo_efree(path); + free(path); if ((pl = SLIST_FIRST(&istack[idepth].more)) == NULL) { /* Unable to open any files in include dir, not an error. */ debug_return_bool(true); } SLIST_REMOVE_HEAD(&istack[idepth].more, entries); path = pl->path; - sudo_efree(pl); + free(pl); } while ((fp = open_sudoers(path, false, &keepopen)) == NULL); } else { if ((fp = open_sudoers(path, true, &keepopen)) == NULL) { @@ -4278,22 +4304,22 @@ SLIST_REMOVE_HEAD(&istack[idepth - 1].more, entries); fp = open_sudoers(pl->path, false, &keepopen); if (fp != NULL) { - sudo_efree(sudoers); + free(sudoers); sudoers = pl->path; sudolineno = 1; sudoers_switch_to_buffer(sudoers_create_buffer(fp, YY_BUF_SIZE)); - sudo_efree(pl); + free(pl); break; } /* Unable to open path in include dir, go to next one. */ - sudo_efree(pl->path); - sudo_efree(pl); + free(pl->path); + free(pl); } /* If no path list, just pop the last dir on the stack. */ if (pl == NULL) { idepth--; sudoers_switch_to_buffer(istack[idepth].bs); - sudo_efree(sudoers); + free(sudoers); sudoers = istack[idepth].path; sudolineno = istack[idepth].lineno; keepopen = istack[idepth].keepopen; @@ -4336,7 +4362,7 @@ len += (int)(ep - cp); path = pp = malloc(len + dirlen + 1); if (path == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); sudoerserror(NULL); debug_return_str(NULL); } diff -Nru sudo-1.8.12/plugins/sudoers/toke.h sudo-1.8.16/plugins/sudoers/toke.h --- sudo-1.8.12/plugins/sudoers/toke.h 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/toke.h 2016-03-17 16:13:10.000000000 +0000 @@ -14,13 +14,13 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _SUDOERS_TOKE_H -#define _SUDOERS_TOKE_H +#ifndef SUDOERS_TOKE_H +#define SUDOERS_TOKE_H -bool append(const char *, int); -bool fill_args(const char *, int, int); -bool fill_cmnd(const char *, int); -bool fill_txt(const char *, int, int); +bool append(const char *, size_t); +bool fill_args(const char *, size_t, int); +bool fill_cmnd(const char *, size_t); +bool fill_txt(const char *, size_t, size_t); bool ipv6_valid(const char *s); int sudoers_trace_print(const char *msg); void sudoerserror(const char *); @@ -39,4 +39,4 @@ (*trace_print)(msg); \ } while (0); -#endif /* _SUDOERS_TOKE_H */ +#endif /* SUDOERS_TOKE_H */ diff -Nru sudo-1.8.12/plugins/sudoers/toke.l sudo-1.8.16/plugins/sudoers/toke.l --- sudo-1.8.12/plugins/sudoers/toke.l 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/toke.l 2016-03-17 16:13:10.000000000 +0000 @@ -28,14 +28,7 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ @@ -47,28 +40,8 @@ #elif defined(HAVE_INTTYPES_H) # include #endif -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ -#if defined(HAVE_MALLOC_H) && !defined(STDC_HEADERS) -# include -#endif /* HAVE_MALLOC_H && !STDC_HEADERS */ -#ifdef HAVE_DIRENT_H -# include -# define NAMLEN(dirent) strlen((dirent)->d_name) -#else -# define dirent direct -# define NAMLEN(dirent) (dirent)->d_namlen -# ifdef HAVE_SYS_NDIR_H -# include -# endif -# ifdef HAVE_SYS_DIR_H -# include -# endif -# ifdef HAVE_NDIR_H -# include -# endif -#endif +#include +#include #include #include #include "sudoers.h" @@ -83,6 +56,12 @@ # include "compat/sha2.h" #endif +#if defined(HAVE_STRUCT_DIRENT_D_NAMLEN) && HAVE_STRUCT_DIRENT_D_NAMLEN +# define NAMLEN(dirent) (dirent)->d_namlen +#else +# define NAMLEN(dirent) strlen((dirent)->d_name) +#endif + int sudolineno; /* current sudoers line number. */ int last_token; /* last token that was parsed. */ char *sudoers; /* sudoers file being parsed. */ @@ -95,9 +74,9 @@ static bool continued, sawspace; static int prev_state; -static int digest_len; +static yy_size_t digest_len; -static bool _push_include(char *, bool); +static bool push_include_int(char *, bool); static bool pop_include(void); static char *parse_include(char *); @@ -110,8 +89,8 @@ #define ECHO ignore_result(fwrite(sudoerstext, sudoersleng, 1, sudoersout)) -#define push_include(_p) (_push_include((_p), false)) -#define push_includedir(_p) (_push_include((_p), true)) +#define push_include(_p) (push_include_int((_p), false)) +#define push_includedir(_p) (push_include_int((_p), true)) %} HEX16 [0-9A-Fa-f]{1,4} @@ -276,7 +255,7 @@ [[:xdigit:]]+ { /* Only return DIGEST if the length is correct. */ - if (sudoersleng == digest_len * 2) { + if ((yy_size_t)sudoersleng == digest_len * 2) { if (!fill(sudoerstext, sudoersleng)) yyterminate(); BEGIN INITIAL; @@ -289,7 +268,7 @@ [A-Za-z0-9\+/=]+ { /* Only return DIGEST if the length is correct. */ - int len; + yy_size_t len; if (sudoerstext[sudoersleng - 1] == '=') { /* use padding */ len = 4 * ((digest_len + 2) / 3); @@ -297,7 +276,7 @@ /* no padding */ len = (4 * digest_len + 2) / 3; } - if (sudoersleng == len) { + if ((yy_size_t)sudoersleng == len) { if (!fill(sudoerstext, sudoersleng)) yyterminate(); BEGIN INITIAL; @@ -465,6 +444,26 @@ LEXRETURN(NOLOG_INPUT); } +MAIL[[:blank:]]*: { + LEXTRACE("MAIL "); + LEXRETURN(MAIL); + } + +NOMAIL[[:blank:]]*: { + LEXTRACE("NOMAIL "); + LEXRETURN(NOMAIL); + } + +FOLLOW[[:blank:]]*: { + LEXTRACE("FOLLOW "); + LEXRETURN(FOLLOW); + } + +NOFOLLOW[[:blank:]]*: { + LEXTRACE("NOFOLLOW "); + LEXRETURN(NOFOLLOW); + } + (\+|\%|\%:) { /* empty group or netgroup */ LEXTRACE("ERROR "); @@ -781,9 +780,11 @@ } goto bad; } - paths = malloc(sizeof(*paths) * max_paths); - if (paths == NULL) + paths = reallocarray(NULL, max_paths, sizeof(*paths)); + if (paths == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); goto bad; + } while ((dent = readdir(dir)) != NULL) { struct path_list *pl; struct stat sb; @@ -797,22 +798,24 @@ if (asprintf(&path, "%s/%s", dirpath, dent->d_name) == -1) goto bad; if (stat(path, &sb) != 0 || !S_ISREG(sb.st_mode)) { - sudo_efree(path); + free(path); continue; } pl = malloc(sizeof(*pl)); if (pl == NULL) { - sudo_efree(path); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + free(path); goto bad; } pl->path = path; if (count >= max_paths) { struct path_list **tmp; max_paths <<= 1; - tmp = realloc(paths, sizeof(*paths) * max_paths); + tmp = reallocarray(paths, max_paths, sizeof(*paths)); if (tmp == NULL) { - sudo_efree(path); - sudo_efree(pl); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + free(path); + free(pl); goto bad; } paths = tmp; @@ -821,7 +824,7 @@ } closedir(dir); if (count == 0) { - sudo_efree(paths); + free(paths); paths = NULL; } *pathsp = paths; @@ -830,10 +833,10 @@ if (dir != NULL) closedir(dir); for (i = 0; i < count; i++) { - sudo_efree(paths[i]->path); - sudo_efree(paths[i]); + free(paths[i]->path); + free(paths[i]); } - sudo_efree(paths); + free(paths); debug_return_int(-1); } @@ -857,7 +860,7 @@ for (i = 0; i < count; i++) { SLIST_INSERT_HEAD(&stack->more, paths[i], entries); } - sudo_efree(paths); + free(paths); } debug_return_int(count); @@ -880,15 +883,15 @@ idepth--; while ((pl = SLIST_FIRST(&istack[idepth].more)) != NULL) { SLIST_REMOVE_HEAD(&istack[idepth].more, entries); - sudo_efree(pl->path); - sudo_efree(pl); + free(pl->path); + free(pl); } - sudo_efree(istack[idepth].path); + free(istack[idepth].path); if (idepth && !istack[idepth].keepopen) fclose(istack[idepth].bs->yy_input_file); sudoers_delete_buffer(istack[idepth].bs); } - sudo_efree(istack); + free(istack); istack = NULL; istacksize = idepth = 0; sudolineno = 1; @@ -901,11 +904,11 @@ } static bool -_push_include(char *path, bool isdir) +push_include_int(char *path, bool isdir) { struct path_list *pl; FILE *fp; - debug_decl(_push_include, SUDOERS_DEBUG_PARSER) + debug_decl(push_include_int, SUDOERS_DEBUG_PARSER) /* push current state onto stack */ if (idepth >= istacksize) { @@ -916,10 +919,9 @@ debug_return_bool(false); } istacksize += SUDOERS_STACK_INCREMENT; - new_istack = (struct include_stack *) realloc(istack, - sizeof(*istack) * istacksize); + new_istack = reallocarray(istack, istacksize, sizeof(*istack)); if (new_istack == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); sudoerserror(NULL); debug_return_bool(false); } @@ -966,20 +968,20 @@ count = switch_dir(&istack[idepth], path); if (count <= 0) { /* switch_dir() called sudoerserror() for us */ - sudo_efree(path); + free(path); debug_return_bool(count ? false : true); } /* Parse the first dir entry we can open, leave the rest for later. */ do { - sudo_efree(path); + free(path); if ((pl = SLIST_FIRST(&istack[idepth].more)) == NULL) { /* Unable to open any files in include dir, not an error. */ debug_return_bool(true); } SLIST_REMOVE_HEAD(&istack[idepth].more, entries); path = pl->path; - sudo_efree(pl); + free(pl); } while ((fp = open_sudoers(path, false, &keepopen)) == NULL); } else { if ((fp = open_sudoers(path, true, &keepopen)) == NULL) { @@ -1019,22 +1021,22 @@ SLIST_REMOVE_HEAD(&istack[idepth - 1].more, entries); fp = open_sudoers(pl->path, false, &keepopen); if (fp != NULL) { - sudo_efree(sudoers); + free(sudoers); sudoers = pl->path; sudolineno = 1; sudoers_switch_to_buffer(sudoers_create_buffer(fp, YY_BUF_SIZE)); - sudo_efree(pl); + free(pl); break; } /* Unable to open path in include dir, go to next one. */ - sudo_efree(pl->path); - sudo_efree(pl); + free(pl->path); + free(pl); } /* If no path list, just pop the last dir on the stack. */ if (pl == NULL) { idepth--; sudoers_switch_to_buffer(istack[idepth].bs); - sudo_efree(sudoers); + free(sudoers); sudoers = istack[idepth].path; sudolineno = istack[idepth].lineno; keepopen = istack[idepth].keepopen; @@ -1077,7 +1079,7 @@ len += (int)(ep - cp); path = pp = malloc(len + dirlen + 1); if (path == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); sudoerserror(NULL); debug_return_str(NULL); } diff -Nru sudo-1.8.12/plugins/sudoers/toke_util.c sudo-1.8.16/plugins/sudoers/toke_util.c --- sudo-1.8.12/plugins/sudoers/toke_util.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/toke_util.c 2016-03-17 16:13:10.000000000 +0000 @@ -26,26 +26,14 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ -#if defined(HAVE_MALLOC_H) && !defined(STDC_HEADERS) -# include -#endif /* HAVE_MALLOC_H && !STDC_HEADERS */ +#include #include #include "sudoers.h" @@ -57,7 +45,7 @@ static int arg_size = 0; bool -fill_txt(const char *src, int len, int olen) +fill_txt(const char *src, size_t len, size_t olen) { char *dst; int h; @@ -65,7 +53,7 @@ dst = olen ? realloc(sudoerslval.string, olen + len + 1) : malloc(len + 1); if (dst == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); sudoerserror(NULL); debug_return_bool(false); } @@ -93,7 +81,7 @@ } bool -append(const char *src, int len) +append(const char *src, size_t len) { int olen = 0; debug_decl(append, SUDOERS_DEBUG_PARSER) @@ -108,17 +96,17 @@ ((c) == ',' || (c) == ':' || (c) == '=' || (c) == ' ' || (c) == '\t' || (c) == '#') bool -fill_cmnd(const char *src, int len) +fill_cmnd(const char *src, size_t len) { char *dst; - int i; + size_t i; debug_decl(fill_cmnd, SUDOERS_DEBUG_PARSER) arg_len = arg_size = 0; - dst = sudoerslval.command.cmnd = (char *) malloc(len + 1); + dst = sudoerslval.command.cmnd = malloc(len + 1); if (sudoerslval.command.cmnd == NULL) { - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); sudoerserror(NULL); debug_return_bool(false); } @@ -137,7 +125,7 @@ } bool -fill_args(const char *s, int len, int addspace) +fill_args(const char *s, size_t len, int addspace) { int new_len; char *p; @@ -152,15 +140,15 @@ if (new_len >= arg_size) { /* Allocate more space than we need for subsequent args */ while (new_len >= (arg_size += COMMANDARGINC)) - ; + continue; - p = sudoerslval.command.args ? - (char *) realloc(sudoerslval.command.args, arg_size) : - (char *) malloc(arg_size); + p = realloc(sudoerslval.command.args, arg_size); if (p == NULL) { - sudo_efree(sudoerslval.command.args); - sudo_warn(NULL); + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); sudoerserror(NULL); + free(sudoerslval.command.args); + sudoerslval.command.args = NULL; + arg_len = arg_size = 0; debug_return_bool(false); } else sudoerslval.command.args = p; diff -Nru sudo-1.8.12/plugins/sudoers/tsgetgrpw.c sudo-1.8.16/plugins/sudoers/tsgetgrpw.c --- sudo-1.8.12/plugins/sudoers/tsgetgrpw.c 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/tsgetgrpw.c 2015-10-31 23:34:59.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2008, 2010-2013 + * Copyright (c) 2005, 2008, 2010-2015 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -25,18 +25,8 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H @@ -49,10 +39,6 @@ #include "tsgetgrpw.h" #include "sudoers.h" -#ifndef LINE_MAX -# define LINE_MAX 2048 -#endif - #undef GRMEM_MAX #define GRMEM_MAX 200 @@ -281,11 +267,13 @@ if (len > 0 && colon[len - 1] == '\n') colon[len - 1] = '\0'; if (*colon != '\0') { + char *last; + gr.gr_mem = gr_mem; - cp = strtok(colon, ","); + cp = strtok_r(colon, ",", &last); for (n = 0; cp != NULL && n < GRMEM_MAX; n++) { gr.gr_mem[n] = cp; - cp = strtok(NULL, ","); + cp = strtok_r(NULL, ",", &last); } gr.gr_mem[n++] = NULL; } else diff -Nru sudo-1.8.12/plugins/sudoers/visudo.c sudo-1.8.16/plugins/sudoers/visudo.c --- sudo-1.8.12/plugins/sudoers/visudo.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/visudo.c 2016-03-17 16:13:11.000000000 +0000 @@ -23,8 +23,6 @@ * Lock the sudoers file for safe editing (ala vipw) and check for parse errors. */ -#define _SUDO_MAIN - #ifdef __TANDEM # include #endif @@ -41,23 +39,14 @@ #endif #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H #include -#endif /* HAVE_UNISTD_H */ #include #include #include @@ -98,16 +87,15 @@ * Function prototypes */ static void quit(int); -static char *get_args(char *); -static char *get_editor(char **); static void get_hostname(void); static int whatnow(void); static int check_aliases(bool, bool); +static char *get_editor(int *editor_argc, char ***editor_argv); static bool check_syntax(const char *, bool, bool, bool); -static bool edit_sudoers(struct sudoersfile *, char *, char *, int); +static bool edit_sudoers(struct sudoersfile *, char *, int, char **, int); static bool install_sudoers(struct sudoersfile *, bool); static int print_unused(void *, void *); -static bool reparse_sudoers(char *, char *, bool, bool); +static bool reparse_sudoers(char *, int, char **, bool, bool); static int run_command(char *, char **); static void parse_sudoers_options(void); static void setup_signals(void); @@ -146,8 +134,8 @@ main(int argc, char *argv[]) { struct sudoersfile *sp; - char *args, *editor; - int ch, exitcode = 0; + char *editor, **editor_argv; + int ch, editor_argc, exitcode = 0; bool quiet, strict, oldperms; const char *export_path; debug_decl(main, SUDOERS_DEBUG_MAIN) @@ -160,7 +148,8 @@ #endif initprogname(argc > 0 ? argv[0] : "visudo"); - sudoers_initlocale(setlocale(LC_ALL, ""), def_sudoers_locale); + if (!sudoers_initlocale(setlocale(LC_ALL, ""), def_sudoers_locale)) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); bindtextdomain("sudoers", LOCALEDIR); /* XXX - should have visudo domain */ textdomain("sudoers"); @@ -171,7 +160,8 @@ sudo_fatal_callback_register(visudo_cleanup); /* Read debug and plugin sections of sudo.conf. */ - sudo_conf_read(NULL, SUDO_CONF_DEBUG|SUDO_CONF_PLUGINS); + if (sudo_conf_read(NULL, SUDO_CONF_DEBUG|SUDO_CONF_PLUGINS) == -1) + exit(EXIT_FAILURE); /* Initialize the debug subsystem. */ sudoers_debug_register(getprogname(), sudo_conf_debug_files(getprogname())); @@ -219,8 +209,8 @@ if (argc - optind != 0) usage(1); - sudo_setpwent(); - sudo_setgrent(); + if (sudo_setpwent() == -1 || sudo_setgrent() == -1) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); /* Mock up a fake sudo_user struct. */ user_cmnd = user_base = ""; @@ -229,7 +219,8 @@ get_hostname(); /* Setup defaults data structures. */ - init_defaults(); + if (!init_defaults()) + sudo_fatalx(U_("unable to initialize sudoers default values")); if (checkonly) { exitcode = check_syntax(sudoers_file, quiet, strict, oldperms) ? 0 : 1; @@ -250,7 +241,7 @@ sudoersparse(); (void) update_defaults(SETDEF_GENERIC|SETDEF_HOST|SETDEF_USER); - editor = get_editor(&args); + editor = get_editor(&editor_argc, &editor_argv); /* Install signal handlers to clean up temp files if we are killed. */ setup_signals(); @@ -264,25 +255,97 @@ while ((ch = getchar()) != EOF && ch != '\n') continue; } - edit_sudoers(sp, editor, args, -1); + edit_sudoers(sp, editor, editor_argc, editor_argv, -1); } /* * Check edited files for a parse error, re-edit any that fail * and install the edited files as needed. */ - if (reparse_sudoers(editor, args, strict, quiet)) { + if (reparse_sudoers(editor, editor_argc, editor_argv, strict, quiet)) { TAILQ_FOREACH(sp, &sudoerslist, entries) { if (sp->doedit) (void) install_sudoers(sp, oldperms); } } + free(editor); done: sudo_debug_exit_int(__func__, __FILE__, __LINE__, sudo_debug_subsys, exitcode); exit(exitcode); } +static char * +get_editor(int *editor_argc, char ***editor_argv) +{ + char *editor, *editor_path = NULL, **whitelist = NULL; + static char *files[] = { "+1", "sudoers" }; + unsigned int whitelist_len = 0; + debug_decl(get_editor, SUDOERS_DEBUG_UTIL) + + /* Build up editor whitelist from def_editor unless env_editor is set. */ + if (!def_env_editor) { + const char *cp, *ep; + const char *def_editor_end = def_editor + strlen(def_editor); + + /* Count number of entries in whitelist and split into a list. */ + for (cp = sudo_strsplit(def_editor, def_editor_end, ":", &ep); + cp != NULL; cp = sudo_strsplit(NULL, def_editor_end, ":", &ep)) { + whitelist_len++; + } + whitelist = reallocarray(NULL, whitelist_len + 1, sizeof(char *)); + if (whitelist == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + whitelist_len = 0; + for (cp = sudo_strsplit(def_editor, def_editor_end, ":", &ep); + cp != NULL; cp = sudo_strsplit(NULL, def_editor_end, ":", &ep)) { + whitelist[whitelist_len] = strndup(cp, (size_t)(ep - cp)); + if (whitelist[whitelist_len] == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + whitelist_len++; + } + whitelist[whitelist_len] = NULL; + } + + /* First try to use user's VISUAL or EDITOR environment vars. */ + if ((editor = getenv("VISUAL")) == NULL || *editor == '\0') + editor = getenv("EDITOR"); + if (editor && *editor == '\0') + editor = NULL; + if (editor != NULL) { + editor_path = resolve_editor(editor, strlen(editor), 2, files, + editor_argc, editor_argv, whitelist); + if (def_env_editor && editor_path == NULL) { + /* If we are honoring $EDITOR this is a fatal error. */ + sudo_fatalx(U_("specified editor (%s) doesn't exist"), editor); + } + } + if (editor_path == NULL) { + /* def_editor could be a path, split it up, avoiding strtok() */ + const char *def_editor_end = def_editor + strlen(def_editor); + const char *cp, *ep; + for (cp = sudo_strsplit(def_editor, def_editor_end, ":", &ep); + cp != NULL; cp = sudo_strsplit(NULL, def_editor_end, ":", &ep)) { + editor_path = resolve_editor(cp, (size_t)(ep - cp), 2, files, + editor_argc, editor_argv, whitelist); + if (editor_path != NULL) + break; + if (errno != ENOENT) + debug_return_str(NULL); + } + } + if (editor_path == NULL) + sudo_fatalx(U_("no editor found (editor path = %s)"), def_editor); + + if (whitelist != NULL) { + while (whitelist_len--) + free(whitelist[whitelist_len]); + free(whitelist); + } + + debug_return_str(editor_path); +} + /* * List of editors that support the "+lineno" command line syntax. * If an entry starts with '*' the tail end of the string is matched. @@ -308,23 +371,54 @@ }; /* + * Check whether or not the specified editor matched lineno_editors[]. + * Returns true if yes, false if no. + */ +static bool +editor_supports_plus(const char *editor) +{ + const char *editor_base = strrchr(editor, '/'); + const char *cp; + char **av; + debug_decl(editor_supports_plus, SUDOERS_DEBUG_UTIL) + + if (editor_base != NULL) + editor_base++; + else + editor_base = editor; + if (*editor_base == 'r') + editor_base++; + + for (av = lineno_editors; (cp = *av) != NULL; av++) { + /* We only handle a leading '*' wildcard. */ + if (*cp == '*') { + size_t blen = strlen(editor_base); + size_t clen = strlen(++cp); + if (blen >= clen) { + if (strcmp(cp, editor_base + blen - clen) == 0) + break; + } + } else if (strcmp(cp, editor_base) == 0) + break; + } + debug_return_bool(cp != NULL); +} + +/* * Edit each sudoers file. * Returns true on success, else false. */ static bool -edit_sudoers(struct sudoersfile *sp, char *editor, char *args, int lineno) +edit_sudoers(struct sudoersfile *sp, char *editor, int editor_argc, + char **editor_argv, int lineno) { int tfd; /* sudoers temp file descriptor */ bool modified; /* was the file modified? */ int ac; /* argument count */ - char **av; /* argument vector for run_command */ - char *cp; /* scratch char pointer */ - char buf[PATH_MAX*2]; /* buffer used for copying files */ char linestr[64]; /* string version of lineno */ - struct timeval tv, times[2]; /* time before and after edit */ - struct timeval orig_mtim; /* starting mtime of sudoers file */ + struct timespec ts, times[2]; /* time before and after edit */ + struct timespec orig_mtim; /* starting mtime of sudoers file */ off_t orig_size; /* starting size of sudoers file */ - ssize_t nread; /* number of bytes read */ struct stat sb; /* stat buffer */ bool rval = false; /* return value */ debug_decl(edit_sudoers, SUDOERS_DEBUG_UTIL) @@ -332,96 +426,57 @@ if (fstat(sp->fd, &sb) == -1) sudo_fatal(U_("unable to stat %s"), sp->path); orig_size = sb.st_size; - mtim_get(&sb, &orig_mtim); + mtim_get(&sb, orig_mtim); /* Create the temp file if needed and set timestamp. */ if (sp->tpath == NULL) { - sudo_easprintf(&sp->tpath, "%s.tmp", sp->path); + if (asprintf(&sp->tpath, "%s.tmp", sp->path) == -1) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); tfd = open(sp->tpath, O_WRONLY | O_CREAT | O_TRUNC, 0600); if (tfd < 0) sudo_fatal("%s", sp->tpath); /* Copy sp->path -> sp->tpath and reset the mtime. */ if (orig_size != 0) { + char buf[4096], lastch = '\0'; + ssize_t nread; + (void) lseek(sp->fd, (off_t)0, SEEK_SET); - while ((nread = read(sp->fd, buf, sizeof(buf))) > 0) + while ((nread = read(sp->fd, buf, sizeof(buf))) > 0) { if (write(tfd, buf, nread) != nread) sudo_fatal(U_("write error")); + lastch = buf[nread - 1]; + } /* Add missing newline at EOF if needed. */ - if (nread > 0 && buf[nread - 1] != '\n') { - buf[0] = '\n'; - if (write(tfd, buf, 1) != 1) + if (lastch != '\n') { + lastch = '\n'; + if (write(tfd, &lastch, 1) != 1) sudo_fatal(U_("write error")); } } (void) close(tfd); } times[0].tv_sec = times[1].tv_sec = orig_mtim.tv_sec; - times[0].tv_usec = times[1].tv_usec = orig_mtim.tv_usec; - (void) utimes(sp->tpath, times); + times[0].tv_nsec = times[1].tv_nsec = orig_mtim.tv_nsec; + (void) utimensat(AT_FDCWD, sp->tpath, times, 0); - /* Does the editor support +lineno? */ - if (lineno > 0) - { - char *editor_base = strrchr(editor, '/'); - if (editor_base != NULL) - editor_base++; - else - editor_base = editor; - if (*editor_base == 'r') - editor_base++; - - for (av = lineno_editors; (cp = *av) != NULL; av++) { - /* We only handle a leading '*' wildcard. */ - if (*cp == '*') { - size_t blen = strlen(editor_base); - size_t clen = strlen(++cp); - if (blen >= clen) { - if (strcmp(cp, editor_base + blen - clen) == 0) - break; - } - } else if (strcmp(cp, editor_base) == 0) - break; - } - /* Disable +lineno if editor doesn't support it. */ - if (cp == NULL) - lineno = -1; - } - - /* Find the length of the argument vector */ - ac = 3 + (lineno > 0); - if (args) { - bool wasblank; - - ac++; - for (wasblank = false, cp = args; *cp; cp++) { - if (isblank((unsigned char) *cp)) - wasblank = true; - else if (wasblank) { - wasblank = false; - ac++; - } - } - } - - /* Build up argument vector for the command */ - av = sudo_emallocarray(ac, sizeof(char *)); - if ((av[0] = strrchr(editor, '/')) != NULL) - av[0]++; - else - av[0] = editor; - ac = 1; + /* Disable +lineno if editor doesn't support it. */ + if (lineno > 0 && !editor_supports_plus(editor)) + lineno = -1; + + /* + * The last 3 slots in the editor argv are: "-- +1 sudoers" + * Replace those placeholders with the real values. + */ + ac = editor_argc - 3; if (lineno > 0) { - (void) snprintf(linestr, sizeof(linestr), "+%d", lineno); - av[ac++] = linestr; - } - if (args) { - for ((cp = strtok(args, " \t")); cp; (cp = strtok(NULL, " \t"))) - av[ac++] = cp; + (void)snprintf(linestr, sizeof(linestr), "+%d", lineno); + editor_argv[ac++] = linestr; } - av[ac++] = sp->tpath; - av[ac++] = NULL; + editor_argv[ac++] = "--"; + editor_argv[ac++] = sp->tpath; + editor_argv[ac++] = NULL; /* * Do the edit: @@ -429,9 +484,16 @@ * XPG4 specifies that vi's exit value is a function of the * number of errors during editing (?!?!). */ - gettimeofday(×[0], NULL); - if (run_command(editor, av) != -1) { - gettimeofday(×[1], NULL); + if (sudo_gettime_real(×[0]) == -1) { + sudo_warn(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")); + goto done; + } /* * Sanity checks. */ @@ -441,10 +503,12 @@ goto done; } if (sb.st_size == 0 && orig_size != 0) { - sudo_warnx(U_("zero length temporary file (%s), %s unchanged"), - sp->tpath, sp->path); - sp->modified = true; - goto done; + /* Avoid accidental zeroing of main sudoers file. */ + if (sp == TAILQ_FIRST(&sudoerslist)) { + sudo_warnx(U_("zero length temporary file (%s), %s unchanged"), + sp->tpath, sp->path); + goto done; + } } } else { sudo_warnx(U_("editor (%s) failed, %s unchanged"), editor, sp->path); @@ -453,13 +517,13 @@ /* Set modified bit if the user changed the file. */ modified = true; - mtim_get(&sb, &tv); - if (orig_size == sb.st_size && sudo_timevalcmp(&orig_mtim, &tv, ==)) { + mtim_get(&sb, ts); + if (orig_size == sb.st_size && sudo_timespeccmp(&orig_mtim, &ts, ==)) { /* * If mtime and size match but the user spent no measurable * time in the editor we can't tell if the file was changed. */ - if (sudo_timevalcmp(×[0], ×[1], !=)) + if (sudo_timespeccmp(×[0], ×[1], !=)) modified = false; } @@ -480,7 +544,8 @@ * Parse sudoers after editing and re-edit any ones that caused a parse error. */ static bool -reparse_sudoers(char *editor, char *args, bool strict, bool quiet) +reparse_sudoers(char *editor, int editor_argc, char **editor_argv, + bool strict, bool quiet) { struct sudoersfile *sp, *last; FILE *fp; @@ -498,7 +563,8 @@ sp->tpath, sp->path); /* Clean slate for each parse */ - init_defaults(); + if (!init_defaults()) + sudo_fatalx(U_("unable to initialize sudoers default values")); init_parser(sp->path, quiet); /* Parse the sudoers temp file(s) */ @@ -534,7 +600,8 @@ /* Edit file with the parse error */ TAILQ_FOREACH(sp, &sudoerslist, entries) { if (errorfile == NULL || strcmp(sp->path, errorfile) == 0) { - edit_sudoers(sp, editor, args, errorlineno); + edit_sudoers(sp, editor, editor_argc, editor_argv, + errorlineno); if (errorfile != NULL) break; } @@ -552,7 +619,8 @@ printf(_("press return to edit %s: "), sp->path); while ((ch = getchar()) != EOF && ch != '\n') continue; - edit_sudoers(sp, editor, args, errorlineno); + edit_sudoers(sp, editor, editor_argc, editor_argv, + errorlineno); } /* If all sudoers files parsed OK we are done. */ @@ -613,7 +681,7 @@ } if (chmod(sp->tpath, sudoers_mode) != 0) { sudo_warn(U_("unable to change mode of %s to 0%o"), sp->tpath, - sudoers_mode); + (unsigned int)sudoers_mode); goto done; } } @@ -624,7 +692,7 @@ * mv(1) in case sp->tpath and sp->path are on different file systems. */ if (rename(sp->tpath, sp->path) == 0) { - sudo_efree(sp->tpath); + free(sp->tpath); sp->tpath = NULL; } else { if (errno == EXDEV) { @@ -646,11 +714,11 @@ sudo_warnx(U_("command failed: '%s %s %s', %s unchanged"), _PATH_MV, sp->tpath, sp->path, sp->path); (void) unlink(sp->tpath); - sudo_efree(sp->tpath); + free(sp->tpath); sp->tpath = NULL; goto done; } - sudo_efree(sp->tpath); + free(sp->tpath); sp->tpath = NULL; } else { sudo_warn(U_("error renaming %s, %s unchanged"), sp->tpath, sp->path); @@ -664,10 +732,10 @@ } /* STUB */ -void +bool init_envtables(void) { - return; + return true; } /* STUB */ @@ -782,9 +850,13 @@ break; /* NOTREACHED */ } - do { + for (;;) { rv = waitpid(pid, &status, 0); - } while (rv == -1 && errno == EINTR); + if (rv == -1 && errno != EINTR) + break; + if (rv != -1 && !WIFSTOPPED(status)) + break; + } if (rv != -1) rv = WIFEXITED(status) ? WEXITSTATUS(status) : -1; @@ -811,7 +883,7 @@ ok = false; if (!quiet) { fprintf(stderr, _("%s: bad permissions, should be mode 0%o\n"), - path, sudoers_mode); + path, (unsigned int)sudoers_mode); } } } @@ -903,15 +975,16 @@ break; } if (entry == NULL) { - entry = sudo_ecalloc(1, sizeof(*entry)); - entry->path = sudo_estrdup(path); + 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->modified = 0; */ entry->fd = open(entry->path, open_flags, sudoers_mode); /* entry->tpath = NULL; */ entry->doedit = doedit; if (entry->fd == -1) { sudo_warn("%s", entry->path); - sudo_efree(entry); + free(entry); debug_return_ptr(NULL); } if (!checkonly && !sudo_lock_file(entry->fd, SUDO_TLOCK)) @@ -935,143 +1008,20 @@ debug_return_ptr(fp); } -static char * -get_editor(char **args) -{ - char *Editor, *EditorArgs, *EditorPath, *UserEditor, *UserEditorArgs; - debug_decl(get_editor, SUDOERS_DEBUG_UTIL) - - /* - * Check VISUAL and EDITOR environment variables to see which editor - * the user wants to use (we may not end up using it though). - * If the path is not fully-qualified, make it so and check that - * the specified executable actually exists. - */ - UserEditorArgs = NULL; - if ((UserEditor = getenv("VISUAL")) == NULL || *UserEditor == '\0') - UserEditor = getenv("EDITOR"); - if (UserEditor && *UserEditor == '\0') - UserEditor = NULL; - else if (UserEditor) { - UserEditorArgs = get_args(UserEditor); - if (find_path(UserEditor, &Editor, NULL, getenv("PATH"), 0) == FOUND) { - UserEditor = Editor; - } else { - if (def_env_editor) { - /* If we are honoring $EDITOR this is a fatal error. */ - sudo_fatalx(U_("specified editor (%s) doesn't exist"), UserEditor); - } else { - /* Otherwise, just ignore $EDITOR. */ - UserEditor = NULL; - } - } - } - - /* - * See if we can use the user's choice of editors either because - * we allow any $EDITOR or because $EDITOR is in the allowable list. - */ - Editor = EditorArgs = EditorPath = NULL; - if (def_env_editor && UserEditor) { - Editor = UserEditor; - EditorArgs = UserEditorArgs; - } else if (UserEditor) { - struct stat editor_sb; - struct stat user_editor_sb; - char *base, *userbase; - - if (stat(UserEditor, &user_editor_sb) != 0) { - /* Should never happen since we already checked above. */ - sudo_fatal(U_("unable to stat editor (%s)"), UserEditor); - } - EditorPath = sudo_estrdup(def_editor); - Editor = strtok(EditorPath, ":"); - do { - EditorArgs = get_args(Editor); - /* - * Both Editor and UserEditor should be fully qualified but - * check anyway... - */ - if ((base = strrchr(Editor, '/')) == NULL) - continue; - if ((userbase = strrchr(UserEditor, '/')) == NULL) { - Editor = NULL; - break; - } - base++, userbase++; - - /* - * We compare the basenames first and then use stat to match - * for sure. - */ - if (strcmp(base, userbase) == 0) { - if (stat(Editor, &editor_sb) == 0 && S_ISREG(editor_sb.st_mode) - && (editor_sb.st_mode & 0000111) && - editor_sb.st_dev == user_editor_sb.st_dev && - editor_sb.st_ino == user_editor_sb.st_ino) - break; - } - } while ((Editor = strtok(NULL, ":"))); - } - - /* - * Can't use $EDITOR, try each element of def_editor until we - * find one that exists, is regular, and is executable. - */ - if (Editor == NULL || *Editor == '\0') { - sudo_efree(EditorPath); - EditorPath = sudo_estrdup(def_editor); - Editor = strtok(EditorPath, ":"); - do { - EditorArgs = get_args(Editor); - if (sudo_goodpath(Editor, NULL)) - break; - } while ((Editor = strtok(NULL, ":"))); - - /* Bleah, none of the editors existed! */ - if (Editor == NULL || *Editor == '\0') - sudo_fatalx(U_("no editor found (editor path = %s)"), def_editor); - } - *args = EditorArgs; - debug_return_str(Editor); -} - -/* - * Split out any command line arguments and return them. - */ -static char * -get_args(char *cmnd) -{ - char *args; - debug_decl(get_args, SUDOERS_DEBUG_UTIL) - - args = cmnd; - while (*args && !isblank((unsigned char) *args)) - args++; - if (*args) { - *args++ = '\0'; - while (*args && isblank((unsigned char) *args)) - args++; - } - debug_return_str(*args ? args : NULL); -} - /* * Look up the hostname and set user_host and user_shost. */ static void get_hostname(void) { - char *p, thost[HOST_NAME_MAX + 1]; + char *p; debug_decl(get_hostname, SUDOERS_DEBUG_UTIL) - if (gethostname(thost, sizeof(thost)) != -1) { - thost[sizeof(thost) - 1] = '\0'; - user_host = sudo_estrdup(thost); - + if ((user_host = sudo_gethostname()) != NULL) { if ((p = strchr(user_host, '.'))) { *p = '\0'; - user_shost = sudo_estrdup(user_host); + if ((user_shost = strdup(user_host)) == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); *p = '.'; } else { user_shost = user_host; @@ -1099,7 +1049,8 @@ rval = false; } } - rbinsert(alias_freelist, a); + if (rbinsert(alias_freelist, a, NULL) != 0) + rval = false; } debug_return_bool(rval); } @@ -1165,6 +1116,10 @@ debug_decl(check_aliases, SUDOERS_DEBUG_ALIAS) alias_freelist = rbcreate(alias_compare); + if (alias_freelist == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_int(-1); + } /* Forward check. */ TAILQ_FOREACH(us, &userspecs, entries) { diff -Nru sudo-1.8.12/plugins/sudoers/visudo_json.c sudo-1.8.16/plugins/sudoers/visudo_json.c --- sudo-1.8.12/plugins/sudoers/visudo_json.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/sudoers/visudo_json.c 2015-10-31 23:35:24.000000000 +0000 @@ -18,23 +18,14 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H #include -#endif /* HAVE_UNISTD_H */ #include #include @@ -676,7 +667,7 @@ if (type == -1) { sudo_warnx(U_("unknown defaults entry `%s'"), def->var); /* XXX - just pass it through as a string anyway? */ - break;; + break; } fputs(",\n", fp); } @@ -747,22 +738,6 @@ debug_return_bool(need_comma); } -/* XXX these are all duplicated w/ parse.c */ -#define RUNAS_CHANGED(cs1, cs2) \ - (cs1 == NULL || cs2 == NULL || \ - cs1->runasuserlist != cs2->runasuserlist || \ - cs1->runasgrouplist != cs2->runasgrouplist) - -#define TAG_SET(tt) \ - ((tt) != UNSPEC && (tt) != IMPLIED) - -#define TAGS_CHANGED(ot, nt) \ - ((TAG_SET((nt).setenv) && (nt).setenv != (ot).setenv) || \ - (TAG_SET((nt).noexec) && (nt).noexec != (ot).noexec) || \ - (TAG_SET((nt).nopasswd) && (nt).nopasswd != (ot).nopasswd) || \ - (TAG_SET((nt).log_input) && (nt).log_input != (ot).log_input) || \ - (TAG_SET((nt).log_output) && (nt).log_output != (ot).log_output)) - /* * Print a Cmnd_Spec in JSON format at the specified indent level. * A pointer to the next Cmnd_Spec is passed in to make it possible to @@ -807,47 +782,59 @@ } /* Print tags */ - if (cs->tags.nopasswd != UNSPEC || cs->tags.noexec != UNSPEC || - cs->tags.setenv != UNSPEC || cs->tags.log_input != UNSPEC || - cs->tags.log_output != UNSPEC) { + if (TAGS_SET(cs->tags)) { + struct cmndtag tag = cs->tags; + fprintf(fp, "%*s\"Options\": [\n", indent, ""); indent += 4; - if (cs->tags.nopasswd != UNSPEC) { + if (tag.nopasswd != UNSPEC) { value.type = JSON_BOOL; - value.u.boolean = !cs->tags.nopasswd; - last_one = cs->tags.noexec == UNSPEC && - cs->tags.setenv == UNSPEC && cs->tags.log_input == UNSPEC && - cs->tags.log_output == UNSPEC; + value.u.boolean = !tag.nopasswd; + tag.nopasswd = UNSPEC; print_pair_json(fp, "{ ", "authenticate", &value, - last_one ? " }\n" : " },\n", indent); + TAGS_SET(tag) ? " },\n" : " }\n", indent); } - if (cs->tags.noexec != UNSPEC) { + if (tag.noexec != UNSPEC) { value.type = JSON_BOOL; - value.u.boolean = cs->tags.noexec; - last_one = cs->tags.setenv == UNSPEC && - cs->tags.log_input == UNSPEC && cs->tags.log_output == UNSPEC; + value.u.boolean = tag.noexec; + tag.noexec = UNSPEC; print_pair_json(fp, "{ ", "noexec", &value, - last_one ? " }\n" : " },\n", indent); + TAGS_SET(tag) ? " },\n" : " }\n", indent); } - if (cs->tags.setenv != UNSPEC) { + if (tag.send_mail != UNSPEC) { value.type = JSON_BOOL; - value.u.boolean = cs->tags.setenv; - last_one = cs->tags.log_input == UNSPEC && - cs->tags.log_output == UNSPEC; + value.u.boolean = tag.send_mail; + tag.send_mail = UNSPEC; + print_pair_json(fp, "{ ", "send_mail", &value, + TAGS_SET(tag) ? " },\n" : " }\n", indent); + } + if (tag.setenv != UNSPEC) { + value.type = JSON_BOOL; + value.u.boolean = tag.setenv; + tag.setenv = UNSPEC; print_pair_json(fp, "{ ", "setenv", &value, - last_one ? " }\n" : " },\n", indent); + TAGS_SET(tag) ? " },\n" : " }\n", indent); + } + if (tag.follow != UNSPEC) { + value.type = JSON_BOOL; + value.u.boolean = tag.follow; + tag.follow = UNSPEC; + print_pair_json(fp, "{ ", "sudoedit_follow", &value, + TAGS_SET(tag) ? " },\n" : " }\n", indent); } - if (cs->tags.log_input != UNSPEC) { + if (tag.log_input != UNSPEC) { value.type = JSON_BOOL; - value.u.boolean = cs->tags.log_input; - last_one = cs->tags.log_output == UNSPEC; + value.u.boolean = tag.log_input; + tag.log_input = UNSPEC; print_pair_json(fp, "{ ", "log_input", &value, - last_one ? " }\n" : " },\n", indent); + TAGS_SET(tag) ? " },\n" : " }\n", indent); } - if (cs->tags.log_output != UNSPEC) { + if (tag.log_output != UNSPEC) { value.type = JSON_BOOL; - value.u.boolean = cs->tags.log_output; - print_pair_json(fp, "{ ", "log_output", &value, " }\n", indent); + value.u.boolean = tag.log_output; + tag.log_output = UNSPEC; + print_pair_json(fp, "{ ", "log_output", &value, + TAGS_SET(tag) ? " },\n" : " }\n", indent); } indent -= 4; fprintf(fp, "%*s],\n", indent, ""); diff -Nru sudo-1.8.12/plugins/system_group/Makefile.in sudo-1.8.16/plugins/system_group/Makefile.in --- sudo-1.8.12/plugins/system_group/Makefile.in 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/plugins/system_group/Makefile.in 2015-10-31 23:34:59.000000000 +0000 @@ -28,7 +28,7 @@ # Compiler & tools to use CC = @CC@ -LIBTOOL = @LIBTOOL@ --tag=disable-static +LIBTOOL = @LIBTOOL@ SED = @SED@ AWK = @AWK@ @@ -50,6 +50,9 @@ LDFLAGS = @LDFLAGS@ LT_LDFLAGS = @LT_LDFLAGS@ @LT_LDEXPORTS@ +# Flags to pass to libtool +LTFLAGS = --tag=disable-static + # PIE flags PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ @@ -61,6 +64,9 @@ # cppcheck options, usually set in the top-level Makefile CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +# splint options, usually set in the top-level Makefile +SPLINT_OPTS = -D__restrict= -checks + # Where to install things... prefix = @prefix@ exec_prefix = @exec_prefix@ @@ -83,9 +89,6 @@ install_uid = 0 install_gid = 0 -# OS dependent defines -DEFS = @OSDEFS@ - #### End of system configuration section. #### SHELL = @SHELL@ @@ -104,7 +107,7 @@ .SUFFIXES: .o .c .h .lo .c.lo: - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $< + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $< $(shlib_map): $(shlib_exp) @$(AWK) 'BEGIN { print "{\n\tglobal:" } { print "\t\t"$$0";" } END { print "\tlocal:\n\t\t*;\n};" }' $(shlib_exp) > $@ @@ -113,7 +116,7 @@ @$(SED) 's/^/+e /' $(shlib_exp) > $@ system_group.la: $(OBJS) $(LT_LIBS) @LT_LDDEP@ - $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) $(SSP_LDFLAGS) $(LT_LDFLAGS) -o $@ $(OBJS) $(LIBS) -module -avoid-version -rpath $(plugindir) -shrext .so + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) $(LDFLAGS) $(SSP_LDFLAGS) $(LT_LDFLAGS) -o $@ $(OBJS) $(LIBS) -module -avoid-version -rpath $(plugindir) -shrext .so pre-install: @@ -130,20 +133,23 @@ install-plugin: install-dirs system_group.la if [ X"$(shlib_enable)" = X"yes" ]; then \ - INSTALL_BACKUP='~' $(LIBTOOL) --mode=install $(INSTALL) $(INSTALL_OWNER) -m $(shlib_mode) system_group.la $(DESTDIR)$(plugindir); \ + INSTALL_BACKUP='~' $(LIBTOOL) $(LTFLAGS) --mode=install $(INSTALL) $(INSTALL_OWNER) -m $(shlib_mode) system_group.la $(DESTDIR)$(plugindir); \ fi uninstall: - -$(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(plugindir)/system_group.la + -$(LIBTOOL) $(LTFLAGS) --mode=uninstall rm -f $(DESTDIR)$(plugindir)/system_group.la -rm -f $(DESTDIR)$(plugindir)/system_group.so~ +splint: + splint $(SPLINT_OPTS) -I$(incdir) -I$(top_builddir) -I$(top_srcdir) $(srcdir)/*.c + cppcheck: cppcheck $(CPPCHECK_OPTS) -I$(incdir) -I$(top_builddir) -I$(top_srcdir) $(srcdir)/*.c check: clean: - -$(LIBTOOL) --mode=clean rm -f *.lo *.o *.la *.a stamp-* core *.core core.* + -$(LIBTOOL) $(LTFLAGS) --mode=clean rm -f *.lo *.o *.la *.a stamp-* core *.core core.* mostlyclean: clean @@ -162,4 +168,4 @@ $(incdir)/sudo_compat.h $(incdir)/sudo_dso.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_util.h \ $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/system_group.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/system_group.c diff -Nru sudo-1.8.12/plugins/system_group/system_group.c sudo-1.8.16/plugins/system_group/system_group.c --- sudo-1.8.12/plugins/system_group/system_group.c 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/plugins/system_group/system_group.c 2015-10-31 23:35:24.000000000 +0000 @@ -20,31 +20,19 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STDBOOL_H # include #else # include "compat/stdbool.h" #endif /* HAVE_STDBOOL_H */ #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include #include @@ -81,10 +69,10 @@ sudo_log = sudo_printf; - if (GROUP_API_VERSION_GET_MAJOR(version) != GROUP_API_VERSION_MAJOR) { + if (SUDO_API_VERSION_GET_MAJOR(version) != GROUP_API_VERSION_MAJOR) { sudo_log(SUDO_CONV_ERROR_MSG, "sysgroup_group: incompatible major version %d, expected %d\n", - GROUP_API_VERSION_GET_MAJOR(version), + SUDO_API_VERSION_GET_MAJOR(version), GROUP_API_VERSION_MAJOR); return -1; } Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/po/ca.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/po/ca.mo differ diff -Nru sudo-1.8.12/po/ca.po sudo-1.8.16/po/ca.po --- sudo-1.8.12/po/ca.po 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/po/ca.po 2016-03-17 16:13:10.000000000 +0000 @@ -1,12 +1,12 @@ # translation of gawk.po to Catalan # This file is put in the public domain. -# Walter Garcia-Fontes , 2014. +# Walter Garcia-Fontes , 2015. msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.11b1\n" +"Project-Id-Version: sudo 1.8.15rc3\n" "Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-07-30 09:37-0600\n" -"PO-Revision-Date: 2014-09-01 10:12+0200\n" +"POT-Creation-Date: 2015-10-24 06:26-0600\n" +"PO-Revision-Date: 2015-11-19 22:03+0100\n" "Last-Translator: Walter Garcia-Fontes \n" "Language-Team: Catalan \n" "Language: ca\n" @@ -14,280 +14,312 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: lib/util/aix.c:92 lib/util/aix.c:151 +#: lib/util/aix.c:85 lib/util/aix.c:155 msgid "unable to open userdb" msgstr "no s'ha pogut obrir userdb" -#: lib/util/aix.c:156 +#: lib/util/aix.c:160 #, c-format msgid "unable to switch to registry \"%s\" for %s" msgstr "no s'ha pogut passar al registre \"%s\" per a %s" -#: lib/util/aix.c:175 +#: lib/util/aix.c:185 msgid "unable to restore registry" msgstr "no s'ha pogut restaurar el registre" -#: lib/util/alloc.c:82 lib/util/alloc.c:99 lib/util/alloc.c:120 -#: lib/util/alloc.c:142 lib/util/alloc.c:161 lib/util/alloc.c:184 -msgid "internal error, tried allocate zero bytes" -msgstr "error intern, s'han intentat assignar zero bytes" - -#: lib/util/alloc.c:101 lib/util/alloc.c:123 lib/util/alloc.c:163 -#: lib/util/alloc.c:186 src/net_ifs.c:162 src/net_ifs.c:171 src/net_ifs.c:183 -#: src/net_ifs.c:192 src/net_ifs.c:307 src/net_ifs.c:329 -#, c-format -msgid "internal error, %s overflow" -msgstr "error intern, sobreeiximent de %s" - -#: lib/util/fatal.c:143 -#, c-format -msgid "%s: %s: %s\n" -msgstr "%s: %s: %s\n" - -#: lib/util/fatal.c:147 lib/util/fatal.c:152 -#, c-format -msgid "%s: %s\n" -msgstr "%s: %s\n" - -#: lib/util/gidlist.c:78 src/load_plugins.c:63 src/load_plugins.c:76 -#: src/sudo.c:559 src/sudo.c:578 src/sudo.c:605 src/sudo.c:614 src/sudo.c:623 -#: src/sudo.c:640 src/sudo.c:687 src/sudo.c:697 +#: lib/util/aix.c:204 lib/util/gidlist.c:64 lib/util/gidlist.c:74 +#: lib/util/sudo_conf.c:185 lib/util/sudo_conf.c:265 lib/util/sudo_conf.c:342 +#: lib/util/sudo_conf.c:544 src/conversation.c:75 src/exec.c:863 +#: src/exec_common.c:96 src/exec_common.c:108 src/exec_common.c:115 +#: src/exec_pty.c:684 src/exec_pty.c:692 src/load_plugins.c:52 +#: src/load_plugins.c:65 src/load_plugins.c:208 src/load_plugins.c:231 +#: src/load_plugins.c:296 src/load_plugins.c:311 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:414 src/sesh.c:102 +#: src/sudo.c:182 src/sudo.c:371 src/sudo.c:390 src/sudo.c:454 src/sudo.c:608 +#: src/sudo.c:627 src/sudo.c:654 src/sudo.c:663 src/sudo.c:672 src/sudo.c:689 +#: src/sudo.c:746 src/sudo.c:756 src/sudo.c:780 src/sudo.c:1160 +#: src/sudo.c:1162 src/sudo.c:1168 src/sudo.c:1176 src/sudo_edit.c:151 +#: src/sudo_edit.c:602 src/sudo_edit.c:699 src/sudo_edit.c:811 +#: src/sudo_edit.c:831 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/util/strsignal.c:50 +#: lib/util/aix.c:204 lib/util/gidlist.c:64 lib/util/sudo_conf.c:185 +#: lib/util/sudo_conf.c:265 lib/util/sudo_conf.c:342 lib/util/sudo_conf.c:544 +#: src/conversation.c:76 src/exec.c:863 src/exec_common.c:96 +#: src/exec_common.c:108 src/exec_common.c:115 src/exec_pty.c:684 +#: src/exec_pty.c:692 src/load_plugins.c:208 src/load_plugins.c:231 +#: src/load_plugins.c:296 src/load_plugins.c:311 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:414 src/sesh.c:102 +#: src/sudo.c:182 src/sudo.c:371 src/sudo.c:390 src/sudo.c:454 src/sudo.c:780 +#: src/sudo.c:1160 src/sudo.c:1162 src/sudo.c:1168 src/sudo.c:1176 +#: src/sudo_edit.c:151 src/sudo_edit.c:602 src/sudo_edit.c:699 +#: src/sudo_edit.c:811 src/sudo_edit.c:831 +msgid "unable to allocate memory" +msgstr "no s'ha pogut assignar memòria" + +#: lib/util/strsignal.c:48 msgid "Unknown signal" msgstr "Senyal desconegut" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:65 lib/util/strtonum.c:183 +#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:48 +#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "valor no vàlid" -#: lib/util/strtoid.c:90 lib/util/strtoid.c:118 lib/util/strtomode.c:61 -#: lib/util/strtonum.c:68 lib/util/strtonum.c:195 +#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:54 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "valor massa gran" -#: lib/util/strtoid.c:96 lib/util/strtomode.c:61 lib/util/strtonum.c:68 -#: lib/util/strtonum.c:189 +#: lib/util/strtoid.c:89 lib/util/strtomode.c:54 lib/util/strtonum.c:61 +#: lib/util/strtonum.c:182 msgid "value too small" msgstr "valor massa petit" -#: lib/util/sudo_conf.c:178 +#: lib/util/sudo_conf.c:198 +#, c-format +msgid "invalid Path value `%s' in %s, line %u" +msgstr "valor de Path no vàlid `%s' a %s, línia %u" + +#: lib/util/sudo_conf.c:364 lib/util/sudo_conf.c:417 +#, c-format +msgid "invalid value for %s `%s' in %s, line %u" +msgstr "valor no vàid per a %s `%s' a %s, línia %u" + +#: lib/util/sudo_conf.c:385 #, c-format -msgid "unsupported group source `%s' in %s, line %d" -msgstr "font `%s' de grup no suportada a %s, línia %d" +msgid "unsupported group source `%s' in %s, line %u" +msgstr "font de grup no suportat `%s' a %s, línia %u" -#: lib/util/sudo_conf.c:192 +#: lib/util/sudo_conf.c:401 #, c-format -msgid "invalid max groups `%s' in %s, line %d" -msgstr "grups `%s' max no vàlids a %s, línia %d" +msgid "invalid max groups `%s' in %s, line %u" +msgstr "grups `%s' max no vàlids a %s, línia %u" -#: lib/util/sudo_conf.c:407 +#: lib/util/sudo_conf.c:560 #, c-format msgid "unable to stat %s" msgstr "no es pot obrir %s" -#: lib/util/sudo_conf.c:410 +#: lib/util/sudo_conf.c:563 #, c-format msgid "%s is not a regular file" msgstr "%s no és un fitxer regular" -#: lib/util/sudo_conf.c:413 +#: lib/util/sudo_conf.c:566 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s és propietat de l'uid %u, hauria de ser %u" -#: lib/util/sudo_conf.c:417 +#: lib/util/sudo_conf.c:570 #, c-format msgid "%s is world writable" msgstr "%s és escrivible per tothom" -#: lib/util/sudo_conf.c:420 +#: lib/util/sudo_conf.c:573 #, c-format msgid "%s is group writable" msgstr "%s és escrivible pel grup" -#: lib/util/sudo_conf.c:430 src/selinux.c:196 src/selinux.c:209 src/sudo.c:328 +#: lib/util/sudo_conf.c:583 src/selinux.c:199 src/selinux.c:212 src/sudo.c:340 #, c-format msgid "unable to open %s" msgstr "no s'ha pogut obrir %s" -#: src/exec.c:133 src/exec_pty.c:751 -msgid "policy plugin failed session initialization" -msgstr "el connector de política ha fallat la inicialització de la sessió" +#: src/exec.c:114 src/exec.c:116 src/exec.c:121 src/exec.c:409 src/exec.c:411 +#: src/exec.c:413 src/exec.c:415 src/exec.c:417 src/exec.c:419 src/exec.c:422 +#: src/exec.c:438 src/exec.c:440 src/exec.c:595 src/exec.c:790 +#: src/exec_pty.c:466 src/exec_pty.c:722 src/exec_pty.c:792 src/exec_pty.c:794 +#: src/exec_pty.c:806 src/exec_pty.c:808 src/exec_pty.c:1285 +#: src/exec_pty.c:1287 src/exec_pty.c:1292 src/exec_pty.c:1294 +#: src/exec_pty.c:1308 src/exec_pty.c:1319 src/exec_pty.c:1321 +#: src/exec_pty.c:1323 src/exec_pty.c:1325 src/exec_pty.c:1327 +#: src/exec_pty.c:1329 src/exec_pty.c:1331 src/signal.c:147 +#, c-format +msgid "unable to set handler for signal %d" +msgstr "no es pot establir el gestor per al senyal %d" -#: src/exec.c:138 src/exec_pty.c:767 src/exec_pty.c:1283 src/tgetpass.c:221 +#: src/exec.c:126 src/exec_pty.c:838 src/exec_pty.c:1369 src/tgetpass.c:265 msgid "unable to fork" msgstr "no s'ha pogut bifurcar" -#: src/exec.c:311 src/exec.c:319 src/exec.c:852 src/exec_pty.c:514 -#: src/exec_pty.c:519 src/exec_pty.c:577 src/exec_pty.c:584 src/exec_pty.c:871 -#: src/exec_pty.c:881 src/exec_pty.c:926 src/exec_pty.c:933 -#: src/exec_pty.c:1348 src/exec_pty.c:1355 src/exec_pty.c:1362 +#: src/exec.c:304 src/exec.c:312 src/exec.c:868 src/exec_pty.c:604 +#: src/exec_pty.c:611 src/exec_pty.c:654 src/exec_pty.c:659 src/exec_pty.c:942 +#: src/exec_pty.c:952 src/exec_pty.c:997 src/exec_pty.c:1004 +#: src/exec_pty.c:1434 src/exec_pty.c:1441 src/exec_pty.c:1448 msgid "unable to add event to queue" msgstr "no s'ha pogut afegir un esdeveniment a la cua" -#: src/exec.c:399 +#: src/exec.c:392 msgid "unable to create sockets" msgstr "no s'ha pogut crear el sòcol" -#: src/exec.c:485 +#: src/exec.c:447 +msgid "policy plugin failed session initialization" +msgstr "el connector de política ha fallat la inicialització de la sessió" + +#: src/exec.c:492 msgid "error in event loop" msgstr "error al bucle d'esdeveniment" -#: src/exec.c:503 +#: src/exec.c:510 msgid "unable to restore tty label" msgstr "no s'ha pogut restaurar l'etiqueta tty" -#: src/exec_common.c:73 +#: src/exec.c:603 src/exec_pty.c:498 src/signal.c:86 +#, c-format +msgid "unable to restore handler for signal %d" +msgstr "no s'ha pogut restaurar el gestor per al senyal %d" + +#: src/exec.c:721 src/exec_pty.c:1176 +msgid "error reading from signal pipe" +msgstr "error en llegir del conducte del senyal" + +#: src/exec_common.c:64 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "no s'ha pogut remoure PRIV_PROC_EXEC de PRIV_LIMIT" -#: src/exec_pty.c:194 +#: src/exec_pty.c:188 msgid "unable to allocate pty" msgstr "no s'ha pogut assignar pty" -#: src/exec_pty.c:689 src/exec_pty.c:698 src/exec_pty.c:706 -#: src/exec_pty.c:1203 src/exec_pty.c:1280 src/signal.c:129 src/tgetpass.c:218 +#: src/exec_pty.c:766 src/exec_pty.c:775 src/exec_pty.c:783 +#: src/exec_pty.c:1277 src/exec_pty.c:1366 src/signal.c:128 src/tgetpass.c:261 msgid "unable to create pipe" msgstr "no s'ha pogut crear un conducte" -#: src/exec_pty.c:742 -msgid "unable to set terminal to raw mode" -msgstr "no s'ha pogut configurar la terminal en mode en brut" - -#: src/exec_pty.c:1102 -msgid "error reading from signal pipe" -msgstr "error en llegir del conducte del senyal" - -#: src/exec_pty.c:1135 +#: src/exec_pty.c:1209 msgid "error reading from pipe" msgstr "error en llegir del conducte" -#: src/exec_pty.c:1160 +#: src/exec_pty.c:1234 msgid "error reading from socketpair" msgstr "error en llegir del parell de sòcols" -#: src/exec_pty.c:1169 +#: src/exec_pty.c:1243 #, c-format msgid "unexpected reply type on backchannel: %d" msgstr "tipus de resposta inesperada al canal posterior: %d" -#: src/exec_pty.c:1259 +#: src/exec_pty.c:1345 msgid "unable to set controlling tty" msgstr "no s'ha pogut configurar la tty controladora" -#: src/load_plugins.c:61 src/load_plugins.c:74 src/load_plugins.c:91 -#: src/load_plugins.c:144 src/load_plugins.c:150 src/load_plugins.c:156 -#: src/load_plugins.c:197 src/load_plugins.c:204 src/load_plugins.c:211 -#: src/load_plugins.c:217 +#: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:80 +#: src/load_plugins.c:110 src/load_plugins.c:116 src/load_plugins.c:122 +#: src/load_plugins.c:163 src/load_plugins.c:171 src/load_plugins.c:178 +#: src/load_plugins.c:184 #, c-format msgid "error in %s, line %d while loading plugin `%s'" msgstr "error a %s, línia %d quan s'estava carregant el connector `%s'" -#: src/load_plugins.c:93 +#: src/load_plugins.c:82 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" -#: src/load_plugins.c:152 +#: src/load_plugins.c:118 #, c-format msgid "%s must be owned by uid %d" msgstr "%s ha de ser propietat de l'uid %d" -#: src/load_plugins.c:158 +#: src/load_plugins.c:124 #, c-format msgid "%s must be only be writable by owner" msgstr "%s ha de ser escrivible únicament pel propietari" -#: src/load_plugins.c:199 +#: src/load_plugins.c:165 #, c-format msgid "unable to load %s: %s" msgstr "no s'ha pogut carregar %s: %s" -#: src/load_plugins.c:206 +#: src/load_plugins.c:173 #, c-format msgid "unable to find symbol `%s' in %s" msgstr "no s'ha pogut trobar el símbol `%s' a %s" -#: src/load_plugins.c:213 +#: src/load_plugins.c:180 #, c-format msgid "unknown policy type %d found in %s" msgstr "s'ha trobat un tipus desconegut de política %d a %s" -#: src/load_plugins.c:219 +#: src/load_plugins.c:186 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "s'ha trobat una versió major %d incompatible de connector (s'esperava %d) a %s" -#: src/load_plugins.c:228 +#: src/load_plugins.c:195 #, c-format msgid "ignoring policy plugin `%s' in %s, line %d" msgstr "s'ignorarà el connector de política `%s' a %s, línia %d" -#: src/load_plugins.c:230 +#: src/load_plugins.c:197 msgid "only a single policy plugin may be specified" msgstr "sols es pot especificar un únic connector de política" -#: src/load_plugins.c:233 +#: src/load_plugins.c:200 #, c-format msgid "ignoring duplicate policy plugin `%s' in %s, line %d" msgstr "s'ignorarà el connector entrada/sortida duplicat `%s' a %s, línia %d" -#: src/load_plugins.c:248 +#: src/load_plugins.c:221 #, c-format msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" msgstr "s'ignorarà el connector entrada/sortida duplica `%s' a %s, línia %d" -#: src/load_plugins.c:319 +#: src/load_plugins.c:324 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "el connector de política %s no inclou un mètode check_policy" -#: src/net_ifs.c:236 -msgid "unable to open socket" -msgstr "no s'ha pogut obrir el sòcol" +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:449 +#, c-format +msgid "internal error, %s overflow" +msgstr "error intern, sobreeiximent de %s" -#: src/parse_args.c:247 +#: src/parse_args.c:239 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "l'argument per a -C ha de ser un número més gran o igual a 3" -#: src/parse_args.c:409 +#: src/parse_args.c:406 msgid "you may not specify both the `-i' and `-s' options" msgstr "no podeu especificar a l'hora les opcions `-i' i `-s'" -#: src/parse_args.c:413 +#: src/parse_args.c:410 msgid "you may not specify both the `-i' and `-E' options" msgstr "no podeu especificar a l'hora les opcons `-i' i `-E'" -#: src/parse_args.c:423 +#: src/parse_args.c:420 msgid "the `-E' option is not valid in edit mode" msgstr "l'opció `-E' no és vàlida al mode editar" -#: src/parse_args.c:425 +#: src/parse_args.c:422 msgid "you may not specify environment variables in edit mode" msgstr "no podeu especificar variables d'entorn al mode editar" -#: src/parse_args.c:433 +#: src/parse_args.c:430 msgid "the `-U' option may only be used with the `-l' option" msgstr "l'opció `-U' sols es pot usar amb l'opció `-l'" -#: src/parse_args.c:437 +#: src/parse_args.c:434 msgid "the `-A' and `-S' options may not be used together" msgstr "no es poden usar a l'hora les opcions `-A' i `-S'" -#: src/parse_args.c:520 +#: src/parse_args.c:504 msgid "sudoedit is not supported on this platform" msgstr "aquesta plataforma no dóna suport a sudoedit" -#: src/parse_args.c:593 +#: src/parse_args.c:577 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Sols es pot especificar una de les opcions -e, -h, -i, -K, -l, -s, -v o -V" -#: src/parse_args.c:607 +#: src/parse_args.c:591 #, c-format msgid "" "%s - edit files as another user\n" @@ -296,7 +328,7 @@ "%s - edita fitxers com un altre usuari\n" "\n" -#: src/parse_args.c:609 +#: src/parse_args.c:593 #, c-format msgid "" "%s - execute a command as another user\n" @@ -305,7 +337,7 @@ "%s - executa una ordre com un altre usuari\n" "\n" -#: src/parse_args.c:614 +#: src/parse_args.c:598 #, c-format msgid "" "\n" @@ -314,265 +346,270 @@ "\n" "Opcions:\n" -#: src/parse_args.c:616 +#: src/parse_args.c:600 msgid "use a helper program for password prompting" msgstr "usa un programa auxiliar per a la pregunta de la contrasenya" -#: src/parse_args.c:619 +#: src/parse_args.c:603 msgid "use specified BSD authentication type" msgstr "usa el tipus d'autenticació BSD especificat" -#: src/parse_args.c:622 +#: src/parse_args.c:606 msgid "run command in the background" msgstr "executa l'ordre en el segon pla" -#: src/parse_args.c:624 +#: src/parse_args.c:608 msgid "close all file descriptors >= num" msgstr "tanca tots els descriptors de fitxer >= num" -#: src/parse_args.c:627 +#: src/parse_args.c:611 msgid "run command with the specified BSD login class" msgstr "executa l'ordre amb la classe d'inici de sesssió BSD especificada" -#: src/parse_args.c:630 +#: src/parse_args.c:614 msgid "preserve user environment when running command" msgstr "preserva l'entorn de l'usuari quan s'executi l'ordre" -#: src/parse_args.c:632 +#: src/parse_args.c:616 msgid "edit files instead of running a command" msgstr "edita els fitxers en comptes d'executar una ordre" -#: src/parse_args.c:634 +#: src/parse_args.c:618 msgid "run command as the specified group name or ID" msgstr "executa l'ordre com el nom o ID especificats de grup" -#: src/parse_args.c:636 +#: src/parse_args.c:620 msgid "set HOME variable to target user's home dir" msgstr "estableix la variable HOME per apuntar al directori de l'usuari" -#: src/parse_args.c:638 +#: src/parse_args.c:622 msgid "display help message and exit" msgstr "mostra el missatge d'ajuda i surt" -#: src/parse_args.c:640 +#: src/parse_args.c:624 msgid "run command on host (if supported by plugin)" msgstr "executa l'ordre a l'amfitrió (si està suportat pel connector)" -#: src/parse_args.c:642 +#: src/parse_args.c:626 msgid "run login shell as the target user; a command may also be specified" msgstr "executa l'intèrpret d'ordres de l'inici de sessió com a usuari de destinació; també es pot especificar una ordre" -#: src/parse_args.c:644 +#: src/parse_args.c:628 msgid "remove timestamp file completely" msgstr "suprimeix completament el fitxer de marca de temps" -#: src/parse_args.c:646 +#: src/parse_args.c:630 msgid "invalidate timestamp file" msgstr "fitxer de marca de temps no vàlid" -#: src/parse_args.c:648 +#: src/parse_args.c:632 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "fes una llista dels privilegis de l'usuari o verifica una ordre específica; usueu-lo dues vegades per a formats més llargs" -#: src/parse_args.c:650 +#: src/parse_args.c:634 msgid "non-interactive mode, no prompts are used" msgstr "mode no interactiu, no es preguntarà res" -#: src/parse_args.c:652 +#: src/parse_args.c:636 msgid "preserve group vector instead of setting to target's" msgstr "preserva el vector de grup en comptes d'establir-lo d'acord amb la destinació" -#: src/parse_args.c:654 +#: src/parse_args.c:638 msgid "use the specified password prompt" msgstr "usa la pregunta específica de contrasenya" -#: src/parse_args.c:657 +#: src/parse_args.c:641 msgid "create SELinux security context with specified role" msgstr "crea un context de seguretat SELinux amb el rol especificat" -#: src/parse_args.c:660 +#: src/parse_args.c:644 msgid "read password from standard input" msgstr "llegeix la contrasenya des de l'entrada estàndard" -#: src/parse_args.c:662 +#: src/parse_args.c:646 msgid "run shell as the target user; a command may also be specified" msgstr "executa l'intèrpret d'ordres com a usuari de destinació; també es pot especificar una ordre" -#: src/parse_args.c:665 +#: src/parse_args.c:649 msgid "create SELinux security context with specified type" msgstr "crea el context de seguretat SELinux amb el tipus especificat" -#: src/parse_args.c:668 +#: src/parse_args.c:652 msgid "in list mode, display privileges for user" msgstr "en mode llista, mostra els privilegis per a l'usuari" -#: src/parse_args.c:670 +#: src/parse_args.c:654 msgid "run command (or edit file) as specified user name or ID" msgstr "executa l'ordre (o edita el fitxer) com el nom o ID especificats d'usuari" -#: src/parse_args.c:672 +#: src/parse_args.c:656 msgid "display version information and exit" msgstr "mostra la informació de versió i surt" -#: src/parse_args.c:674 +#: src/parse_args.c:658 msgid "update user's timestamp without running a command" msgstr "actualitza la marca de temps de l'usuari sense executar una ordre" -#: src/parse_args.c:676 +#: src/parse_args.c:660 msgid "stop processing command line arguments" msgstr "deixa de processar els arguments de línia d'ordres" -#: src/selinux.c:77 +#: src/selinux.c:78 msgid "unable to open audit system" msgstr "no s'ha pogut obrir el sistema d'auditoria" -#: src/selinux.c:85 +#: src/selinux.c:88 msgid "unable to send audit message" msgstr "no s'ha pogut enviar el missatge d'auditoria" -#: src/selinux.c:113 +#: src/selinux.c:116 #, c-format msgid "unable to fgetfilecon %s" msgstr "no s'ha pogut fgetfilecon %s" -#: src/selinux.c:118 +#: src/selinux.c:121 #, c-format msgid "%s changed labels" msgstr "%s ha canviat les etiquetes" -#: src/selinux.c:123 +#: src/selinux.c:126 #, c-format msgid "unable to restore context for %s" msgstr "no s'ha pogut restaurar el context per a %s" -#: src/selinux.c:163 +#: src/selinux.c:166 #, c-format msgid "unable to open %s, not relabeling tty" msgstr "no s'ha pogut obrir %s, no es canviaran les etiquetes per a la tty" -#: src/selinux.c:172 +#: src/selinux.c:175 msgid "unable to get current tty context, not relabeling tty" msgstr "no s'ha pogut obtenir el context tty actual, no es canviaran les etiquetes per a la tty" -#: src/selinux.c:179 +#: src/selinux.c:182 msgid "unable to get new tty context, not relabeling tty" msgstr "no s'ha pogut obtenir el nou context tty, no es canviaran les etiquetes tty" -#: src/selinux.c:186 +#: src/selinux.c:189 msgid "unable to set new tty context" msgstr "no s'ha pogut establir el nou context tty" -#: src/selinux.c:252 +#: src/selinux.c:255 #, c-format msgid "you must specify a role for type %s" msgstr "heu d'especificar un rol per al tipus %s" -#: src/selinux.c:258 +#: src/selinux.c:261 #, c-format msgid "unable to get default type for role %s" msgstr "no s'ha pogut obtenir un tipus predeterminat per al rol %s" -#: src/selinux.c:276 +#: src/selinux.c:279 #, c-format msgid "failed to set new role %s" msgstr "no s'ha pogut establir el nou rol %s" -#: src/selinux.c:280 +#: src/selinux.c:283 #, c-format msgid "failed to set new type %s" msgstr "no s'ha pogut establir el nou tipus %s" -#: src/selinux.c:289 +#: src/selinux.c:295 #, c-format msgid "%s is not a valid context" msgstr "%s no és un context vàlid" -#: src/selinux.c:324 +#: src/selinux.c:330 msgid "failed to get old_context" msgstr "no s'ha pogut obtenir old_context" -#: src/selinux.c:330 +#: src/selinux.c:336 msgid "unable to determine enforcing mode." msgstr "no s'ha pogut determinar el mode de fer complir" -#: src/selinux.c:347 +#: src/selinux.c:353 #, c-format msgid "unable to set tty context to %s" msgstr "no s'ha pogut establir el context tty a %s" -#: src/selinux.c:386 +#: src/selinux.c:392 #, c-format msgid "unable to set exec context to %s" msgstr "no s'ha pogut establir el context exec a %s" -#: src/selinux.c:393 +#: src/selinux.c:399 #, c-format msgid "unable to set key creation context to %s" msgstr "no s'ha pogut establir el context de creació de clau a %s" -#: src/sesh.c:58 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "es requereix almenys un argument" -#: src/sesh.c:78 +#: src/sesh.c:107 #, c-format msgid "unable to run %s as a login shell" msgstr "no s'ha pogut executar %s com a intèrpret d'ordres d'inici de sessió" -#: src/sesh.c:83 src/sudo.c:1100 +#: src/sesh.c:112 src/sudo.c:1231 #, c-format msgid "unable to execute %s" msgstr "no s'ha pogut executar %s" -#: src/solaris.c:88 +#: src/signal.c:68 +#, c-format +msgid "unable to save handler for signal %d" +msgstr "no s'ha pogut desar el gestorper al senyal %d" + +#: src/solaris.c:76 msgid "resource control limit has been reached" msgstr "s'ha assolit el límit de control de recursos" -#: src/solaris.c:91 +#: src/solaris.c:79 #, c-format msgid "user \"%s\" is not a member of project \"%s\"" msgstr "l'usuari \"%s\" no és un membre del projecte \"%s\"" -#: src/solaris.c:95 +#: src/solaris.c:83 msgid "the invoking task is final" msgstr "la tasca invocant és final" -#: src/solaris.c:98 +#: src/solaris.c:86 #, c-format msgid "could not join project \"%s\"" msgstr "no es pot fer la incorporació al projecte \"%s\"" -#: src/solaris.c:103 +#: src/solaris.c:91 #, c-format msgid "no resource pool accepting default bindings exists for project \"%s\"" msgstr "no hi ha vinculacions predeterminades d'acceptació de conjunt de recursos per al projecte \"%s\"" -#: src/solaris.c:107 +#: src/solaris.c:95 #, c-format msgid "specified resource pool does not exist for project \"%s\"" msgstr "no existeix el conjunt de recursos especifica per al projecte \"%s\"" -#: src/solaris.c:111 +#: src/solaris.c:99 #, c-format msgid "could not bind to default resource pool for project \"%s\"" msgstr "no s'ha pogut vincular al conjunt de recursos predeterminats per al projecte \"%s\"" -#: src/solaris.c:117 +#: src/solaris.c:105 #, c-format msgid "setproject failed for project \"%s\"" msgstr "ha fallat setproject per al projecte \"%s\"" -#: src/solaris.c:119 +#: src/solaris.c:107 #, c-format msgid "warning, resource control assignment failed for project \"%s\"" msgstr "advertiment, l'assignació de control de recursos ha fallat per al projecte \"%s\"" -#: src/sudo.c:196 +#: src/sudo.c:193 #, c-format msgid "Sudo version %s\n" msgstr "Versió de sudo %s\n" -#: src/sudo.c:198 +#: src/sudo.c:195 #, c-format msgid "Configure options: %s\n" msgstr "Opcions de configuració: %s\n" @@ -595,177 +632,232 @@ msgid "unexpected sudo mode 0x%x" msgstr "mode 0x%x inesperat de sudo" -#: src/sudo.c:413 +#: src/sudo.c:434 msgid "unable to get group vector" msgstr "no s'ha pogut obtenir el vector de grup" -#: src/sudo.c:465 +#: src/sudo.c:497 #, c-format msgid "unknown uid %u: who are you?" msgstr "uid %u desconegut: qui sou?" -#: src/sudo.c:770 +#: src/sudo.c:829 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s ha de ser propietat de l'uid %d i tenir el bit setuid establert" -#: src/sudo.c:773 +#: src/sudo.c:832 #, c-format msgid "effective uid is not %d, is %s on a file system with the 'nosuid' option set or an NFS file system without root privileges?" msgstr "" "l'uid efectiu no és %d, és %s a un sistema de fitxers amb l'opció\n" "'nosuid' establarta o un sistema de fitxers NFS sense d'usuari primari? " -#: src/sudo.c:779 +#: src/sudo.c:838 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "l'uid efectiu no és %d, és el sudo instal·lat com a setuid root?" -#: src/sudo.c:908 +#: src/sudo.c:969 #, c-format msgid "unknown login class %s" msgstr "classe d'inici de sessió %s desconeguda" -#: src/sudo.c:921 +#: src/sudo.c:982 msgid "unable to set user context" msgstr "no s'ha pogut establir el context d'usuari" -#: src/sudo.c:935 +#: src/sudo.c:996 msgid "unable to set supplementary group IDs" msgstr "no s'han pogut establir els IDs de grup suplementaris" -#: src/sudo.c:942 +#: src/sudo.c:1003 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "no s'ha pogut establir el gid efectiu per a runas gid %u" -#: src/sudo.c:948 +#: src/sudo.c:1009 #, c-format msgid "unable to set gid to runas gid %u" msgstr "no s'ha pogut establir el gid a runas gid %u" -#: src/sudo.c:955 +#: src/sudo.c:1016 msgid "unable to set process priority" msgstr "no s'ha pogut establir la prioritat del procés" -#: src/sudo.c:963 +#: src/sudo.c:1024 #, c-format msgid "unable to change root to %s" msgstr "no s'ha pogut canviar l'usuari primari a %s" -#: src/sudo.c:976 src/sudo.c:982 src/sudo.c:988 +#: src/sudo.c:1037 src/sudo.c:1043 src/sudo.c:1050 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "no s'ha pogut canviar a runas uid (%u, %u)" -#: src/sudo.c:1005 +#: src/sudo.c:1068 #, c-format msgid "unable to change directory to %s" msgstr "no s'ha pogut canviar el directori a %s" -#: src/sudo.c:1062 +#: src/sudo.c:1126 #, c-format msgid "unexpected child termination condition: %d" msgstr "condició de terminació del fill inesperada: %d" -#: src/sudo.c:1121 +#: src/sudo.c:1259 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "no hi ha el mètode `check_policy' al connector de polítiques %s" -#: src/sudo.c:1134 +#: src/sudo.c:1277 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "el connector de política %s no dóna suport a llistar privilegis" -#: src/sudo.c:1146 +#: src/sudo.c:1294 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "el connector de polítiques %s no dóna suport a l'opció -v" -#: src/sudo.c:1158 +#: src/sudo.c:1309 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "el connector de polítiques %s no dóna suport a les opcions -k/-K" -#: src/sudo_edit.c:110 -#, c-format -msgid "unable to change uid to root (%u)" -msgstr "no s'ha pogut canviar l'uid a l'usuari primari (%u)" - -#: src/sudo_edit.c:142 -msgid "plugin error: missing file list for sudoedit" -msgstr "error de connector: no hi ha la llista de fitxers per a sudoedit" +#: src/sudo_edit.c:202 +msgid "unable to restore current working directory" +msgstr "no s'ha pogut restaurar el directori actual de treball" -#: src/sudo_edit.c:170 src/sudo_edit.c:285 +#: src/sudo_edit.c:412 src/sudo_edit.c:516 #, c-format msgid "%s: not a regular file" msgstr "%s: no és un fitxer regular" -#: src/sudo_edit.c:204 src/sudo_edit.c:320 +#: src/sudo_edit.c:419 +#, c-format +msgid "%s: editing symbolic links is not permitted" +msgstr "%s: no es permet l'edició de enllaços simbòlics" + +#: src/sudo_edit.c:422 +#, c-format +msgid "%s: editing files in a writable directory is not permitted" +msgstr "%s: no es permet l'edició de fitxers a un directori amb permís d'escriptura" + +#: src/sudo_edit.c:453 src/sudo_edit.c:555 #, c-format msgid "%s: short write" msgstr "%s: escriptura breu" -#: src/sudo_edit.c:286 +#: src/sudo_edit.c:517 #, c-format msgid "%s left unmodified" msgstr "%s s'ha deixat sense modificar" -#: src/sudo_edit.c:298 +#: src/sudo_edit.c:530 src/sudo_edit.c:716 #, c-format msgid "%s unchanged" msgstr "%s sense canviar" -#: src/sudo_edit.c:310 src/sudo_edit.c:331 +#: src/sudo_edit.c:544 src/sudo_edit.c:566 #, c-format msgid "unable to write to %s" msgstr "no s'ha pogut escriure a %s" -#: src/sudo_edit.c:311 src/sudo_edit.c:329 src/sudo_edit.c:332 +#: src/sudo_edit.c:545 src/sudo_edit.c:564 src/sudo_edit.c:567 +#: src/sudo_edit.c:741 src/sudo_edit.c:745 #, c-format msgid "contents of edit session left in %s" msgstr "els continguts de la sessió d'edició s'han deixat a %s" -#: src/sudo_edit.c:328 +#: src/sudo_edit.c:563 msgid "unable to read temporary file" msgstr "no s'ha pogut llegir el fitxer temporal" -#: src/tgetpass.c:90 +#: src/sudo_edit.c:646 +msgid "sesh: internal error: odd number of paths" +msgstr "sesh: error intern: nombre imparell de camins" + +#: src/sudo_edit.c:648 +msgid "sesh: unable to create temporary files" +msgstr "sesh: no es poden crear fitxers temporal" + +#: src/sudo_edit.c:650 src/sudo_edit.c:748 +#, c-format +msgid "sesh: unknown error %d" +msgstr "sesh: error desconegut %d" + +#: src/sudo_edit.c:740 +msgid "unable to copy temporary files back to their original location" +msgstr "no es poden copiar els fitxers temporals un altre cop a la seva ubicació original" + +#: src/sudo_edit.c:744 +msgid "unable to copy some of the temporary files back to their original location" +msgstr "no es poden copiar alguns dels fitxers temporals un altre cop a la seva ubicació original" + +#: src/sudo_edit.c:787 +#, c-format +msgid "unable to change uid to root (%u)" +msgstr "no s'ha pogut canviar l'uid a l'usuari primari (%u)" + +#: src/sudo_edit.c:804 +msgid "plugin error: missing file list for sudoedit" +msgstr "error de connector: no hi ha la llista de fitxers per a sudoedit" + +#: src/sudo_edit.c:845 src/sudo_edit.c:858 +msgid "unable to read the clock" +msgstr "no es pot llegir el rellotge" + +#: src/tgetpass.c:107 msgid "no tty present and no askpass program specified" msgstr "no hi ha un tty present i no s'ha especificat un programa askpass" -#: src/tgetpass.c:99 +#: src/tgetpass.c:116 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "no s'ha especificat un programa askpass, proveu d'establir SUDO_ASKPASS" -#: src/tgetpass.c:232 +#: src/tgetpass.c:276 #, c-format msgid "unable to set gid to %u" msgstr "no s'ha pogut establir el gid a %u" -#: src/tgetpass.c:236 +#: src/tgetpass.c:280 #, c-format msgid "unable to set uid to %u" msgstr "no s'ha pogut establir el uid a %u" -#: src/tgetpass.c:241 +#: src/tgetpass.c:285 #, c-format msgid "unable to run %s" msgstr "no s'ha pogut executar %s" -#: src/utmp.c:278 +#: src/utmp.c:266 msgid "unable to save stdin" msgstr "no s'ha pogut desar el stdin" -#: src/utmp.c:280 +#: src/utmp.c:268 msgid "unable to dup2 stdin" msgstr "no s'ha pogut fer dup2 stdin" -#: src/utmp.c:283 +#: src/utmp.c:271 msgid "unable to restore stdin" msgstr "no s'ha pogut restaurar stdin" +#~ msgid "internal error, tried allocate zero bytes" +#~ msgstr "error intern, s'han intentat assignar zero bytes" + +#~ msgid "%s: %s: %s\n" +#~ msgstr "%s: %s: %s\n" + +#~ msgid "%s: %s\n" +#~ msgstr "%s: %s\n" + +#~ msgid "unable to set terminal to raw mode" +#~ msgstr "no s'ha pogut configurar la terminal en mode en brut" + +#~ msgid "unable to open socket" +#~ msgstr "no s'ha pogut obrir el sòcol" + #~ msgid "internal error, tried to emalloc2(0)" #~ msgstr "error intern, s'ha intentat emalloc2(0)" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/po/cs.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/po/cs.mo differ diff -Nru sudo-1.8.12/po/cs.po sudo-1.8.16/po/cs.po --- sudo-1.8.12/po/cs.po 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/po/cs.po 2016-03-17 16:13:10.000000000 +0000 @@ -1,14 +1,14 @@ # Portable object template file for sudo # This file is put in the public domain. # Todd C. Miller , 2011-2013 -# Petr Pisar , 2013, 2014. +# Petr Pisar , 2013, 2014, 2015, 2016. # msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.12b1\n" -"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-10-27 12:35-0600\n" -"PO-Revision-Date: 2014-11-09 20:42+0100\n" +"Project-Id-Version: sudo 1.8.16b1\n" +"Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" +"POT-Creation-Date: 2016-02-19 15:48-0700\n" +"PO-Revision-Date: 2016-02-25 20:26+01:00\n" "Last-Translator: Petr Pisar \n" "Language-Team: Czech \n" "Language: cs\n" @@ -16,297 +16,312 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: lib/util/aix.c:92 lib/util/aix.c:151 +#: lib/util/aix.c:85 lib/util/aix.c:164 msgid "unable to open userdb" msgstr "nelze otevřít databázi uživatelů" -#: lib/util/aix.c:156 +#: lib/util/aix.c:219 #, c-format msgid "unable to switch to registry \"%s\" for %s" msgstr "nelze se přepnout do registru „%s“ pro %s" -#: lib/util/aix.c:175 +#: lib/util/aix.c:244 msgid "unable to restore registry" msgstr "registr nelze obnovit" -#: lib/util/alloc.c:68 lib/util/alloc.c:85 lib/util/alloc.c:106 -#: lib/util/alloc.c:128 lib/util/alloc.c:147 lib/util/alloc.c:170 -msgid "internal error, tried allocate zero bytes" -msgstr "vnitřní chyba, pokus alokovat nula bajtů" - -#: lib/util/alloc.c:87 lib/util/alloc.c:109 lib/util/alloc.c:149 -#: lib/util/alloc.c:172 src/net_ifs.c:174 src/net_ifs.c:191 src/net_ifs.c:325 -#, c-format -msgid "internal error, %s overflow" -msgstr "vnitřní chyba, přetečení v %s" - -#: lib/util/gidlist.c:78 src/load_plugins.c:61 src/load_plugins.c:74 -#: src/sudo.c:572 src/sudo.c:591 src/sudo.c:618 src/sudo.c:627 src/sudo.c:636 -#: src/sudo.c:653 src/sudo.c:700 src/sudo.c:710 +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/gidlist.c:74 +#: lib/util/sudo_conf.c:207 lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 +#: lib/util/sudo_conf.c:569 src/conversation.c:75 src/exec.c:863 +#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 +#: src/exec_pty.c:684 src/exec_pty.c:692 src/load_plugins.c:52 +#: src/load_plugins.c:65 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:655 src/sudo.c:665 src/sudo.c:685 src/sudo.c:704 src/sudo.c:713 +#: src/sudo.c:722 src/sudo.c:739 src/sudo.c:780 src/sudo.c:790 src/sudo.c:810 +#: src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 src/sudo.c:1492 +#: src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/util/strsignal.c:50 +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/sudo_conf.c:208 +#: lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 lib/util/sudo_conf.c:569 +#: src/conversation.c:76 src/exec.c:863 src/exec_common.c:107 +#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:684 +#: src/exec_pty.c:692 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:810 src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 +#: src/sudo.c:1492 src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 +msgid "unable to allocate memory" +msgstr "nelze alokovat paměť" + +#: lib/util/strsignal.c:48 msgid "Unknown signal" msgstr "Neznámý signál" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:65 lib/util/strtonum.c:183 +#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:48 +#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "neplatná hodnota" -#: lib/util/strtoid.c:90 lib/util/strtoid.c:118 lib/util/strtomode.c:61 -#: lib/util/strtonum.c:68 lib/util/strtonum.c:195 +#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:54 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "hodnota je příliš velká" -#: lib/util/strtoid.c:96 lib/util/strtomode.c:61 lib/util/strtonum.c:68 -#: lib/util/strtonum.c:189 +#: lib/util/strtoid.c:89 lib/util/strtomode.c:54 lib/util/strtonum.c:61 +#: lib/util/strtonum.c:182 msgid "value too small" msgstr "hodnota je příliš malá" -#: lib/util/sudo_conf.c:181 +#: lib/util/sudo_conf.c:223 #, c-format msgid "invalid Path value `%s' in %s, line %u" msgstr "neplatná hodnota Path „%s“ v %s, řádek %u" -#: lib/util/sudo_conf.c:335 lib/util/sudo_conf.c:388 +#: lib/util/sudo_conf.c:389 lib/util/sudo_conf.c:442 #, c-format msgid "invalid value for %s `%s' in %s, line %u" msgstr "neplatná hodnota pro %s „%s“ v %s, řádek %u" -#: lib/util/sudo_conf.c:356 +#: lib/util/sudo_conf.c:410 #, c-format msgid "unsupported group source `%s' in %s, line %u" msgstr "nepodporovaný zdroj skupin „%s“ v %s, řádek %u" -#: lib/util/sudo_conf.c:372 +#: lib/util/sudo_conf.c:426 #, c-format msgid "invalid max groups `%s' in %s, line %u" msgstr "neplatné maximum skupin „%s“ v %s, řádek %u" -#: lib/util/sudo_conf.c:522 +#: lib/util/sudo_conf.c:585 #, c-format msgid "unable to stat %s" msgstr "nelze získat údaje o %s" -#: lib/util/sudo_conf.c:525 +#: lib/util/sudo_conf.c:588 #, c-format msgid "%s is not a regular file" msgstr "%s není obyčejný soubor" -#: lib/util/sudo_conf.c:528 +#: lib/util/sudo_conf.c:591 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s je vlastněn UID %u, avšak UID by mělo být %u" -#: lib/util/sudo_conf.c:532 +#: lib/util/sudo_conf.c:595 #, c-format msgid "%s is world writable" msgstr "%s je zapisovatelný pro všechny" -#: lib/util/sudo_conf.c:535 +#: lib/util/sudo_conf.c:598 #, c-format msgid "%s is group writable" msgstr "%s je zapisovatelný pro skupinu" -#: lib/util/sudo_conf.c:545 src/selinux.c:196 src/selinux.c:209 src/sudo.c:341 +#: lib/util/sudo_conf.c:608 src/selinux.c:199 src/selinux.c:212 src/sudo.c:367 #, c-format msgid "unable to open %s" msgstr "%s nelze otevřít" -#: src/exec.c:123 src/exec.c:128 src/exec.c:423 src/exec.c:425 src/exec.c:427 -#: src/exec.c:429 src/exec.c:431 src/exec.c:433 src/exec.c:436 src/exec.c:453 -#: src/exec.c:455 src/exec.c:457 src/exec.c:605 src/exec.c:800 -#: src/exec_pty.c:480 src/exec_pty.c:736 src/exec_pty.c:806 src/exec_pty.c:808 -#: src/exec_pty.c:820 src/exec_pty.c:1308 src/exec_pty.c:1310 -#: src/exec_pty.c:1315 src/exec_pty.c:1317 src/exec_pty.c:1331 -#: src/exec_pty.c:1342 src/exec_pty.c:1344 src/exec_pty.c:1346 -#: src/exec_pty.c:1348 src/exec_pty.c:1350 src/exec_pty.c:1352 -#: src/exec_pty.c:1354 src/signal.c:156 +#: src/exec.c:114 src/exec.c:116 src/exec.c:121 src/exec.c:409 src/exec.c:411 +#: src/exec.c:413 src/exec.c:415 src/exec.c:417 src/exec.c:419 src/exec.c:422 +#: src/exec.c:438 src/exec.c:440 src/exec.c:595 src/exec.c:790 +#: src/exec_pty.c:466 src/exec_pty.c:722 src/exec_pty.c:792 src/exec_pty.c:794 +#: src/exec_pty.c:806 src/exec_pty.c:808 src/exec_pty.c:1289 +#: src/exec_pty.c:1291 src/exec_pty.c:1296 src/exec_pty.c:1298 +#: src/exec_pty.c:1312 src/exec_pty.c:1323 src/exec_pty.c:1325 +#: src/exec_pty.c:1327 src/exec_pty.c:1329 src/exec_pty.c:1331 +#: src/exec_pty.c:1333 src/exec_pty.c:1335 src/signal.c:147 #, c-format msgid "unable to set handler for signal %d" msgstr "obsluhu pro signál %d nelze nastavit" -#: src/exec.c:135 src/exec_pty.c:845 -msgid "policy plugin failed session initialization" -msgstr "modul s politikami zrušil inicializaci relace" - -#: src/exec.c:140 src/exec_pty.c:861 src/exec_pty.c:1392 src/tgetpass.c:221 +#: src/exec.c:126 src/exec_pty.c:838 src/exec_pty.c:1373 src/tgetpass.c:265 msgid "unable to fork" msgstr "nelze vytvořit potomka" -#: src/exec.c:318 src/exec.c:326 src/exec.c:877 src/exec_pty.c:604 -#: src/exec_pty.c:609 src/exec_pty.c:667 src/exec_pty.c:674 src/exec_pty.c:965 -#: src/exec_pty.c:975 src/exec_pty.c:1020 src/exec_pty.c:1027 -#: src/exec_pty.c:1457 src/exec_pty.c:1464 src/exec_pty.c:1471 +#: src/exec.c:304 src/exec.c:312 src/exec.c:868 src/exec_pty.c:604 +#: src/exec_pty.c:611 src/exec_pty.c:654 src/exec_pty.c:659 src/exec_pty.c:946 +#: src/exec_pty.c:956 src/exec_pty.c:1001 src/exec_pty.c:1008 +#: src/exec_pty.c:1438 src/exec_pty.c:1445 src/exec_pty.c:1452 msgid "unable to add event to queue" msgstr "událost nelze přidat do fronty" -#: src/exec.c:406 +#: src/exec.c:392 msgid "unable to create sockets" msgstr "nelze vytvořit sockety" -#: src/exec.c:502 +#: src/exec.c:447 +msgid "policy plugin failed session initialization" +msgstr "modul s politikami zrušil inicializaci relace" + +#: src/exec.c:492 msgid "error in event loop" msgstr "chyba ve smyčce s událostmi" -#: src/exec.c:520 +#: src/exec.c:510 msgid "unable to restore tty label" msgstr "nelze obnovit značku TTY" -#: src/exec.c:613 src/exec_pty.c:514 src/signal.c:95 +#: src/exec.c:603 src/exec_pty.c:498 src/signal.c:86 #, c-format msgid "unable to restore handler for signal %d" msgstr "nelze obnovit obsluhu signálu %d" -#: src/exec.c:731 src/exec_pty.c:1199 +#: src/exec.c:721 src/exec_pty.c:1180 msgid "error reading from signal pipe" msgstr "chyba při čtení ze signální roury" -#: src/exec_common.c:73 +#: src/exec_common.c:166 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "z PRIV_LIMIT nelze odstranit PRIV_PROC_EXEC" -#: src/exec_pty.c:200 +#: src/exec_pty.c:188 msgid "unable to allocate pty" msgstr "nelze alokovat PTY" -#: src/exec_pty.c:780 src/exec_pty.c:789 src/exec_pty.c:797 -#: src/exec_pty.c:1300 src/exec_pty.c:1389 src/signal.c:137 src/tgetpass.c:218 +#: src/exec_pty.c:766 src/exec_pty.c:775 src/exec_pty.c:783 +#: src/exec_pty.c:1281 src/exec_pty.c:1370 src/signal.c:128 src/tgetpass.c:261 msgid "unable to create pipe" msgstr "nelze vytvořit rouru" -#: src/exec_pty.c:836 -msgid "unable to set terminal to raw mode" -msgstr "terminál nelze přepnout do syrového režimu" - -#: src/exec_pty.c:1232 +#: src/exec_pty.c:1213 msgid "error reading from pipe" msgstr "chyba při čtení z roury" -#: src/exec_pty.c:1257 +#: src/exec_pty.c:1238 msgid "error reading from socketpair" msgstr "chyba při čtení z dvojice socketů" -#: src/exec_pty.c:1266 +#: src/exec_pty.c:1247 #, c-format msgid "unexpected reply type on backchannel: %d" msgstr "neočekávaný druh odpovědi na zpětném kanálu: %d" -#: src/exec_pty.c:1368 +#: src/exec_pty.c:1349 msgid "unable to set controlling tty" msgstr "řídicí terminál nelze nastavit" -#: src/load_plugins.c:59 src/load_plugins.c:72 src/load_plugins.c:89 -#: src/load_plugins.c:142 src/load_plugins.c:148 src/load_plugins.c:154 -#: src/load_plugins.c:195 src/load_plugins.c:202 src/load_plugins.c:209 -#: src/load_plugins.c:215 +#: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 +#: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 +#: src/load_plugins.c:170 src/load_plugins.c:178 src/load_plugins.c:185 +#: src/load_plugins.c:191 #, c-format msgid "error in %s, line %d while loading plugin `%s'" msgstr "chyba v %s na řádku %d při zavádění modulu „%s“" -#: src/load_plugins.c:91 +#: src/load_plugins.c:87 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" -#: src/load_plugins.c:150 +#: src/load_plugins.c:125 #, c-format msgid "%s must be owned by uid %d" msgstr "%s musí být vlastněn UID %d" -#: src/load_plugins.c:156 +#: src/load_plugins.c:131 #, c-format msgid "%s must be only be writable by owner" msgstr "%s musí být zapisovatelný jen vlastníkem" -#: src/load_plugins.c:197 +#: src/load_plugins.c:172 #, c-format msgid "unable to load %s: %s" msgstr "%s nelze zavést: %s" -#: src/load_plugins.c:204 +#: src/load_plugins.c:180 #, c-format msgid "unable to find symbol `%s' in %s" msgstr "v %s nelze nalézt symbol „%s“" -#: src/load_plugins.c:211 +#: src/load_plugins.c:187 #, c-format msgid "unknown policy type %d found in %s" msgstr "v %2$s nalezen neznámý druh politiky %1$d" -#: src/load_plugins.c:217 +#: src/load_plugins.c:193 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "neslučitelná hlavní verze modulu %d (očekáváno %d) nalezena v %s" -#: src/load_plugins.c:226 +#: src/load_plugins.c:202 #, c-format msgid "ignoring policy plugin `%s' in %s, line %d" msgstr "ignoruje se modul politiky „%s“ v %s na řádku %d" -#: src/load_plugins.c:228 +#: src/load_plugins.c:204 msgid "only a single policy plugin may be specified" msgstr "lze zadat pouze jeden modul s politikou" -#: src/load_plugins.c:231 +#: src/load_plugins.c:207 #, c-format msgid "ignoring duplicate policy plugin `%s' in %s, line %d" msgstr "ignoruje je násobný modul s politikou „%s“ v %s na řádku %d" -#: src/load_plugins.c:249 +#: src/load_plugins.c:228 #, c-format msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" msgstr "ignoruje je násobný modul vstupu a výstupu „%s“ v %s na řádku %d" -#: src/load_plugins.c:338 +#: src/load_plugins.c:331 #, 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:236 -msgid "unable to open socket" -msgstr "nelze otevřít socket" +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:476 +#, c-format +msgid "internal error, %s overflow" +msgstr "vnitřní chyba, přetečení v %s" -#: src/parse_args.c:241 +#: src/parse_args.c:239 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:403 +#: src/parse_args.c:406 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:407 +#: src/parse_args.c:410 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:417 +#: src/parse_args.c:420 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:419 +#: src/parse_args.c:422 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:427 +#: src/parse_args.c:430 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:431 +#: src/parse_args.c:434 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:497 +#: src/parse_args.c:504 msgid "sudoedit is not supported on this platform" msgstr "na této platformě není sudoedit podporován" -#: src/parse_args.c:570 +#: src/parse_args.c:577 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:584 +#: src/parse_args.c:591 #, c-format msgid "" "%s - edit files as another user\n" @@ -315,7 +330,7 @@ "%s – upraví soubory jako jiný uživatel\n" "\n" -#: src/parse_args.c:586 +#: src/parse_args.c:593 #, c-format msgid "" "%s - execute a command as another user\n" @@ -324,7 +339,7 @@ "%s – vykoná příkaz jako jiný uživatel\n" "\n" -#: src/parse_args.c:591 +#: src/parse_args.c:598 #, c-format msgid "" "\n" @@ -333,483 +348,519 @@ "\n" "Přepínače:\n" -#: src/parse_args.c:593 +#: src/parse_args.c:600 msgid "use a helper program for password prompting" msgstr "dotazuje se na heslo prostřednictvím pomocného programu" -#: src/parse_args.c:596 +#: src/parse_args.c:603 msgid "use specified BSD authentication type" msgstr "použije zadaný druh BSD autentizace" -#: src/parse_args.c:599 +#: src/parse_args.c:606 msgid "run command in the background" msgstr "spustí příkaz na pozadí" -#: src/parse_args.c:601 +#: src/parse_args.c:608 msgid "close all file descriptors >= num" msgstr "uzavře všechny deskriptory souboru >= číslu" -#: src/parse_args.c:604 +#: src/parse_args.c:611 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:607 +#: src/parse_args.c:614 msgid "preserve user environment when running command" msgstr "při spuštění příkazu zachová prostředí" -#: src/parse_args.c:609 +#: src/parse_args.c:616 msgid "edit files instead of running a command" msgstr "místo spuštění příkazu upraví soubory" -#: src/parse_args.c:611 +#: src/parse_args.c:618 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:613 +#: src/parse_args.c:620 msgid "set HOME variable to target user's home dir" msgstr "nastaví proměnnou HOME na domovský adresář uživatele" -#: src/parse_args.c:615 +#: src/parse_args.c:622 msgid "display help message and exit" msgstr "zobrazí nápovědu a skončí" -#: src/parse_args.c:617 +#: src/parse_args.c:624 msgid "run command on host (if supported by plugin)" msgstr "spustí příkaz na stroji (je-li podporováno modulem)" -#: src/parse_args.c:619 +#: src/parse_args.c:626 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:621 +#: src/parse_args.c:628 msgid "remove timestamp file completely" msgstr "úplně odstraní soubor s časovými údaji" -#: src/parse_args.c:623 +#: src/parse_args.c:630 msgid "invalidate timestamp file" msgstr "zneplatní soubor s časovými údaji" -#: src/parse_args.c:625 +#: src/parse_args.c:632 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:627 +#: src/parse_args.c:634 msgid "non-interactive mode, no prompts are used" msgstr "neinteraktivní režim, nepoužijí se žádné dotazy" -#: src/parse_args.c:629 +#: src/parse_args.c:636 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:631 +#: src/parse_args.c:638 msgid "use the specified password prompt" msgstr "použije určený dotaz na heslo" -#: src/parse_args.c:634 +#: src/parse_args.c:641 msgid "create SELinux security context with specified role" msgstr "vytvoří selinuxový bezpečnostní kontext se zadanou rolí" -#: src/parse_args.c:637 +#: src/parse_args.c:644 msgid "read password from standard input" msgstr "načte heslo ze standardní vstupu" -#: src/parse_args.c:639 +#: src/parse_args.c:646 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:642 +#: src/parse_args.c:649 msgid "create SELinux security context with specified type" msgstr "vytvoří selinuxový bezpečnostní kontext se zadaným typem" -#: src/parse_args.c:645 +#: src/parse_args.c:652 msgid "in list mode, display privileges for user" msgstr "v režimu výpisu zobrazí oprávnění uživatele" -#: src/parse_args.c:647 +#: src/parse_args.c:654 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:649 +#: src/parse_args.c:656 msgid "display version information and exit" msgstr "zobrazí údaje o verzi a skončí" -#: src/parse_args.c:651 +#: src/parse_args.c:658 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:653 +#: src/parse_args.c:660 msgid "stop processing command line arguments" msgstr "přestane zpracovávat argumenty příkazového řádku" -#: src/selinux.c:77 +#: src/selinux.c:78 msgid "unable to open audit system" msgstr "nelze otevřít auditní systém" -#: src/selinux.c:85 +#: src/selinux.c:88 msgid "unable to send audit message" msgstr "nelze odeslat auditní zprávu" -#: src/selinux.c:113 +#: src/selinux.c:116 #, c-format msgid "unable to fgetfilecon %s" msgstr "nelze získat kontext souboru %s pomocí fgetfilecon" -#: src/selinux.c:118 +#: src/selinux.c:121 #, c-format msgid "%s changed labels" msgstr "%s změnilo značky" -#: src/selinux.c:123 +#: src/selinux.c:126 #, c-format msgid "unable to restore context for %s" msgstr "nelze obnovit kontext %s" -#: src/selinux.c:163 +#: src/selinux.c:166 #, c-format msgid "unable to open %s, not relabeling tty" msgstr "%s nelze otevřít, TTY nebude značka přepsána" -#: src/selinux.c:172 +#: src/selinux.c:175 msgid "unable to get current tty context, not relabeling tty" msgstr "nelze získat kontext současného TTY, TTY nebude značka přepsána" -#: src/selinux.c:179 +#: src/selinux.c:182 msgid "unable to get new tty context, not relabeling tty" msgstr "nelze získat nový kontext TTY, TTY nebude značka přepsána" -#: src/selinux.c:186 +#: src/selinux.c:189 msgid "unable to set new tty context" msgstr "nelze nastavit nový kontext TTY" -#: src/selinux.c:252 +#: src/selinux.c:255 #, c-format msgid "you must specify a role for type %s" msgstr "pro typ %s musíte zadat roli" -#: src/selinux.c:258 +#: src/selinux.c:261 #, c-format msgid "unable to get default type for role %s" msgstr "výchozí typ pro roli %s nelze získat" -#: src/selinux.c:276 +#: src/selinux.c:279 #, c-format msgid "failed to set new role %s" msgstr "nepodařilo se nastavit novou roli %s" -#: src/selinux.c:280 +#: src/selinux.c:283 #, c-format msgid "failed to set new type %s" msgstr "nepodařilo se nastavit nový typ %s" -#: src/selinux.c:289 +#: src/selinux.c:295 #, c-format msgid "%s is not a valid context" msgstr "%s není platný kontext" -#: src/selinux.c:324 +#: src/selinux.c:330 msgid "failed to get old_context" msgstr "nepodařilo se získat starý kontext" -#: src/selinux.c:330 +#: src/selinux.c:336 msgid "unable to determine enforcing mode." msgstr "nepodařilo se určit režim vynucování SELinuxu." -#: src/selinux.c:347 +#: src/selinux.c:353 #, c-format msgid "unable to set tty context to %s" msgstr "nepodařilo se nastavit kontext TTY na %s" -#: src/selinux.c:386 +#: src/selinux.c:392 #, c-format msgid "unable to set exec context to %s" msgstr "nepodařilo se nastavit kontext pro spuštění na %s" -#: src/selinux.c:393 +#: src/selinux.c:399 #, c-format msgid "unable to set key creation context to %s" msgstr "nepodařilo se nastavit kontext pro vytváření klíčů na %s" -#: src/sesh.c:80 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "je třeba alespoň jeden argument" -#: src/sesh.c:109 +#: src/sesh.c:106 +#, c-format +msgid "invalid file descriptor number: %s" +msgstr "neplatné číslo deskriptoru souboru: %s" + +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "%s nelze spustit jako přihlašovací shell" -#: src/sesh.c:114 src/sudo.c:1186 +#: src/sesh.c:125 src/sudo.c:1274 #, c-format msgid "unable to execute %s" msgstr "%s nelze spustit" -#: src/signal.c:77 +#: src/signal.c:68 #, c-format msgid "unable to save handler for signal %d" msgstr "obsluhu signálu %d nelze uložit" -#: src/solaris.c:88 +#: src/solaris.c:76 msgid "resource control limit has been reached" msgstr "omezení z řízení zdrojů bylo dosaženo" -#: src/solaris.c:91 +#: src/solaris.c:79 #, c-format msgid "user \"%s\" is not a member of project \"%s\"" msgstr "uživatel „%s“ není členem projektu „%s“" -#: src/solaris.c:95 +#: src/solaris.c:83 msgid "the invoking task is final" msgstr "volaná úloha je konečná" -#: src/solaris.c:98 +#: src/solaris.c:86 #, c-format msgid "could not join project \"%s\"" msgstr "nebylo možné se připojit k projektu „%s“" -#: src/solaris.c:103 +#: src/solaris.c:91 #, c-format msgid "no resource pool accepting default bindings exists for project \"%s\"" msgstr "pro projekt „%s“ neexistuje žádná množina zdrojů přijímající výchozí vazbu" -#: src/solaris.c:107 +#: src/solaris.c:95 #, c-format msgid "specified resource pool does not exist for project \"%s\"" msgstr "pro projekt „%s“ neexistuje zadaná množina zdrojů" -#: src/solaris.c:111 +#: src/solaris.c:99 #, c-format msgid "could not bind to default resource pool for project \"%s\"" msgstr "u projektu „%s“ se nebylo možné navázat na výchozí množinu zdrojů" -#: src/solaris.c:117 +#: src/solaris.c:105 #, c-format msgid "setproject failed for project \"%s\"" msgstr "volání setproject selhalo u projektu „%s“" -#: src/solaris.c:119 +#: src/solaris.c:107 #, c-format msgid "warning, resource control assignment failed for project \"%s\"" msgstr "pozor, nepodařilo se přiřadit řízení zdrojů projektu „%s“" -#: src/sudo.c:209 +#: src/sudo.c:212 #, c-format msgid "Sudo version %s\n" msgstr "Sudo verze %s\n" -#: src/sudo.c:211 +#: src/sudo.c:214 #, c-format msgid "Configure options: %s\n" msgstr "Přepínače configure: %s\n" -#: src/sudo.c:216 +#: src/sudo.c:222 msgid "fatal error, unable to load plugins" msgstr "nepřekonatelná chyba, moduly nelze zavést" -#: src/sudo.c:224 +#: src/sudo.c:230 msgid "unable to initialize policy plugin" msgstr "modul s politikami nelze inicializovat" -#: src/sudo.c:280 +#: src/sudo.c:276 +msgid "plugin did not return a command to execute" +msgstr "modul nevrátil příkaz k provedení" + +#: src/sudo.c:292 #, c-format msgid "error initializing I/O plugin %s" msgstr "chyba při inicializaci vstupně-výstupního modulu %s" -#: src/sudo.c:306 +#: src/sudo.c:318 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "neočekávaný režim programu sudo 0x%x" -#: src/sudo.c:426 +#: src/sudo.c:461 msgid "unable to get group vector" msgstr "nelze získat vektor skupin" -#: src/sudo.c:478 +#: src/sudo.c:522 #, c-format msgid "unknown uid %u: who are you?" msgstr "neznámé UID %u: kdo jsi?" -#: src/sudo.c:785 +#: src/sudo.c:859 #, 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:788 +#: src/sudo.c:862 #, 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:794 +#: src/sudo.c:868 #, 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:923 +#: src/sudo.c:999 #, c-format msgid "unknown login class %s" msgstr "neznámá přihlašovací třída %s" -#: src/sudo.c:936 +#: src/sudo.c:1012 msgid "unable to set user context" msgstr "nelze nastavit kontext uživatele" -#: src/sudo.c:950 +#: src/sudo.c:1026 msgid "unable to set supplementary group IDs" msgstr "nelze nastavit ID doplňkových skupin" -#: src/sudo.c:957 +#: src/sudo.c:1033 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "efektivní GID nelze nastavit na %u" -#: src/sudo.c:963 +#: src/sudo.c:1039 #, c-format msgid "unable to set gid to runas gid %u" msgstr "GID nelze nastavit na %u" -#: src/sudo.c:970 +#: src/sudo.c:1046 msgid "unable to set process priority" msgstr "nelze nastavit prioritu procesu" -#: src/sudo.c:978 +#: src/sudo.c:1054 #, c-format msgid "unable to change root to %s" msgstr "kořenový adresář nelze změnit na %s" -#: src/sudo.c:991 src/sudo.c:997 src/sudo.c:1003 +#: src/sudo.c:1067 src/sudo.c:1073 src/sudo.c:1080 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "nelze změnit UID na (%u, %u)" -#: src/sudo.c:1021 +#: src/sudo.c:1098 #, c-format msgid "unable to change directory to %s" msgstr "pracovní adresář nelze změnit na %s" -#: src/sudo.c:1082 +#: src/sudo.c:1156 #, c-format msgid "unexpected child termination condition: %d" msgstr "neočekávaný důvod ukončení potomka: %d" -#: src/sudo.c:1214 +#: src/sudo.c:1302 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "modulu s politikami %s chybí metoda „check_policy“" -#: src/sudo.c:1232 +#: src/sudo.c:1320 #, 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:1249 +#: src/sudo.c:1337 #, 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:1264 +#: src/sudo.c:1352 #, 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_edit.c:203 src/sudo_edit.c:294 +#: src/sudo_edit.c:181 +msgid "unable to restore current working directory" +msgstr "současný pracovní adresář nelze obnovit" + +#: src/sudo_edit.c:526 src/sudo_edit.c:630 #, c-format msgid "%s: not a regular file" msgstr "%s: nejedná se o obyčejný soubor" -#: src/sudo_edit.c:230 src/sudo_edit.c:332 +#: src/sudo_edit.c:533 +#, c-format +msgid "%s: editing symbolic links is not permitted" +msgstr "%s: úprava symbolických odkazů není dovolena" + +#: src/sudo_edit.c:536 +#, c-format +msgid "%s: editing files in a writable directory is not permitted" +msgstr "%s: úprava souborů v adresáři, do kterého lze zapisovat, není dovolena" + +#: src/sudo_edit.c:567 src/sudo_edit.c:669 #, c-format msgid "%s: short write" msgstr "%s: krátký zápis" -#: src/sudo_edit.c:295 +#: src/sudo_edit.c:631 #, c-format msgid "%s left unmodified" msgstr "%s ponechán nezměněn" -#: src/sudo_edit.c:308 src/sudo_edit.c:483 +#: src/sudo_edit.c:644 src/sudo_edit.c:830 #, c-format msgid "%s unchanged" msgstr "%s nezměněn" -#: src/sudo_edit.c:321 src/sudo_edit.c:343 +#: src/sudo_edit.c:658 src/sudo_edit.c:680 #, c-format msgid "unable to write to %s" msgstr "do %s nelze zapsat" -#: src/sudo_edit.c:322 src/sudo_edit.c:341 src/sudo_edit.c:344 -#: src/sudo_edit.c:508 src/sudo_edit.c:512 +#: src/sudo_edit.c:659 src/sudo_edit.c:678 src/sudo_edit.c:681 +#: src/sudo_edit.c:855 src/sudo_edit.c:859 #, c-format msgid "contents of edit session left in %s" msgstr "obsah relace s úpravami ponechán v %s" -#: src/sudo_edit.c:340 +#: src/sudo_edit.c:677 msgid "unable to read temporary file" msgstr "nelze přečíst dočasný soubor" -#: src/sudo_edit.c:417 +#: src/sudo_edit.c:760 msgid "sesh: internal error: odd number of paths" msgstr "sesh: vnitřní chyba: lichý počet cest" -#: src/sudo_edit.c:419 +#: src/sudo_edit.c:762 msgid "sesh: unable to create temporary files" msgstr "sesh: nelze vytvořit dočasné soubory" -#: src/sudo_edit.c:421 src/sudo_edit.c:515 +#: src/sudo_edit.c:764 src/sudo_edit.c:862 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: neznámá chyba %d" -#: src/sudo_edit.c:507 +#: src/sudo_edit.c:854 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:511 +#: src/sudo_edit.c:858 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:554 +#: src/sudo_edit.c:901 #, c-format msgid "unable to change uid to root (%u)" msgstr "UID nelze změnit na roota (%u)" -#: src/sudo_edit.c:571 +#: src/sudo_edit.c:918 msgid "plugin error: missing file list for sudoedit" msgstr "chyba modulu: programu sudoedit chybí seznam souborů" -#: src/tgetpass.c:90 +#: src/sudo_edit.c:959 src/sudo_edit.c:972 +msgid "unable to read the clock" +msgstr "nelze přečíst hodiny" + +#: src/tgetpass.c:107 msgid "no tty present and no askpass program specified" msgstr "chybí terminál a program pro dotazování se na heslo nebyl zadán" -#: src/tgetpass.c:99 +#: src/tgetpass.c:116 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:232 +#: src/tgetpass.c:276 #, c-format msgid "unable to set gid to %u" msgstr "GID nelze nastavit na %u" -#: src/tgetpass.c:236 +#: src/tgetpass.c:280 #, c-format msgid "unable to set uid to %u" msgstr "UID nelze nastavit na %u" -#: src/tgetpass.c:241 +#: src/tgetpass.c:285 #, c-format msgid "unable to run %s" msgstr "%s nelze spustit" -#: src/utmp.c:278 +#: src/utmp.c:266 msgid "unable to save stdin" msgstr "standardní vstup nelze uložit" -#: src/utmp.c:280 +#: src/utmp.c:268 msgid "unable to dup2 stdin" msgstr "standardní vstup nelze zduplikovat voláním dup2" -#: src/utmp.c:283 +#: src/utmp.c:271 msgid "unable to restore stdin" msgstr "standardní vstup nelze obnovit" +#~ msgid "unable to set terminal to raw mode" +#~ msgstr "terminál nelze přepnout do syrového režimu" + +#~ msgid "internal error, tried allocate zero bytes" +#~ msgstr "vnitřní chyba, pokus alokovat nula bajtů" + +#~ msgid "unable to open socket" +#~ msgstr "nelze otevřít socket" + #~ msgid "%s: %s: %s\n" #~ msgstr "%s: %s: %s\n" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/po/da.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/po/da.mo differ diff -Nru sudo-1.8.12/po/da.po sudo-1.8.16/po/da.po --- sudo-1.8.12/po/da.po 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/po/da.po 2015-10-31 23:35:24.000000000 +0000 @@ -1,6 +1,6 @@ # Danish translation of sudo. # This file is put in the public domain. -# Joe Hansen , 2011, 2012, 2013, 2014. +# Joe Hansen , 2011, 2012, 2013, 2014, 2015. # # audit -> overvågning # overflow -> overløb @@ -11,10 +11,10 @@ # msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.12b1\n" +"Project-Id-Version: sudo 1.8.15rc3\n" "Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-10-27 12:35-0600\n" -"PO-Revision-Date: 2014-11-13 23:06+0100\n" +"POT-Creation-Date: 2015-10-24 06:26-0600\n" +"PO-Revision-Date: 2015-10-31 23:06+0100\n" "Last-Translator: Joe Hansen \n" "Language-Team: Danish \n" "Language: da\n" @@ -22,298 +22,313 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: lib/util/aix.c:92 lib/util/aix.c:151 +#: lib/util/aix.c:85 lib/util/aix.c:155 msgid "unable to open userdb" msgstr "kan ikke åbne userdb" -#: lib/util/aix.c:156 +#: lib/util/aix.c:160 #, c-format msgid "unable to switch to registry \"%s\" for %s" msgstr "kan ikke skifte til register »%s« for %s" -#: lib/util/aix.c:175 +#: lib/util/aix.c:185 msgid "unable to restore registry" msgstr "kan ikke gendanne register" -#: lib/util/alloc.c:68 lib/util/alloc.c:85 lib/util/alloc.c:106 -#: lib/util/alloc.c:128 lib/util/alloc.c:147 lib/util/alloc.c:170 -msgid "internal error, tried allocate zero bytes" -msgstr "intern fejl, forsøgte at allokere nul byte" - -#: lib/util/alloc.c:87 lib/util/alloc.c:109 lib/util/alloc.c:149 -#: lib/util/alloc.c:172 src/net_ifs.c:174 src/net_ifs.c:191 src/net_ifs.c:325 -#, c-format -msgid "internal error, %s overflow" -msgstr "intern fejl, %s-overløb" - -#: lib/util/gidlist.c:78 src/load_plugins.c:61 src/load_plugins.c:74 -#: src/sudo.c:572 src/sudo.c:591 src/sudo.c:618 src/sudo.c:627 src/sudo.c:636 -#: src/sudo.c:653 src/sudo.c:700 src/sudo.c:710 +#: lib/util/aix.c:204 lib/util/gidlist.c:64 lib/util/gidlist.c:74 +#: lib/util/sudo_conf.c:185 lib/util/sudo_conf.c:265 lib/util/sudo_conf.c:342 +#: lib/util/sudo_conf.c:544 src/conversation.c:75 src/exec.c:863 +#: src/exec_common.c:96 src/exec_common.c:108 src/exec_common.c:115 +#: src/exec_pty.c:684 src/exec_pty.c:692 src/load_plugins.c:52 +#: src/load_plugins.c:65 src/load_plugins.c:208 src/load_plugins.c:231 +#: src/load_plugins.c:296 src/load_plugins.c:311 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:414 src/sesh.c:102 +#: src/sudo.c:182 src/sudo.c:371 src/sudo.c:390 src/sudo.c:454 src/sudo.c:608 +#: src/sudo.c:627 src/sudo.c:654 src/sudo.c:663 src/sudo.c:672 src/sudo.c:689 +#: src/sudo.c:746 src/sudo.c:756 src/sudo.c:780 src/sudo.c:1160 +#: src/sudo.c:1162 src/sudo.c:1168 src/sudo.c:1176 src/sudo_edit.c:151 +#: src/sudo_edit.c:602 src/sudo_edit.c:699 src/sudo_edit.c:811 +#: src/sudo_edit.c:831 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/util/strsignal.c:50 +#: lib/util/aix.c:204 lib/util/gidlist.c:64 lib/util/sudo_conf.c:185 +#: lib/util/sudo_conf.c:265 lib/util/sudo_conf.c:342 lib/util/sudo_conf.c:544 +#: src/conversation.c:76 src/exec.c:863 src/exec_common.c:96 +#: src/exec_common.c:108 src/exec_common.c:115 src/exec_pty.c:684 +#: src/exec_pty.c:692 src/load_plugins.c:208 src/load_plugins.c:231 +#: src/load_plugins.c:296 src/load_plugins.c:311 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:414 src/sesh.c:102 +#: src/sudo.c:182 src/sudo.c:371 src/sudo.c:390 src/sudo.c:454 src/sudo.c:780 +#: src/sudo.c:1160 src/sudo.c:1162 src/sudo.c:1168 src/sudo.c:1176 +#: src/sudo_edit.c:151 src/sudo_edit.c:602 src/sudo_edit.c:699 +#: src/sudo_edit.c:811 src/sudo_edit.c:831 +msgid "unable to allocate memory" +msgstr "kunne ikke allokere hukommelse" + +#: lib/util/strsignal.c:48 msgid "Unknown signal" msgstr "ukendt signal" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:65 lib/util/strtonum.c:183 +#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:48 +#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "ugyldig værdi" -#: lib/util/strtoid.c:90 lib/util/strtoid.c:118 lib/util/strtomode.c:61 -#: lib/util/strtonum.c:68 lib/util/strtonum.c:195 +#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:54 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "værdi for stor" -#: lib/util/strtoid.c:96 lib/util/strtomode.c:61 lib/util/strtonum.c:68 -#: lib/util/strtonum.c:189 +#: lib/util/strtoid.c:89 lib/util/strtomode.c:54 lib/util/strtonum.c:61 +#: lib/util/strtonum.c:182 msgid "value too small" msgstr "værdi for lille" -#: lib/util/sudo_conf.c:181 +#: lib/util/sudo_conf.c:198 #, c-format msgid "invalid Path value `%s' in %s, line %u" msgstr "ugyldig stiværdi »%s« i %s, linje %u" -#: lib/util/sudo_conf.c:335 lib/util/sudo_conf.c:388 +#: lib/util/sudo_conf.c:364 lib/util/sudo_conf.c:417 #, c-format msgid "invalid value for %s `%s' in %s, line %u" msgstr "ugyldig værdi for %s »%s« i %s, linje %u" -#: lib/util/sudo_conf.c:356 +#: lib/util/sudo_conf.c:385 #, c-format msgid "unsupported group source `%s' in %s, line %u" msgstr "ikke understøttet gruppekilde »%s« i %s, linje %u" -#: lib/util/sudo_conf.c:372 +#: lib/util/sudo_conf.c:401 #, c-format msgid "invalid max groups `%s' in %s, line %u" msgstr "ugyldigt maks. for grupper »%s« i %s, linje %u" -#: lib/util/sudo_conf.c:522 +#: lib/util/sudo_conf.c:560 #, c-format msgid "unable to stat %s" msgstr "kan ikke køre stat %s" -#: lib/util/sudo_conf.c:525 +#: lib/util/sudo_conf.c:563 #, c-format msgid "%s is not a regular file" msgstr "%s er ikke en regulær fil" -#: lib/util/sudo_conf.c:528 +#: lib/util/sudo_conf.c:566 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s er ejet af uid %u, burde være %u" -#: lib/util/sudo_conf.c:532 +#: lib/util/sudo_conf.c:570 #, c-format msgid "%s is world writable" msgstr "%s er skrivbar for alle" -#: lib/util/sudo_conf.c:535 +#: lib/util/sudo_conf.c:573 #, c-format msgid "%s is group writable" msgstr "%s er skrivbar for gruppe" -#: lib/util/sudo_conf.c:545 src/selinux.c:196 src/selinux.c:209 src/sudo.c:341 +#: lib/util/sudo_conf.c:583 src/selinux.c:199 src/selinux.c:212 src/sudo.c:340 #, c-format msgid "unable to open %s" msgstr "kan ikke åbne %s" -#: src/exec.c:123 src/exec.c:128 src/exec.c:423 src/exec.c:425 src/exec.c:427 -#: src/exec.c:429 src/exec.c:431 src/exec.c:433 src/exec.c:436 src/exec.c:453 -#: src/exec.c:455 src/exec.c:457 src/exec.c:605 src/exec.c:800 -#: src/exec_pty.c:480 src/exec_pty.c:736 src/exec_pty.c:806 src/exec_pty.c:808 -#: src/exec_pty.c:820 src/exec_pty.c:1308 src/exec_pty.c:1310 -#: src/exec_pty.c:1315 src/exec_pty.c:1317 src/exec_pty.c:1331 -#: src/exec_pty.c:1342 src/exec_pty.c:1344 src/exec_pty.c:1346 -#: src/exec_pty.c:1348 src/exec_pty.c:1350 src/exec_pty.c:1352 -#: src/exec_pty.c:1354 src/signal.c:156 +#: src/exec.c:114 src/exec.c:116 src/exec.c:121 src/exec.c:409 src/exec.c:411 +#: src/exec.c:413 src/exec.c:415 src/exec.c:417 src/exec.c:419 src/exec.c:422 +#: src/exec.c:438 src/exec.c:440 src/exec.c:595 src/exec.c:790 +#: src/exec_pty.c:466 src/exec_pty.c:722 src/exec_pty.c:792 src/exec_pty.c:794 +#: src/exec_pty.c:806 src/exec_pty.c:808 src/exec_pty.c:1285 +#: src/exec_pty.c:1287 src/exec_pty.c:1292 src/exec_pty.c:1294 +#: src/exec_pty.c:1308 src/exec_pty.c:1319 src/exec_pty.c:1321 +#: src/exec_pty.c:1323 src/exec_pty.c:1325 src/exec_pty.c:1327 +#: src/exec_pty.c:1329 src/exec_pty.c:1331 src/signal.c:147 #, c-format msgid "unable to set handler for signal %d" msgstr "kan ikke angive håndtering for signal %d" -#: src/exec.c:135 src/exec_pty.c:845 -msgid "policy plugin failed session initialization" -msgstr "udvidelsesmodul for politik mislykkedes i sessionsinitialisering" - -#: src/exec.c:140 src/exec_pty.c:861 src/exec_pty.c:1392 src/tgetpass.c:221 +#: src/exec.c:126 src/exec_pty.c:838 src/exec_pty.c:1369 src/tgetpass.c:265 msgid "unable to fork" msgstr "kunne ikke forgrene" -#: src/exec.c:318 src/exec.c:326 src/exec.c:877 src/exec_pty.c:604 -#: src/exec_pty.c:609 src/exec_pty.c:667 src/exec_pty.c:674 src/exec_pty.c:965 -#: src/exec_pty.c:975 src/exec_pty.c:1020 src/exec_pty.c:1027 -#: src/exec_pty.c:1457 src/exec_pty.c:1464 src/exec_pty.c:1471 +#: src/exec.c:304 src/exec.c:312 src/exec.c:868 src/exec_pty.c:604 +#: src/exec_pty.c:611 src/exec_pty.c:654 src/exec_pty.c:659 src/exec_pty.c:942 +#: src/exec_pty.c:952 src/exec_pty.c:997 src/exec_pty.c:1004 +#: src/exec_pty.c:1434 src/exec_pty.c:1441 src/exec_pty.c:1448 msgid "unable to add event to queue" msgstr "kan ikke tilføje hændelse til kø" -#: src/exec.c:406 +#: src/exec.c:392 msgid "unable to create sockets" msgstr "kunne ikke oprette sokler" -#: src/exec.c:502 +#: src/exec.c:447 +msgid "policy plugin failed session initialization" +msgstr "udvidelsesmodul for politik mislykkedes i sessionsinitialisering" + +#: src/exec.c:492 msgid "error in event loop" msgstr "fejl i hændelsesloop" -#: src/exec.c:520 +#: src/exec.c:510 msgid "unable to restore tty label" msgstr "kunne ikke gendanne tty-etiket" -#: src/exec.c:613 src/exec_pty.c:514 src/signal.c:95 +#: src/exec.c:603 src/exec_pty.c:498 src/signal.c:86 #, c-format msgid "unable to restore handler for signal %d" msgstr "kan ikke gendanne håndtering for signal %d" -#: src/exec.c:731 src/exec_pty.c:1199 +#: src/exec.c:721 src/exec_pty.c:1176 msgid "error reading from signal pipe" msgstr "fejl under læsning fra signaldatakanal" -#: src/exec_common.c:73 +#: src/exec_common.c:64 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "kan ikke fjerne PRIV_PROC_EXEC fra PRIV_LIMIT" -#: src/exec_pty.c:200 +#: src/exec_pty.c:188 msgid "unable to allocate pty" msgstr "kunne ikke allokere pty" -#: src/exec_pty.c:780 src/exec_pty.c:789 src/exec_pty.c:797 -#: src/exec_pty.c:1300 src/exec_pty.c:1389 src/signal.c:137 src/tgetpass.c:218 +#: src/exec_pty.c:766 src/exec_pty.c:775 src/exec_pty.c:783 +#: src/exec_pty.c:1277 src/exec_pty.c:1366 src/signal.c:128 src/tgetpass.c:261 msgid "unable to create pipe" msgstr "kunne ikke oprette datakanal (pipe)" -#: src/exec_pty.c:836 -msgid "unable to set terminal to raw mode" -msgstr "kunne ikke angive terminal til tilstanden rå (raw)" - -#: src/exec_pty.c:1232 +#: src/exec_pty.c:1209 msgid "error reading from pipe" msgstr "fejl ved læsning fra datakanal" -#: src/exec_pty.c:1257 +#: src/exec_pty.c:1234 msgid "error reading from socketpair" msgstr "fejl ved læsning fra socketpair" -#: src/exec_pty.c:1266 +#: src/exec_pty.c:1243 #, c-format msgid "unexpected reply type on backchannel: %d" msgstr "uventet svartype på bagkanal (backchannel): %d" -#: src/exec_pty.c:1368 +#: src/exec_pty.c:1345 msgid "unable to set controlling tty" msgstr "kunne ikke angive kontrollerende tty" -#: src/load_plugins.c:59 src/load_plugins.c:72 src/load_plugins.c:89 -#: src/load_plugins.c:142 src/load_plugins.c:148 src/load_plugins.c:154 -#: src/load_plugins.c:195 src/load_plugins.c:202 src/load_plugins.c:209 -#: src/load_plugins.c:215 +#: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:80 +#: src/load_plugins.c:110 src/load_plugins.c:116 src/load_plugins.c:122 +#: src/load_plugins.c:163 src/load_plugins.c:171 src/load_plugins.c:178 +#: src/load_plugins.c:184 #, c-format msgid "error in %s, line %d while loading plugin `%s'" msgstr "fejl i %s, linje %d under indlæsning af udvidelsesmodulet »%s«" -#: src/load_plugins.c:91 +#: src/load_plugins.c:82 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" -#: src/load_plugins.c:150 +#: src/load_plugins.c:118 #, c-format msgid "%s must be owned by uid %d" msgstr "%s skal være ejet af uid %d" # engelsk fejl be dobbelt? -#: src/load_plugins.c:156 +#: src/load_plugins.c:124 #, c-format msgid "%s must be only be writable by owner" msgstr "%s må kun være skrivbar for ejeren" -#: src/load_plugins.c:197 +#: src/load_plugins.c:165 #, c-format msgid "unable to load %s: %s" msgstr "kunne ikke indlæse %s: %s" -#: src/load_plugins.c:204 +#: src/load_plugins.c:173 #, c-format msgid "unable to find symbol `%s' in %s" msgstr "kunne ikke finde symbol »%s« i %s" -#: src/load_plugins.c:211 +#: src/load_plugins.c:180 #, c-format msgid "unknown policy type %d found in %s" msgstr "ukendt politiktype %d fundet i %s" -#: src/load_plugins.c:217 +#: src/load_plugins.c:186 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "inkompatibelt udvidelsesmodul for hovedversion %d (forventede %d) fundet i %s" -#: src/load_plugins.c:226 +#: src/load_plugins.c:195 #, c-format msgid "ignoring policy plugin `%s' in %s, line %d" msgstr "ignorerer politikudvidelsesmodul »%s« i %s, linje %d" -#: src/load_plugins.c:228 +#: src/load_plugins.c:197 msgid "only a single policy plugin may be specified" msgstr "kun et udvidelsesmodul for politik må være angivet" -#: src/load_plugins.c:231 +#: src/load_plugins.c:200 #, c-format msgid "ignoring duplicate policy plugin `%s' in %s, line %d" msgstr "ignorerer duplikat politikudvidelsesmodul »%s« i %s, linje %d" -#: src/load_plugins.c:249 +#: src/load_plugins.c:221 #, c-format msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" msgstr "ignorerer duplikat I/O-udvidelsesmodul »%s« i %s, linje %d" -#: src/load_plugins.c:338 +#: src/load_plugins.c:324 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "politikudvidelsesmodulet %s inkluderer ikke en metode for check_policy" -#: src/net_ifs.c:236 -msgid "unable to open socket" -msgstr "kunne ikke åbne sokkel" +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:449 +#, c-format +msgid "internal error, %s overflow" +msgstr "intern fejl, %s-overløb" -#: src/parse_args.c:241 +#: src/parse_args.c:239 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "argumentet for -C skal være et tal større end eller lig 3" -#: src/parse_args.c:403 +#: src/parse_args.c:406 msgid "you may not specify both the `-i' and `-s' options" msgstr "du kan ikke samtidig angive tilvalgene »-i« og »-s«" -#: src/parse_args.c:407 +#: src/parse_args.c:410 msgid "you may not specify both the `-i' and `-E' options" msgstr "du kan ikke samtidig angive tilvalgende »-i« og »-E«" -#: src/parse_args.c:417 +#: src/parse_args.c:420 msgid "the `-E' option is not valid in edit mode" msgstr "tilvalget »-E« er ikke gyldigt i redigeringstilstand" -#: src/parse_args.c:419 +#: src/parse_args.c:422 msgid "you may not specify environment variables in edit mode" msgstr "du må ikke angive miljøvariabler i redigeringstilstand" -#: src/parse_args.c:427 +#: src/parse_args.c:430 msgid "the `-U' option may only be used with the `-l' option" msgstr "tilvalget »-U« må kun bruges med tilvalget »-l«" -#: src/parse_args.c:431 +#: src/parse_args.c:434 msgid "the `-A' and `-S' options may not be used together" msgstr "tilvalgene »-A« og »-S« må ikke bruges sammen" -#: src/parse_args.c:497 +#: src/parse_args.c:504 msgid "sudoedit is not supported on this platform" msgstr "sudoedit er ikke understøttet på denne platform" -#: src/parse_args.c:570 +#: src/parse_args.c:577 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Kun et af tilvalgene -e, -h, -i, -K, -l, -s, -v eller -V må angives" -#: src/parse_args.c:584 +#: src/parse_args.c:591 #, c-format msgid "" "%s - edit files as another user\n" @@ -322,7 +337,7 @@ "%s - rediger filer som en anden bruger\n" "\n" -#: src/parse_args.c:586 +#: src/parse_args.c:593 #, c-format msgid "" "%s - execute a command as another user\n" @@ -331,7 +346,7 @@ "%s - udfør en kommando som en anden bruger\n" "\n" -#: src/parse_args.c:591 +#: src/parse_args.c:598 #, c-format msgid "" "\n" @@ -340,484 +355,511 @@ "\n" "Tilvalg:\n" -#: src/parse_args.c:593 +#: src/parse_args.c:600 msgid "use a helper program for password prompting" msgstr "brug et hjælpeprogram for indhentelse af adgangskode" -#: src/parse_args.c:596 +#: src/parse_args.c:603 msgid "use specified BSD authentication type" msgstr "brug angivet BSD-godkendelsestype" -#: src/parse_args.c:599 +#: src/parse_args.c:606 msgid "run command in the background" msgstr "kør kommando i baggrunden" -#: src/parse_args.c:601 +#: src/parse_args.c:608 msgid "close all file descriptors >= num" msgstr "luk alle filbeskrivelser >= num" -#: src/parse_args.c:604 +#: src/parse_args.c:611 msgid "run command with the specified BSD login class" msgstr "kør kommando med angivet BSD-logindklasse" -#: src/parse_args.c:607 +#: src/parse_args.c:614 msgid "preserve user environment when running command" msgstr "bevar brugermiljø når kommando udføres" -#: src/parse_args.c:609 +#: src/parse_args.c:616 msgid "edit files instead of running a command" msgstr "rediger filer i stedet for at køre en kommando" -#: src/parse_args.c:611 +#: src/parse_args.c:618 msgid "run command as the specified group name or ID" msgstr "udfør kommando som det angivne gruppenavn eller ID" -#: src/parse_args.c:613 +#: src/parse_args.c:620 msgid "set HOME variable to target user's home dir" msgstr "angiv HOME-variabel til målbrugers hjemmemappe" -#: src/parse_args.c:615 +#: src/parse_args.c:622 msgid "display help message and exit" msgstr "vis hjælpetekst og afslut" -#: src/parse_args.c:617 +#: src/parse_args.c:624 msgid "run command on host (if supported by plugin)" msgstr "kør kommando på vært (hvis understøttet af udvidelsesmodul)" -#: src/parse_args.c:619 +#: src/parse_args.c:626 msgid "run login shell as the target user; a command may also be specified" msgstr "kør en logindskal som målbrugeren; en kommando kan også angives" -#: src/parse_args.c:621 +#: src/parse_args.c:628 msgid "remove timestamp file completely" msgstr "fjern tidsstempelfil fuldstændig" -#: src/parse_args.c:623 +#: src/parse_args.c:630 msgid "invalidate timestamp file" msgstr "ugyldiggør tidsstempelfil" -#: src/parse_args.c:625 +#: src/parse_args.c:632 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "vis brugers privilegier eller kontroller en specifik kommando; brug to gange for længere format" -#: src/parse_args.c:627 +#: src/parse_args.c:634 msgid "non-interactive mode, no prompts are used" msgstr "ikkeinteraktiv tilstand, vil ikke spørge bruger" -#: src/parse_args.c:629 +#: src/parse_args.c:636 msgid "preserve group vector instead of setting to target's" msgstr "bevar gruppevektor i stedet for at sætte til målets" -#: src/parse_args.c:631 +#: src/parse_args.c:638 msgid "use the specified password prompt" msgstr "brug angivet logind for adgangskode" -#: src/parse_args.c:634 +#: src/parse_args.c:641 msgid "create SELinux security context with specified role" msgstr "opret SELinux-sikkerhedskontekt med angivet rolle" -#: src/parse_args.c:637 +#: src/parse_args.c:644 msgid "read password from standard input" msgstr "læs adgangskode fra standardinddata" -#: src/parse_args.c:639 +#: src/parse_args.c:646 msgid "run shell as the target user; a command may also be specified" msgstr "kør skal som målbruger; en kommando kan også specificeres" -#: src/parse_args.c:642 +#: src/parse_args.c:649 msgid "create SELinux security context with specified type" msgstr "opret SELinux-sikkerhedskontekt med angivet type" -#: src/parse_args.c:645 +#: src/parse_args.c:652 msgid "in list mode, display privileges for user" msgstr "i vis-tilstand, vis privilegier for bruger" -#: src/parse_args.c:647 +#: src/parse_args.c:654 msgid "run command (or edit file) as specified user name or ID" msgstr "kør kommando (eller rediger fil) som angivet brugernavn eller ID" -#: src/parse_args.c:649 +#: src/parse_args.c:656 msgid "display version information and exit" msgstr "vis versionsinformation og afslut" -#: src/parse_args.c:651 +#: src/parse_args.c:658 msgid "update user's timestamp without running a command" msgstr "opdater brugers tidsstempel uden at køre en kommando" -#: src/parse_args.c:653 +#: src/parse_args.c:660 msgid "stop processing command line arguments" msgstr "stop behandling af parametre for kommandolinjen" -#: src/selinux.c:77 +#: src/selinux.c:78 msgid "unable to open audit system" msgstr "kunne ikke åbne overvågningssystem" -#: src/selinux.c:85 +#: src/selinux.c:88 msgid "unable to send audit message" msgstr "kunne ikke sende overvågningsbesked" -#: src/selinux.c:113 +#: src/selinux.c:116 #, c-format msgid "unable to fgetfilecon %s" msgstr "kunne ikke fgetfilecon %s" -#: src/selinux.c:118 +#: src/selinux.c:121 #, c-format msgid "%s changed labels" msgstr "%s ændrede etiketter" -#: src/selinux.c:123 +#: src/selinux.c:126 #, c-format msgid "unable to restore context for %s" msgstr "kan ikke gendanne kontekst for %s" -#: src/selinux.c:163 +#: src/selinux.c:166 #, c-format msgid "unable to open %s, not relabeling tty" msgstr "kan ikke åbne %s, giver ikke ny etiket til tty" -#: src/selinux.c:172 +#: src/selinux.c:175 msgid "unable to get current tty context, not relabeling tty" msgstr "kan ikke indhente aktuel tty-kontekst, giver ikke ny etiket til tty" -#: src/selinux.c:179 +#: src/selinux.c:182 msgid "unable to get new tty context, not relabeling tty" msgstr "kan ikke indhente ny tty-kontekst, giver ikke nyt etiket til tty" -#: src/selinux.c:186 +#: src/selinux.c:189 msgid "unable to set new tty context" msgstr "kan ikke angive ny tty-kontekst" -#: src/selinux.c:252 +#: src/selinux.c:255 #, c-format msgid "you must specify a role for type %s" msgstr "du skal angive en rolle for type %s" -#: src/selinux.c:258 +#: src/selinux.c:261 #, c-format msgid "unable to get default type for role %s" msgstr "kan ikke indhente standardtype for rolle %s" -#: src/selinux.c:276 +#: src/selinux.c:279 #, c-format msgid "failed to set new role %s" msgstr "kunne ikke angive ny rolle %s" -#: src/selinux.c:280 +#: src/selinux.c:283 #, c-format msgid "failed to set new type %s" msgstr "kunne ikke angive ny type %s" -#: src/selinux.c:289 +#: src/selinux.c:295 #, c-format msgid "%s is not a valid context" msgstr "%s er ikke en gyldig kontekst" -#: src/selinux.c:324 +#: src/selinux.c:330 msgid "failed to get old_context" msgstr "kunne ikke indhente gammel_kontekst (old_context)" -#: src/selinux.c:330 +#: src/selinux.c:336 msgid "unable to determine enforcing mode." msgstr "kunne ikke bestemme tilstanden gennemtving (enforcing)." -#: src/selinux.c:347 +#: src/selinux.c:353 #, c-format msgid "unable to set tty context to %s" msgstr "kunne ikke angive tty-kontekst for %s" -#: src/selinux.c:386 +#: src/selinux.c:392 #, c-format msgid "unable to set exec context to %s" msgstr "kunne ikke angive kørselskontekt til %s" # engelsk: mangler vist lidt info her tast eller nøgle. mon ikke det er nøgle -#: src/selinux.c:393 +#: src/selinux.c:399 #, c-format msgid "unable to set key creation context to %s" msgstr "kunne ikke angive nøgleoprettelseskontekst til %s" -#: src/sesh.c:80 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "kræver mindst et argument" -#: src/sesh.c:109 +#: src/sesh.c:107 #, c-format msgid "unable to run %s as a login shell" msgstr "kan ikke køre %s som en indlogningsskal" -#: src/sesh.c:114 src/sudo.c:1186 +#: src/sesh.c:112 src/sudo.c:1231 #, c-format msgid "unable to execute %s" msgstr "kan ikke køre %s" -#: src/signal.c:77 +#: src/signal.c:68 #, c-format msgid "unable to save handler for signal %d" msgstr "kan ikke gemme håndtering for signal %d" -#: src/solaris.c:88 +#: src/solaris.c:76 msgid "resource control limit has been reached" msgstr "grænse for ressourcekontrol er nået" -#: src/solaris.c:91 +#: src/solaris.c:79 #, c-format msgid "user \"%s\" is not a member of project \"%s\"" msgstr "bruger »%s« er ikke medlem af projektet »%s«" -#: src/solaris.c:95 +#: src/solaris.c:83 msgid "the invoking task is final" msgstr "start af opgave er færdig" -#: src/solaris.c:98 +#: src/solaris.c:86 #, c-format msgid "could not join project \"%s\"" msgstr "kunne ikke slutte til projekt »%s«" -#: src/solaris.c:103 +#: src/solaris.c:91 #, c-format msgid "no resource pool accepting default bindings exists for project \"%s\"" msgstr "ingen ressourcekø som accepterer standardbindinger findes for projekt »%s«" -#: src/solaris.c:107 +#: src/solaris.c:95 #, c-format msgid "specified resource pool does not exist for project \"%s\"" msgstr "angivet ressourcekø findes ikke for projekt »%s«" -#: src/solaris.c:111 +#: src/solaris.c:99 #, c-format msgid "could not bind to default resource pool for project \"%s\"" msgstr "kunne ikke binde til standardressourcekø for projekt »%s«" -#: src/solaris.c:117 +#: src/solaris.c:105 #, c-format msgid "setproject failed for project \"%s\"" msgstr "setproject fejlede for projekt »%s«" -#: src/solaris.c:119 +#: src/solaris.c:107 #, c-format msgid "warning, resource control assignment failed for project \"%s\"" msgstr "advarsel, ressourcekontroltildeling fejlede for projekt »%s«" -#: src/sudo.c:209 +#: src/sudo.c:193 #, c-format msgid "Sudo version %s\n" msgstr "Sudo version %s\n" -#: src/sudo.c:211 +#: src/sudo.c:195 #, c-format msgid "Configure options: %s\n" msgstr "Konfigurationsindstillinger: %s\n" -#: src/sudo.c:216 +#: src/sudo.c:203 msgid "fatal error, unable to load plugins" msgstr "fatal fejl, kan ikke indlæse udvidelsesmoduler" -#: src/sudo.c:224 +#: src/sudo.c:211 msgid "unable to initialize policy plugin" msgstr "kan ikke initialisere udvidelsesmodul for politik" -#: src/sudo.c:280 +#: src/sudo.c:267 #, c-format msgid "error initializing I/O plugin %s" msgstr "fejl under initialisering af I/O-udvidelsesmodulet %s" -#: src/sudo.c:306 +#: src/sudo.c:293 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "uventet sudo-tilstand 0x%x" -#: src/sudo.c:426 +#: src/sudo.c:434 msgid "unable to get group vector" msgstr "kan ikke indhente gruppevektor" -#: src/sudo.c:478 +#: src/sudo.c:497 #, c-format msgid "unknown uid %u: who are you?" msgstr "ukendt uid %u: hvem er du?" -#: src/sudo.c:785 +#: src/sudo.c:829 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s skal være ejet af uid %d og have setuid bit angivet" -#: src/sudo.c:788 +#: src/sudo.c:832 #, 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 "effektiv uid er ikke %d, er %s på et filsystem med indstillingen »nosuid« angivet eller et NFS-filsytsem uden administratorprivilegier (root)?" -#: src/sudo.c:794 +#: src/sudo.c:838 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "effektiv uid er ikke %d, er sudo installeret setuid root?" -#: src/sudo.c:923 +#: src/sudo.c:969 #, c-format msgid "unknown login class %s" msgstr "ukendt logindklasse %s" -#: src/sudo.c:936 +#: src/sudo.c:982 msgid "unable to set user context" msgstr "kan ikke angive brugerkontekst" -#: src/sudo.c:950 +#: src/sudo.c:996 msgid "unable to set supplementary group IDs" msgstr "kunne ikke angive supplerende gruppe-id'er" -#: src/sudo.c:957 +#: src/sudo.c:1003 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "kan ikke angive effektiv gid til runas gid %u" -#: src/sudo.c:963 +#: src/sudo.c:1009 #, c-format msgid "unable to set gid to runas gid %u" msgstr "kunne ikke angive gid til runas gid %u" -#: src/sudo.c:970 +#: src/sudo.c:1016 msgid "unable to set process priority" msgstr "kunne ikke angive procesprioritet" -#: src/sudo.c:978 +#: src/sudo.c:1024 #, c-format msgid "unable to change root to %s" msgstr "kunne ikke ændre administrator (root) til %s" -#: src/sudo.c:991 src/sudo.c:997 src/sudo.c:1003 +#: src/sudo.c:1037 src/sudo.c:1043 src/sudo.c:1050 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "kunne ikke ændre til runas uid (%u, %u)" -#: src/sudo.c:1021 +#: src/sudo.c:1068 #, c-format msgid "unable to change directory to %s" msgstr "kunne ikke ændre mappe til %s" -#: src/sudo.c:1082 +#: src/sudo.c:1126 #, c-format msgid "unexpected child termination condition: %d" msgstr "uventet underbetingelse for terminering: %d" -#: src/sudo.c:1214 +#: src/sudo.c:1259 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "politikudvidelsesmodulet %s mangler i metoden »check_policy«" -#: src/sudo.c:1232 +#: src/sudo.c:1277 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "politikudvidelsesmodul %s understøter ikke listning af privilegier" -#: src/sudo.c:1249 +#: src/sudo.c:1294 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "politikudvidelsesmodul %s understøtter ikke tilvalget -v" -#: src/sudo.c:1264 +#: src/sudo.c:1309 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "politikudvidelsesmodul %s understøtter ikke tilvalget -k/-K" -#: src/sudo_edit.c:203 src/sudo_edit.c:294 +#: src/sudo_edit.c:202 +msgid "unable to restore current working directory" +msgstr "kan ikke gendanne nuværende arbejdsmappe" + +#: src/sudo_edit.c:412 src/sudo_edit.c:516 #, c-format msgid "%s: not a regular file" msgstr "%s: ikke en regulær fil" -#: src/sudo_edit.c:230 src/sudo_edit.c:332 +#: src/sudo_edit.c:419 +#, c-format +msgid "%s: editing symbolic links is not permitted" +msgstr "%s: redigering af symbolske henvisninger er ikke tilladt" + +#: src/sudo_edit.c:422 +#, c-format +msgid "%s: editing files in a writable directory is not permitted" +msgstr "%s: redigering af filer i en skrivbar mappe er ikke tilladt" + +#: src/sudo_edit.c:453 src/sudo_edit.c:555 #, c-format msgid "%s: short write" msgstr "%s: kort skrivning" -#: src/sudo_edit.c:295 +#: src/sudo_edit.c:517 #, c-format msgid "%s left unmodified" msgstr "%s tilbage uændrede" -#: src/sudo_edit.c:308 src/sudo_edit.c:483 +#: src/sudo_edit.c:530 src/sudo_edit.c:716 #, c-format msgid "%s unchanged" msgstr "%s uændrede" -#: src/sudo_edit.c:321 src/sudo_edit.c:343 +#: src/sudo_edit.c:544 src/sudo_edit.c:566 #, c-format msgid "unable to write to %s" msgstr "kan ikke skrive til %s" -#: src/sudo_edit.c:322 src/sudo_edit.c:341 src/sudo_edit.c:344 -#: src/sudo_edit.c:508 src/sudo_edit.c:512 +#: src/sudo_edit.c:545 src/sudo_edit.c:564 src/sudo_edit.c:567 +#: src/sudo_edit.c:741 src/sudo_edit.c:745 #, c-format msgid "contents of edit session left in %s" msgstr "indhold fra redigeringssession tilbage i %s" -#: src/sudo_edit.c:340 +#: src/sudo_edit.c:563 msgid "unable to read temporary file" msgstr "kan ikke læse midlertidig fil" -#: src/sudo_edit.c:417 +#: src/sudo_edit.c:646 msgid "sesh: internal error: odd number of paths" msgstr "sesh: intern fejl: forkert antal stier" -#: src/sudo_edit.c:419 +#: src/sudo_edit.c:648 msgid "sesh: unable to create temporary files" msgstr "sesh: kan ikke oprette midlertidige filer" -#: src/sudo_edit.c:421 src/sudo_edit.c:515 +#: src/sudo_edit.c:650 src/sudo_edit.c:748 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: ukendt fejl %d" -#: src/sudo_edit.c:507 +#: src/sudo_edit.c:740 msgid "unable to copy temporary files back to their original location" msgstr "kan ikke kopiere midlertidige filer tilbage til deres originale placering" -#: src/sudo_edit.c:511 +#: src/sudo_edit.c:744 msgid "unable to copy some of the temporary files back to their original location" msgstr "kan ikke kopiere nogle af de midlertidige filer tilbage til deres originale placering" -#: src/sudo_edit.c:554 +#: src/sudo_edit.c:787 #, c-format msgid "unable to change uid to root (%u)" msgstr "kunne ikke ændre uid til root (%u)" -#: src/sudo_edit.c:571 +#: src/sudo_edit.c:804 msgid "plugin error: missing file list for sudoedit" msgstr "fejl i udvidelsesmodul: mangler filliste for sudoedit" -#: src/tgetpass.c:90 +#: src/sudo_edit.c:845 src/sudo_edit.c:858 +msgid "unable to read the clock" +msgstr "kunne ikke læse uret" + +#: src/tgetpass.c:107 msgid "no tty present and no askpass program specified" msgstr "ingen tty til stede og intet askpass-program angivet" -#: src/tgetpass.c:99 +#: src/tgetpass.c:116 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "intet askpass-program angivet, forsøg at angive SUDO_ASKPASS" -#: src/tgetpass.c:232 +#: src/tgetpass.c:276 #, c-format msgid "unable to set gid to %u" msgstr "kan ikke angive gid til %u" -#: src/tgetpass.c:236 +#: src/tgetpass.c:280 #, c-format msgid "unable to set uid to %u" msgstr "kan ikke angive uid til %u" -#: src/tgetpass.c:241 +#: src/tgetpass.c:285 #, c-format msgid "unable to run %s" msgstr "kan ikke køre %s" -#: src/utmp.c:278 +#: src/utmp.c:266 msgid "unable to save stdin" msgstr "kan ikke gemme til stdin" -#: src/utmp.c:280 +#: src/utmp.c:268 msgid "unable to dup2 stdin" msgstr "kan ikke dup2 stdin" -#: src/utmp.c:283 +#: src/utmp.c:271 msgid "unable to restore stdin" msgstr "kan ikke gendanne stdin" +#~ msgid "unable to set terminal to raw mode" +#~ msgstr "kunne ikke angive terminal til tilstanden rå (raw)" + +#~ msgid "internal error, tried allocate zero bytes" +#~ msgstr "intern fejl, forsøgte at allokere nul byte" + +#~ msgid "unable to open socket" +#~ msgstr "kunne ikke åbne sokkel" + #~ msgid "%s: %s: %s\n" #~ msgstr "%s: %s: %s\n" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/po/de.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/po/de.mo differ diff -Nru sudo-1.8.12/po/de.po sudo-1.8.16/po/de.po --- sudo-1.8.12/po/de.po 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/po/de.po 2016-03-17 16:13:10.000000000 +0000 @@ -1,314 +1,329 @@ # German translation for sudo. # This file is distributed under the same license as the sudo package. -# Jakob Kramer , 2012, 2013, 2014. -# Mario Blättermann , 2012, 2014. # +# Jakob Kramer , 2012, 2013, 2014. +# Mario Blättermann , 2012, 2014-2016. msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.12b1\n" -"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-10-27 12:35-0600\n" -"PO-Revision-Date: 2014-11-08 19:39+0100\n" +"Project-Id-Version: sudo 1.8.16b1\n" +"Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" +"POT-Creation-Date: 2016-02-19 15:48-0700\n" +"PO-Revision-Date: 2016-02-25 20:31+0100\n" "Last-Translator: Mario Blättermann \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.8.7\n" -#: lib/util/aix.c:92 lib/util/aix.c:151 +#: lib/util/aix.c:85 lib/util/aix.c:164 msgid "unable to open userdb" msgstr "Benutzerdatenbank konnte nicht geöffnet werden" -#: lib/util/aix.c:156 +#: lib/util/aix.c:219 #, c-format msgid "unable to switch to registry \"%s\" for %s" msgstr "Es konnte nicht zur Registrierungsdatenbank »%s« von %s gewechselt werden" -#: lib/util/aix.c:175 +#: lib/util/aix.c:244 msgid "unable to restore registry" msgstr "Registrierungsdatenbank konnte nicht wiederhergestellt werden" -#: lib/util/alloc.c:68 lib/util/alloc.c:85 lib/util/alloc.c:106 -#: lib/util/alloc.c:128 lib/util/alloc.c:147 lib/util/alloc.c:170 -msgid "internal error, tried allocate zero bytes" -msgstr "Interner Fehler: Es wurde versucht, 0 Bytes zuzuweisen" - -#: lib/util/alloc.c:87 lib/util/alloc.c:109 lib/util/alloc.c:149 -#: lib/util/alloc.c:172 src/net_ifs.c:174 src/net_ifs.c:191 src/net_ifs.c:325 -#, c-format -msgid "internal error, %s overflow" -msgstr "Interner Fehler: %s-Überlauf" - -#: lib/util/gidlist.c:78 src/load_plugins.c:61 src/load_plugins.c:74 -#: src/sudo.c:572 src/sudo.c:591 src/sudo.c:618 src/sudo.c:627 src/sudo.c:636 -#: src/sudo.c:653 src/sudo.c:700 src/sudo.c:710 +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/gidlist.c:74 +#: lib/util/sudo_conf.c:207 lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 +#: lib/util/sudo_conf.c:569 src/conversation.c:75 src/exec.c:863 +#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 +#: src/exec_pty.c:684 src/exec_pty.c:692 src/load_plugins.c:52 +#: src/load_plugins.c:65 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:655 src/sudo.c:665 src/sudo.c:685 src/sudo.c:704 src/sudo.c:713 +#: src/sudo.c:722 src/sudo.c:739 src/sudo.c:780 src/sudo.c:790 src/sudo.c:810 +#: src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 src/sudo.c:1492 +#: src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/util/strsignal.c:50 +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/sudo_conf.c:208 +#: lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 lib/util/sudo_conf.c:569 +#: src/conversation.c:76 src/exec.c:863 src/exec_common.c:107 +#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:684 +#: src/exec_pty.c:692 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:810 src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 +#: src/sudo.c:1492 src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 +msgid "unable to allocate memory" +msgstr "Speicher konnte nicht zugewiesen werden" + +#: lib/util/strsignal.c:48 msgid "Unknown signal" msgstr "Unbekanntes Signal" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:65 lib/util/strtonum.c:183 +#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:48 +#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "ungültiger Wert" -#: lib/util/strtoid.c:90 lib/util/strtoid.c:118 lib/util/strtomode.c:61 -#: lib/util/strtonum.c:68 lib/util/strtonum.c:195 +#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:54 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "Wert zu groß" -#: lib/util/strtoid.c:96 lib/util/strtomode.c:61 lib/util/strtonum.c:68 -#: lib/util/strtonum.c:189 +#: lib/util/strtoid.c:89 lib/util/strtomode.c:54 lib/util/strtonum.c:61 +#: lib/util/strtonum.c:182 msgid "value too small" msgstr "Wert zu klein" -#: lib/util/sudo_conf.c:181 +#: lib/util/sudo_conf.c:223 #, c-format msgid "invalid Path value `%s' in %s, line %u" msgstr "Ungültiger Pfad-Wert »%s« in %s, Zeile %u" -#: lib/util/sudo_conf.c:335 lib/util/sudo_conf.c:388 +#: lib/util/sudo_conf.c:389 lib/util/sudo_conf.c:442 #, c-format msgid "invalid value for %s `%s' in %s, line %u" msgstr "Ungültiger Wert für %s »%s« in %s, Zeile %u" -#: lib/util/sudo_conf.c:356 +#: lib/util/sudo_conf.c:410 #, c-format msgid "unsupported group source `%s' in %s, line %u" msgstr "Nicht unterstützte Gruppenquelle »%s« in %s, Zeile %u" -#: lib/util/sudo_conf.c:372 +#: lib/util/sudo_conf.c:426 #, c-format msgid "invalid max groups `%s' in %s, line %u" msgstr "Ungültige Maximalzahl an Gruppen »%s« in %s, Zeile %u" -#: lib/util/sudo_conf.c:522 +#: lib/util/sudo_conf.c:585 #, c-format msgid "unable to stat %s" -msgstr "stat konnte nicht auf %s angewandt werden" +msgstr "stat konnte nicht auf %s angewendet werden" -#: lib/util/sudo_conf.c:525 +#: lib/util/sudo_conf.c:588 #, c-format msgid "%s is not a regular file" msgstr "%s ist keine reguläre Datei" -#: lib/util/sudo_conf.c:528 +#: lib/util/sudo_conf.c:591 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s gehört Benutzer mit UID %u, sollte allerdings %u gehören" -#: lib/util/sudo_conf.c:532 +#: lib/util/sudo_conf.c:595 #, c-format msgid "%s is world writable" msgstr "%s kann von allen verändert werden" -#: lib/util/sudo_conf.c:535 +#: lib/util/sudo_conf.c:598 #, c-format msgid "%s is group writable" msgstr "%s kann von der Gruppe verändert werden" -#: lib/util/sudo_conf.c:545 src/selinux.c:196 src/selinux.c:209 src/sudo.c:341 +#: lib/util/sudo_conf.c:608 src/selinux.c:199 src/selinux.c:212 src/sudo.c:367 #, c-format msgid "unable to open %s" msgstr "%s konnte nicht geöffnet werden" -#: src/exec.c:123 src/exec.c:128 src/exec.c:423 src/exec.c:425 src/exec.c:427 -#: src/exec.c:429 src/exec.c:431 src/exec.c:433 src/exec.c:436 src/exec.c:453 -#: src/exec.c:455 src/exec.c:457 src/exec.c:605 src/exec.c:800 -#: src/exec_pty.c:480 src/exec_pty.c:736 src/exec_pty.c:806 src/exec_pty.c:808 -#: src/exec_pty.c:820 src/exec_pty.c:1308 src/exec_pty.c:1310 -#: src/exec_pty.c:1315 src/exec_pty.c:1317 src/exec_pty.c:1331 -#: src/exec_pty.c:1342 src/exec_pty.c:1344 src/exec_pty.c:1346 -#: src/exec_pty.c:1348 src/exec_pty.c:1350 src/exec_pty.c:1352 -#: src/exec_pty.c:1354 src/signal.c:156 +#: src/exec.c:114 src/exec.c:116 src/exec.c:121 src/exec.c:409 src/exec.c:411 +#: src/exec.c:413 src/exec.c:415 src/exec.c:417 src/exec.c:419 src/exec.c:422 +#: src/exec.c:438 src/exec.c:440 src/exec.c:595 src/exec.c:790 +#: src/exec_pty.c:466 src/exec_pty.c:722 src/exec_pty.c:792 src/exec_pty.c:794 +#: src/exec_pty.c:806 src/exec_pty.c:808 src/exec_pty.c:1289 +#: src/exec_pty.c:1291 src/exec_pty.c:1296 src/exec_pty.c:1298 +#: src/exec_pty.c:1312 src/exec_pty.c:1323 src/exec_pty.c:1325 +#: src/exec_pty.c:1327 src/exec_pty.c:1329 src/exec_pty.c:1331 +#: src/exec_pty.c:1333 src/exec_pty.c:1335 src/signal.c:147 #, c-format msgid "unable to set handler for signal %d" msgstr "Handler für Signal %d konnte nicht gesetzt werden" -#: src/exec.c:135 src/exec_pty.c:845 -msgid "policy plugin failed session initialization" -msgstr "Regelwerks-Plugin konnte Sitzung nicht initialisieren" - -#: src/exec.c:140 src/exec_pty.c:861 src/exec_pty.c:1392 src/tgetpass.c:221 +#: src/exec.c:126 src/exec_pty.c:838 src/exec_pty.c:1373 src/tgetpass.c:265 msgid "unable to fork" msgstr "Es konnte nicht geforkt werden" -#: src/exec.c:318 src/exec.c:326 src/exec.c:877 src/exec_pty.c:604 -#: src/exec_pty.c:609 src/exec_pty.c:667 src/exec_pty.c:674 src/exec_pty.c:965 -#: src/exec_pty.c:975 src/exec_pty.c:1020 src/exec_pty.c:1027 -#: src/exec_pty.c:1457 src/exec_pty.c:1464 src/exec_pty.c:1471 +#: src/exec.c:304 src/exec.c:312 src/exec.c:868 src/exec_pty.c:604 +#: src/exec_pty.c:611 src/exec_pty.c:654 src/exec_pty.c:659 src/exec_pty.c:946 +#: src/exec_pty.c:956 src/exec_pty.c:1001 src/exec_pty.c:1008 +#: src/exec_pty.c:1438 src/exec_pty.c:1445 src/exec_pty.c:1452 msgid "unable to add event to queue" msgstr "Ereignis konnte nicht zur Warteschlange hinzugefügt werden" -#: src/exec.c:406 +#: src/exec.c:392 msgid "unable to create sockets" msgstr "Sockets konnten nicht hergestellt werden" -#: src/exec.c:502 +#: src/exec.c:447 +msgid "policy plugin failed session initialization" +msgstr "Regelwerks-Plugin konnte Sitzung nicht initialisieren" + +#: src/exec.c:492 msgid "error in event loop" msgstr "Fehler in Ereignisschleife" -#: src/exec.c:520 +#: src/exec.c:510 msgid "unable to restore tty label" msgstr "TTY-Kennzeichnung konnte nicht wiederhergestellt werden" -#: src/exec.c:613 src/exec_pty.c:514 src/signal.c:95 +#: src/exec.c:603 src/exec_pty.c:498 src/signal.c:86 #, c-format msgid "unable to restore handler for signal %d" msgstr "Handler für Signal %d konnte nicht wiederhergestellt werden" -#: src/exec.c:731 src/exec_pty.c:1199 +#: src/exec.c:721 src/exec_pty.c:1180 msgid "error reading from signal pipe" msgstr "Fehler beim Lesen der Signal-Pipe" -#: src/exec_common.c:73 +#: src/exec_common.c:166 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "PRIV_PROC_EXEC konnte nicht von PRIV_LIMIT entfernt werden" -#: src/exec_pty.c:200 +#: src/exec_pty.c:188 msgid "unable to allocate pty" msgstr "PTY konnte nicht vergeben werden" -#: src/exec_pty.c:780 src/exec_pty.c:789 src/exec_pty.c:797 -#: src/exec_pty.c:1300 src/exec_pty.c:1389 src/signal.c:137 src/tgetpass.c:218 +#: src/exec_pty.c:766 src/exec_pty.c:775 src/exec_pty.c:783 +#: src/exec_pty.c:1281 src/exec_pty.c:1370 src/signal.c:128 src/tgetpass.c:261 msgid "unable to create pipe" msgstr "Weiterleitung konnte nicht erstellt werden" -#: src/exec_pty.c:836 -msgid "unable to set terminal to raw mode" -msgstr "Terminal konnte nicht in den Rohmodus gesetzt werden" - -#: src/exec_pty.c:1232 +#: src/exec_pty.c:1213 msgid "error reading from pipe" msgstr "Fehler beim Lesen der Pipe" -#: src/exec_pty.c:1257 +#: src/exec_pty.c:1238 msgid "error reading from socketpair" msgstr "Fehler beim Lesen des Socket-Paars" -#: src/exec_pty.c:1266 +#: src/exec_pty.c:1247 #, c-format msgid "unexpected reply type on backchannel: %d" msgstr "Unerwarteter Antworttyp auf Rückmeldungskanal: %d" -#: src/exec_pty.c:1368 +#: src/exec_pty.c:1349 msgid "unable to set controlling tty" msgstr "Kontrollierendes TTY konnte nicht gesetzt werden" -#: src/load_plugins.c:59 src/load_plugins.c:72 src/load_plugins.c:89 -#: src/load_plugins.c:142 src/load_plugins.c:148 src/load_plugins.c:154 -#: src/load_plugins.c:195 src/load_plugins.c:202 src/load_plugins.c:209 -#: src/load_plugins.c:215 +#: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 +#: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 +#: src/load_plugins.c:170 src/load_plugins.c:178 src/load_plugins.c:185 +#: src/load_plugins.c:191 #, c-format msgid "error in %s, line %d while loading plugin `%s'" msgstr "Fehler in %s, Zeile %d, während Plugin »%s« geladen wurde" -#: src/load_plugins.c:91 +#: src/load_plugins.c:87 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" -#: src/load_plugins.c:150 +#: src/load_plugins.c:125 #, c-format msgid "%s must be owned by uid %d" msgstr "%s muss Benutzer mit UID %d gehören" -#: src/load_plugins.c:156 +#: src/load_plugins.c:131 #, c-format msgid "%s must be only be writable by owner" msgstr "%s darf nur vom Besitzer beschreibbar sein" -#: src/load_plugins.c:197 +#: src/load_plugins.c:172 #, c-format msgid "unable to load %s: %s" msgstr "»%s« konnte nicht geladen werden: %s" -#: src/load_plugins.c:204 +#: src/load_plugins.c:180 #, c-format msgid "unable to find symbol `%s' in %s" msgstr "Symbol »%s« konnte in %s nicht gefunden werden" -#: src/load_plugins.c:211 +#: src/load_plugins.c:187 #, c-format msgid "unknown policy type %d found in %s" msgstr "Unbekannter Regelwerktyp %d wurde in %s gefunden" -#: src/load_plugins.c:217 +#: src/load_plugins.c:193 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "Inkompatible Hauptversion %d des Regelwerks (%d erwartet) wurde in %s gefunden" -#: src/load_plugins.c:226 +#: src/load_plugins.c:202 #, c-format msgid "ignoring policy plugin `%s' in %s, line %d" msgstr "Regelwerks-Plugin »%s« in %s, Zeile %d, wird ignoriert" -#: src/load_plugins.c:228 +#: src/load_plugins.c:204 msgid "only a single policy plugin may be specified" msgstr "Nur ein einziges Regelwerks-Plugin kann geladen werden" -#: src/load_plugins.c:231 +#: src/load_plugins.c:207 #, c-format msgid "ignoring duplicate policy plugin `%s' in %s, line %d" msgstr "Doppelt vorhandenes Regelwerks-Plugin »%s« in %s, Zeile %d, wird ignoriert" -#: src/load_plugins.c:249 +#: src/load_plugins.c:228 #, c-format msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" msgstr "Doppelt vorhandenes E/A-Plugin »%s« in %s, Zeile %d, wird ignoriert" -#: src/load_plugins.c:338 +#: src/load_plugins.c:331 #, 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:236 -msgid "unable to open socket" -msgstr "Socket konnte nicht geöffnet werden" +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:476 +#, c-format +msgid "internal error, %s overflow" +msgstr "Interner Fehler: %s-Überlauf" -#: src/parse_args.c:241 +#: src/parse_args.c:239 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:403 +#: src/parse_args.c:406 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:407 +#: src/parse_args.c:410 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:417 +#: src/parse_args.c:420 msgid "the `-E' option is not valid in edit mode" msgstr "Die Option »-E« ist im Bearbeiten-Modus ungültig" -#: src/parse_args.c:419 +#: src/parse_args.c:422 msgid "you may not specify environment variables in edit mode" msgstr "Im Bearbeiten-Modus können keine Umgebungsvariablen gesetzt werden" -#: src/parse_args.c:427 +#: src/parse_args.c:430 msgid "the `-U' option may only be used with the `-l' option" msgstr "Die »-U«-Option kann nur zusammen mit »-l« benutzt werden" -#: src/parse_args.c:431 +#: src/parse_args.c:434 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:497 +#: src/parse_args.c:504 msgid "sudoedit is not supported on this platform" msgstr "sudoedit ist auf dieser Plattform nicht verfügbar" -#: src/parse_args.c:570 +#: src/parse_args.c:577 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:584 +#: src/parse_args.c:591 #, c-format msgid "" "%s - edit files as another user\n" @@ -317,7 +332,7 @@ "%s - Dateien als anderer Benutzer verändern\n" "\n" -#: src/parse_args.c:586 +#: src/parse_args.c:593 #, c-format msgid "" "%s - execute a command as another user\n" @@ -326,7 +341,7 @@ "%s - Einen Befehl als anderer Benutzer ausführen\n" "\n" -#: src/parse_args.c:591 +#: src/parse_args.c:598 #, c-format msgid "" "\n" @@ -335,513 +350,510 @@ "\n" "Optionen:\n" -#: src/parse_args.c:593 +#: src/parse_args.c:600 msgid "use a helper program for password prompting" msgstr "Hilfsprogramm zum Eingeben des Passworts verwenden" -#: src/parse_args.c:596 +#: src/parse_args.c:603 msgid "use specified BSD authentication type" msgstr "Angegebenen BSD-Legitimierungstypen verwenden" -#: src/parse_args.c:599 +#: src/parse_args.c:606 msgid "run command in the background" msgstr "Befehl im Hintergrund ausführen" -#: src/parse_args.c:601 +#: src/parse_args.c:608 msgid "close all file descriptors >= num" msgstr "Alle Dateideskriptoren >= num schließen" -#: src/parse_args.c:604 +#: src/parse_args.c:611 msgid "run command with the specified BSD login class" msgstr "Befehl unter angegebener Login-Klasse ausführen" -#: src/parse_args.c:607 +#: src/parse_args.c:614 msgid "preserve user environment when running command" msgstr "Benutzerumgebung beim Starten des Befehls beibehalten" -#: src/parse_args.c:609 +#: src/parse_args.c:616 msgid "edit files instead of running a command" msgstr "Dateien bearbeiten, statt einen Befehl auszuführen" -#: src/parse_args.c:611 +#: src/parse_args.c:618 msgid "run command as the specified group name or ID" msgstr "Befehl unter angegebenem Gruppennamen oder Gruppen-ID ausführen" -#: src/parse_args.c:613 +#: src/parse_args.c:620 msgid "set HOME variable to target user's home dir" msgstr "HOME-Variable als Home-Verzeichnis des Zielbenutzers setzen" -#: src/parse_args.c:615 +#: src/parse_args.c:622 msgid "display help message and exit" msgstr "Hilfe ausgeben und beenden" -#: src/parse_args.c:617 +#: src/parse_args.c:624 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:619 +#: src/parse_args.c:626 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:621 +#: src/parse_args.c:628 msgid "remove timestamp file completely" msgstr "Zeitstempeldateien komplett entfernen" -#: src/parse_args.c:623 +#: src/parse_args.c:630 msgid "invalidate timestamp file" msgstr "Zeitstempeldatei ungültig machen" -#: src/parse_args.c:625 +#: src/parse_args.c:632 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:627 +#: src/parse_args.c:634 msgid "non-interactive mode, no prompts are used" msgstr "Nicht-interaktiver Modus, es werden keine Prompts verwendet" -#: src/parse_args.c:629 +#: src/parse_args.c:636 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:631 +#: src/parse_args.c:638 msgid "use the specified password prompt" msgstr "Angegebenen Passwort-Prompt benutzen" -#: src/parse_args.c:634 +#: src/parse_args.c:641 msgid "create SELinux security context with specified role" msgstr "SELinux-Sicherheitskontext mit angegebener Funktion erstellen" -#: src/parse_args.c:637 +#: src/parse_args.c:644 msgid "read password from standard input" msgstr "Passwort von der Standardeingabe lesen" -#: src/parse_args.c:639 +#: src/parse_args.c:646 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:642 +#: src/parse_args.c:649 msgid "create SELinux security context with specified type" msgstr "SELinux-Sicherheitskontext mit angegebenem Typ erstellen" -#: src/parse_args.c:645 +#: src/parse_args.c:652 msgid "in list mode, display privileges for user" msgstr "im Aufzählungsmodus, Rechte des Benutzers anzeigen" -#: src/parse_args.c:647 +#: src/parse_args.c:654 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:649 +#: src/parse_args.c:656 msgid "display version information and exit" msgstr "Versionsinformation anzeigen und beenden" -#: src/parse_args.c:651 +#: src/parse_args.c:658 msgid "update user's timestamp without running a command" msgstr "Den Zeitstempel des Benutzers erneuern, ohne einen Befehl auszuführen" -#: src/parse_args.c:653 +#: src/parse_args.c:660 msgid "stop processing command line arguments" msgstr "Aufhören, die Befehlszeilenargumente zu verarbeiten" -#: src/selinux.c:77 +#: src/selinux.c:78 msgid "unable to open audit system" msgstr "Das Audit-System konnte nicht geöffnet werden" -#: src/selinux.c:85 +#: src/selinux.c:88 msgid "unable to send audit message" msgstr "Die Audit-Nachricht konnte nicht verschickt werden" -#: src/selinux.c:113 +#: src/selinux.c:116 #, c-format msgid "unable to fgetfilecon %s" msgstr "»fgetfilecon« konnte nicht auf %s angewendet werden" -#: src/selinux.c:118 +#: src/selinux.c:121 #, c-format msgid "%s changed labels" msgstr "%s änderte die Kennzeichnung" -#: src/selinux.c:123 +#: src/selinux.c:126 #, c-format msgid "unable to restore context for %s" msgstr "Der Kontext für %s konnte nicht wiederhergestellt werden" -#: src/selinux.c:163 +#: src/selinux.c:166 #, c-format msgid "unable to open %s, not relabeling tty" msgstr "%s konnte nicht geöffnet werden, TTY wird nicht neu gekennzeichnet" -#: src/selinux.c:172 +#: src/selinux.c:175 msgid "unable to get current tty context, not relabeling tty" msgstr "" "Aktueller TTY-Kontext konnte nicht festgestellt werden, TTY wird nicht neu\n" "gekennzeichnet." -#: src/selinux.c:179 +#: src/selinux.c:182 msgid "unable to get new tty context, not relabeling tty" msgstr "" "Neuer TTY-Kontext konnte nicht festgestellt werden, TTY wird nicht neu\n" "gekennzeichnet." -#: src/selinux.c:186 +#: src/selinux.c:189 msgid "unable to set new tty context" msgstr "Neuer TTY-Kontext konnte nicht festgestellt werden" -#: src/selinux.c:252 +#: src/selinux.c:255 #, c-format msgid "you must specify a role for type %s" msgstr "Für den Typen %s muss eine Funktion angegeben werden" -#: src/selinux.c:258 +#: src/selinux.c:261 #, c-format msgid "unable to get default type for role %s" msgstr "Standardtyp für Funktion %s konnte nicht ermittelt werden" -#: src/selinux.c:276 +#: src/selinux.c:279 #, c-format msgid "failed to set new role %s" msgstr "Neue Funktion %s konnte nicht festgelegt werden" -#: src/selinux.c:280 +#: src/selinux.c:283 #, c-format msgid "failed to set new type %s" msgstr "Neuer Typ %s konnte nicht festgelegt werden" -#: src/selinux.c:289 +#: src/selinux.c:295 #, c-format msgid "%s is not a valid context" msgstr "%s ist kein gültiger Kontext" -#: src/selinux.c:324 +#: src/selinux.c:330 msgid "failed to get old_context" msgstr "»old_context« konnte nicht wiedergeholt werden" -#: src/selinux.c:330 +#: src/selinux.c:336 msgid "unable to determine enforcing mode." msgstr "»Enforcing«-Modus konnte nicht bestimmt werden." -#: src/selinux.c:347 +#: src/selinux.c:353 #, c-format msgid "unable to set tty context to %s" msgstr "TTY-Kontext konnte nicht auf %s gesetzt werden" -#: src/selinux.c:386 +#: src/selinux.c:392 #, c-format msgid "unable to set exec context to %s" msgstr "Ausführungskontext konnte nicht auf »%s« gesetzt werden" -#: src/selinux.c:393 +#: src/selinux.c:399 #, c-format msgid "unable to set key creation context to %s" msgstr "Kontext der Schüsselerstellung konnte nicht auf %s festgelegt werden." -#: src/sesh.c:80 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "Benötigt mindestens ein Argument" -#: src/sesh.c:109 +#: src/sesh.c:106 +#, c-format +msgid "invalid file descriptor number: %s" +msgstr "Unzulässige Dateideskriptornummer: %s" + +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "%s konnte nicht als Anmeldeshell ausgeführt werden" -#: src/sesh.c:114 src/sudo.c:1186 +#: src/sesh.c:125 src/sudo.c:1274 #, c-format msgid "unable to execute %s" msgstr "%s konnte nicht ausgeführt werden" -#: src/signal.c:77 +#: src/signal.c:68 #, c-format msgid "unable to save handler for signal %d" msgstr "Handler für Signal %d konnte nicht gespeichert werden" -#: src/solaris.c:88 +#: src/solaris.c:76 msgid "resource control limit has been reached" msgstr "Limit der Ressourcenkontrolle wurde erreicht" -#: src/solaris.c:91 +#: src/solaris.c:79 #, c-format msgid "user \"%s\" is not a member of project \"%s\"" msgstr "Benutzer »%s« ist kein Mitglied des Projekts »%s«" -#: src/solaris.c:95 +#: src/solaris.c:83 msgid "the invoking task is final" msgstr "Der aufrufende Prozess ist fertig" -#: src/solaris.c:98 +#: src/solaris.c:86 #, c-format msgid "could not join project \"%s\"" msgstr "Projekt »%s« konnte nicht beigetreten werden" -#: src/solaris.c:103 +#: src/solaris.c:91 #, c-format msgid "no resource pool accepting default bindings exists for project \"%s\"" msgstr "Für Projekt »%s« gibt es keinen Ressourcen-Pool, der die Standardanbindungen unterstützt." -#: src/solaris.c:107 +#: src/solaris.c:95 #, c-format msgid "specified resource pool does not exist for project \"%s\"" msgstr "Den angegebenen Ressourcen-Pool gibt es für das Projekt »%s« nicht" -#: src/solaris.c:111 +#: src/solaris.c:99 #, c-format msgid "could not bind to default resource pool for project \"%s\"" msgstr "Es konnte nicht zum Standard-Ressourcen-Pool für Projekt »%s« verbunden werden." -#: src/solaris.c:117 +#: src/solaris.c:105 #, c-format msgid "setproject failed for project \"%s\"" msgstr "»setproject« schlug für Projekt »%s« fehl" -#: src/solaris.c:119 +#: src/solaris.c:107 #, c-format msgid "warning, resource control assignment failed for project \"%s\"" msgstr "Warnung: Ressourcenkontrolle von Projekt »%s« konnte nicht zugewiesen werden" -#: src/sudo.c:209 +#: src/sudo.c:212 #, c-format msgid "Sudo version %s\n" msgstr "Sudo-Version %s\n" -#: src/sudo.c:211 +#: src/sudo.c:214 #, c-format msgid "Configure options: %s\n" msgstr "Optionen für »configure«: %s\n" -#: src/sudo.c:216 +#: src/sudo.c:222 msgid "fatal error, unable to load plugins" msgstr "Schwerwiegender Fehler, Plugins konnten nicht geladen werden" -#: src/sudo.c:224 +#: src/sudo.c:230 msgid "unable to initialize policy plugin" msgstr "Regelwerks-Plugin konnte nicht initialisiert werden" -#: src/sudo.c:280 +#: src/sudo.c:276 +msgid "plugin did not return a command to execute" +msgstr "Plugin gab keinen auszuführenden Befehl zurück" + +#: src/sudo.c:292 #, c-format msgid "error initializing I/O plugin %s" msgstr "E/A-Plugin %s konnte nicht initialisiert werden" -#: src/sudo.c:306 +#: src/sudo.c:318 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "Unerwarteter sudo-Modus 0x%x" -#: src/sudo.c:426 +#: src/sudo.c:461 msgid "unable to get group vector" msgstr "Gruppenvektor konnte nicht geholt werden" -#: src/sudo.c:478 +#: src/sudo.c:522 #, c-format msgid "unknown uid %u: who are you?" msgstr "Unbekannte UID %u: Wer sind Sie?" -#: src/sudo.c:785 +#: src/sudo.c:859 #, 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:788 +#: src/sudo.c:862 #, 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:794 +#: src/sudo.c:868 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "Effektive UID ist nicht %d. Wurde sudo mit »setuid root« installiert?" -#: src/sudo.c:923 +#: src/sudo.c:999 #, c-format msgid "unknown login class %s" msgstr "Unbekannte Anmeldungsklasse %s" -#: src/sudo.c:936 +#: src/sudo.c:1012 msgid "unable to set user context" msgstr "Benutzerkontext konnte nicht gesetzt werden" -#: src/sudo.c:950 +#: src/sudo.c:1026 msgid "unable to set supplementary group IDs" msgstr "Zusätzliche Gruppenkennungen konnten nicht gesetzt werden" -#: src/sudo.c:957 +#: src/sudo.c:1033 #, 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:963 +#: src/sudo.c:1039 #, c-format msgid "unable to set gid to runas gid %u" msgstr "GID konnte nicht auf »runas«-GID %u gesetzt werden" -#: src/sudo.c:970 +#: src/sudo.c:1046 msgid "unable to set process priority" msgstr "Prozesspriorität konnte nicht gesetzt werden" -#: src/sudo.c:978 +#: src/sudo.c:1054 #, c-format msgid "unable to change root to %s" msgstr "Wurzelverzeichnis konnte nicht zu %s geändert werden" -#: src/sudo.c:991 src/sudo.c:997 src/sudo.c:1003 +#: src/sudo.c:1067 src/sudo.c:1073 src/sudo.c:1080 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "Es konnte nicht zu »runas«-GID gewechselt werden (%u, %u)" -#: src/sudo.c:1021 +#: src/sudo.c:1098 #, c-format msgid "unable to change directory to %s" msgstr "In Verzeichnis »%s« konnte nicht gewechselt werden" -#: src/sudo.c:1082 +#: src/sudo.c:1156 #, c-format msgid "unexpected child termination condition: %d" msgstr "Unerwartete Abbruchbedingung eines Unterprozesses: %d" -#: src/sudo.c:1214 +#: src/sudo.c:1302 #, 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:1232 +#: src/sudo.c:1320 #, 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:1249 +#: src/sudo.c:1337 #, 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:1264 +#: src/sudo.c:1352 #, 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_edit.c:203 src/sudo_edit.c:294 +#: src/sudo_edit.c:181 +msgid "unable to restore current working directory" +msgstr "Aktueller Arbeitsordner konnte nicht wiederhergestellt werden" + +#: src/sudo_edit.c:526 src/sudo_edit.c:630 #, c-format msgid "%s: not a regular file" msgstr "%s: Keine reguläre Datei" -#: src/sudo_edit.c:230 src/sudo_edit.c:332 +#: src/sudo_edit.c:533 +#, c-format +msgid "%s: editing symbolic links is not permitted" +msgstr "%s: Bearbeiten symbolischer Links ist nicht erlaubt" + +#: src/sudo_edit.c:536 +#, c-format +msgid "%s: editing files in a writable directory is not permitted" +msgstr "%s: Bearbeiten von Dateien in einem beschreibbaren Ordner ist nicht erlaubt" + +#: src/sudo_edit.c:567 src/sudo_edit.c:669 #, c-format msgid "%s: short write" msgstr "%s: Zu kurzer Schreibvorgang" -#: src/sudo_edit.c:295 +#: src/sudo_edit.c:631 #, c-format msgid "%s left unmodified" msgstr "%s blieb unverändert" -#: src/sudo_edit.c:308 src/sudo_edit.c:483 +#: src/sudo_edit.c:644 src/sudo_edit.c:830 #, c-format msgid "%s unchanged" msgstr "%s unverändert" -#: src/sudo_edit.c:321 src/sudo_edit.c:343 +#: src/sudo_edit.c:658 src/sudo_edit.c:680 #, c-format msgid "unable to write to %s" msgstr "%s konnte nicht beschrieben werden" -#: src/sudo_edit.c:322 src/sudo_edit.c:341 src/sudo_edit.c:344 -#: src/sudo_edit.c:508 src/sudo_edit.c:512 +#: src/sudo_edit.c:659 src/sudo_edit.c:678 src/sudo_edit.c:681 +#: src/sudo_edit.c:855 src/sudo_edit.c:859 #, c-format msgid "contents of edit session left in %s" msgstr "Bearbeitungssitzung wurden in %s gelassen" -#: src/sudo_edit.c:340 +#: src/sudo_edit.c:677 msgid "unable to read temporary file" msgstr "Temporäre Datei konnte nicht gelesen werden" -#: src/sudo_edit.c:417 +#: src/sudo_edit.c:760 msgid "sesh: internal error: odd number of paths" msgstr "sesh: interner Fehler: seltsame Anzahl an Pfaden" -#: src/sudo_edit.c:419 +#: src/sudo_edit.c:762 msgid "sesh: unable to create temporary files" msgstr "sesh: Temporäre Dateien konnten nicht angelegt werden" -#: src/sudo_edit.c:421 src/sudo_edit.c:515 +#: src/sudo_edit.c:764 src/sudo_edit.c:862 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: unbekannter Fehler %d" -#: src/sudo_edit.c:507 +#: src/sudo_edit.c:854 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:511 +#: src/sudo_edit.c:858 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:554 +#: src/sudo_edit.c:901 #, c-format msgid "unable to change uid to root (%u)" msgstr "UID konnte nicht zu Root (%u) geändert werden" -#: src/sudo_edit.c:571 +#: src/sudo_edit.c:918 msgid "plugin error: missing file list for sudoedit" msgstr "Plugin-Fehler: Fehlende Dateiliste für sudoedit" -#: src/tgetpass.c:90 +#: src/sudo_edit.c:959 src/sudo_edit.c:972 +msgid "unable to read the clock" +msgstr "Die Uhr konnte nicht gelesen werden" + +#: src/tgetpass.c:107 msgid "no tty present and no askpass program specified" msgstr "Kein TTY vorhanden und kein »askpass«-Programm angegeben" -#: src/tgetpass.c:99 +#: src/tgetpass.c:116 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "Kein »askpass«-Programm angegeben, es wird versucht, SUDO_ASKPASS zu setzen" -#: src/tgetpass.c:232 +#: src/tgetpass.c:276 #, c-format msgid "unable to set gid to %u" msgstr "GID konnte nicht als %u festgelegt werden" -#: src/tgetpass.c:236 +#: src/tgetpass.c:280 #, c-format msgid "unable to set uid to %u" msgstr "UID konnte nicht als %u festgelegt werden" -#: src/tgetpass.c:241 +#: src/tgetpass.c:285 #, c-format msgid "unable to run %s" msgstr "%s konnte nicht ausgeführt werden" -#: src/utmp.c:278 +#: src/utmp.c:266 msgid "unable to save stdin" msgstr "Standardeingabe konnte nicht gespeichert werden" -#: src/utmp.c:280 +#: src/utmp.c:268 msgid "unable to dup2 stdin" -msgstr "dup2 konnte nicht auf die Standardeingabe angewandt werden" +msgstr "dup2 konnte nicht auf die Standardeingabe angewendet werden" -#: src/utmp.c:283 +#: src/utmp.c:271 msgid "unable to restore stdin" msgstr "Standardeingabe konnte nicht wiederhergestellt werden" - -#~ msgid "%s: %s: %s\n" -#~ msgstr "%s: %s: %s\n" - -#~ msgid "%s: %s\n" -#~ msgstr "%s: %s\n" - -#~ msgid "internal error, tried to emalloc2(0)" -#~ msgstr "Interner Fehler: Es wurde versucht, emalloc2(0) auszuführen" - -#~ msgid "internal error, tried to ecalloc(0)" -#~ msgstr "Interner Fehler: Es wurde versucht, ecalloc(0) auszuführen" - -#~ msgid "internal error, tried to erealloc(0)" -#~ msgstr "Interner Fehler: Es wurde versucht, erealloc(0) auszuführen" - -#~ msgid "internal error, tried to erealloc3(0)" -#~ msgstr "Interner Fehler: Es wurde versucht, erealloc3(0) auszuführen" - -#~ msgid "internal error, tried to erecalloc(0)" -#~ msgstr "Interner Fehler: Es wurde versucht, erecalloc(0) auszuführen" - -#~ msgid "load_interfaces: overflow detected" -#~ msgstr "load_interfaces: Überlauf entdeckt" - -#~ msgid "value out of range" -#~ msgstr "Wert liegt außerhalb des Bereichs" - -#~ msgid "select failed" -#~ msgstr "»select« schlug fehl" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/po/eo.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/po/eo.mo differ diff -Nru sudo-1.8.12/po/eo.po sudo-1.8.16/po/eo.po --- sudo-1.8.12/po/eo.po 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/po/eo.po 2016-03-17 16:13:10.000000000 +0000 @@ -1,13 +1,13 @@ # Esperanto translations for sudo package. # This file is put in the public domain. -# Felipe Castro , 2013, 2014. +# Felipe Castro , 2013, 2014, 2015, 2016. # msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.12b1\n" -"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-10-27 12:35-0600\n" -"PO-Revision-Date: 2014-11-10 20:43-0500\n" +"Project-Id-Version: sudo 1.8.16b1\n" +"Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" +"POT-Creation-Date: 2016-02-19 15:48-0700\n" +"PO-Revision-Date: 2016-03-04 15:30-0300\n" "Last-Translator: Felipe Castro \n" "Language-Team: Esperanto \n" "Language: eo\n" @@ -15,299 +15,314 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 1.5.4\n" +"X-Generator: Poedit 1.6.10\n" -#: lib/util/aix.c:92 lib/util/aix.c:151 +#: lib/util/aix.c:85 lib/util/aix.c:164 msgid "unable to open userdb" msgstr "ne eblas malfermi la uzanto-datumbazon" -#: lib/util/aix.c:156 +#: lib/util/aix.c:219 #, c-format msgid "unable to switch to registry \"%s\" for %s" msgstr "ne eblas ŝanĝiĝi al registrejo \"%s\" por %s" -#: lib/util/aix.c:175 +#: lib/util/aix.c:244 msgid "unable to restore registry" msgstr "ne eblas restarigi registrejon" -#: lib/util/alloc.c:68 lib/util/alloc.c:85 lib/util/alloc.c:106 -#: lib/util/alloc.c:128 lib/util/alloc.c:147 lib/util/alloc.c:170 -msgid "internal error, tried allocate zero bytes" -msgstr "interna eraro, provo rezervi neniun bajton" - -#: lib/util/alloc.c:87 lib/util/alloc.c:109 lib/util/alloc.c:149 -#: lib/util/alloc.c:172 src/net_ifs.c:174 src/net_ifs.c:191 src/net_ifs.c:325 -#, c-format -msgid "internal error, %s overflow" -msgstr "interna eraro, superfluo en %s" - -#: lib/util/gidlist.c:78 src/load_plugins.c:61 src/load_plugins.c:74 -#: src/sudo.c:572 src/sudo.c:591 src/sudo.c:618 src/sudo.c:627 src/sudo.c:636 -#: src/sudo.c:653 src/sudo.c:700 src/sudo.c:710 +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/gidlist.c:74 +#: lib/util/sudo_conf.c:207 lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 +#: lib/util/sudo_conf.c:569 src/conversation.c:75 src/exec.c:863 +#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 +#: src/exec_pty.c:684 src/exec_pty.c:692 src/load_plugins.c:52 +#: src/load_plugins.c:65 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:655 src/sudo.c:665 src/sudo.c:685 src/sudo.c:704 src/sudo.c:713 +#: src/sudo.c:722 src/sudo.c:739 src/sudo.c:780 src/sudo.c:790 src/sudo.c:810 +#: src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 src/sudo.c:1492 +#: src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/util/strsignal.c:50 +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/sudo_conf.c:208 +#: lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 lib/util/sudo_conf.c:569 +#: src/conversation.c:76 src/exec.c:863 src/exec_common.c:107 +#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:684 +#: src/exec_pty.c:692 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:810 src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 +#: src/sudo.c:1492 src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 +msgid "unable to allocate memory" +msgstr "ne eblas generi memoron" + +#: lib/util/strsignal.c:48 msgid "Unknown signal" msgstr "Nekonata signalo" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:65 lib/util/strtonum.c:183 +#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:48 +#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "nevalida valoro" -#: lib/util/strtoid.c:90 lib/util/strtoid.c:118 lib/util/strtomode.c:61 -#: lib/util/strtonum.c:68 lib/util/strtonum.c:195 +#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:54 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "valoro tro grandas" -#: lib/util/strtoid.c:96 lib/util/strtomode.c:61 lib/util/strtonum.c:68 -#: lib/util/strtonum.c:189 +#: lib/util/strtoid.c:89 lib/util/strtomode.c:54 lib/util/strtonum.c:61 +#: lib/util/strtonum.c:182 msgid "value too small" msgstr "valoro tro malgrandas" -#: lib/util/sudo_conf.c:181 +#: lib/util/sudo_conf.c:223 #, c-format msgid "invalid Path value `%s' in %s, line %u" msgstr "nevalida voja valoro '%s' en %s, linio %u" -#: lib/util/sudo_conf.c:335 lib/util/sudo_conf.c:388 +#: lib/util/sudo_conf.c:389 lib/util/sudo_conf.c:442 #, c-format msgid "invalid value for %s `%s' in %s, line %u" msgstr "nevalida valoro por %s '%s' en %s, linio %u" -#: lib/util/sudo_conf.c:356 +#: lib/util/sudo_conf.c:410 #, c-format msgid "unsupported group source `%s' in %s, line %u" msgstr "nekomprenata grupa fonto '%s' en %s, linio %u" -#: lib/util/sudo_conf.c:372 +#: lib/util/sudo_conf.c:426 #, c-format msgid "invalid max groups `%s' in %s, line %u" msgstr "nevalidaj maksimumaj grupoj '%s' en %s, linio %u" -#: lib/util/sudo_conf.c:522 +#: lib/util/sudo_conf.c:585 #, c-format msgid "unable to stat %s" msgstr "ne eblas trovi je %s" -#: lib/util/sudo_conf.c:525 +#: lib/util/sudo_conf.c:588 #, c-format msgid "%s is not a regular file" msgstr "%s estas ne regula dosiero" -#: lib/util/sudo_conf.c:528 +#: lib/util/sudo_conf.c:591 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s estas estrata de uid %u, devas esti %u" -#: lib/util/sudo_conf.c:532 +#: lib/util/sudo_conf.c:595 #, c-format msgid "%s is world writable" msgstr "%s estas skribebla de ĉiuj" -#: lib/util/sudo_conf.c:535 +#: lib/util/sudo_conf.c:598 #, c-format msgid "%s is group writable" msgstr "%s estas skribebla de la tuta grupo" -#: lib/util/sudo_conf.c:545 src/selinux.c:196 src/selinux.c:209 src/sudo.c:341 +#: lib/util/sudo_conf.c:608 src/selinux.c:199 src/selinux.c:212 src/sudo.c:367 #, c-format msgid "unable to open %s" msgstr "ne eblas malfermi %s" -#: src/exec.c:123 src/exec.c:128 src/exec.c:423 src/exec.c:425 src/exec.c:427 -#: src/exec.c:429 src/exec.c:431 src/exec.c:433 src/exec.c:436 src/exec.c:453 -#: src/exec.c:455 src/exec.c:457 src/exec.c:605 src/exec.c:800 -#: src/exec_pty.c:480 src/exec_pty.c:736 src/exec_pty.c:806 src/exec_pty.c:808 -#: src/exec_pty.c:820 src/exec_pty.c:1308 src/exec_pty.c:1310 -#: src/exec_pty.c:1315 src/exec_pty.c:1317 src/exec_pty.c:1331 -#: src/exec_pty.c:1342 src/exec_pty.c:1344 src/exec_pty.c:1346 -#: src/exec_pty.c:1348 src/exec_pty.c:1350 src/exec_pty.c:1352 -#: src/exec_pty.c:1354 src/signal.c:156 +#: src/exec.c:114 src/exec.c:116 src/exec.c:121 src/exec.c:409 src/exec.c:411 +#: src/exec.c:413 src/exec.c:415 src/exec.c:417 src/exec.c:419 src/exec.c:422 +#: src/exec.c:438 src/exec.c:440 src/exec.c:595 src/exec.c:790 +#: src/exec_pty.c:466 src/exec_pty.c:722 src/exec_pty.c:792 src/exec_pty.c:794 +#: src/exec_pty.c:806 src/exec_pty.c:808 src/exec_pty.c:1289 +#: src/exec_pty.c:1291 src/exec_pty.c:1296 src/exec_pty.c:1298 +#: src/exec_pty.c:1312 src/exec_pty.c:1323 src/exec_pty.c:1325 +#: src/exec_pty.c:1327 src/exec_pty.c:1329 src/exec_pty.c:1331 +#: src/exec_pty.c:1333 src/exec_pty.c:1335 src/signal.c:147 #, c-format msgid "unable to set handler for signal %d" msgstr "ne eblas difini traktilon por la signalo %d" -#: src/exec.c:135 src/exec_pty.c:845 -msgid "policy plugin failed session initialization" -msgstr "konduta kromprogramo fiaskis dum seanca komenciĝo" - -#: src/exec.c:140 src/exec_pty.c:861 src/exec_pty.c:1392 src/tgetpass.c:221 +#: src/exec.c:126 src/exec_pty.c:838 src/exec_pty.c:1373 src/tgetpass.c:265 msgid "unable to fork" msgstr "ne eblas forki" -#: src/exec.c:318 src/exec.c:326 src/exec.c:877 src/exec_pty.c:604 -#: src/exec_pty.c:609 src/exec_pty.c:667 src/exec_pty.c:674 src/exec_pty.c:965 -#: src/exec_pty.c:975 src/exec_pty.c:1020 src/exec_pty.c:1027 -#: src/exec_pty.c:1457 src/exec_pty.c:1464 src/exec_pty.c:1471 +#: src/exec.c:304 src/exec.c:312 src/exec.c:868 src/exec_pty.c:604 +#: src/exec_pty.c:611 src/exec_pty.c:654 src/exec_pty.c:659 src/exec_pty.c:946 +#: src/exec_pty.c:956 src/exec_pty.c:1001 src/exec_pty.c:1008 +#: src/exec_pty.c:1438 src/exec_pty.c:1445 src/exec_pty.c:1452 msgid "unable to add event to queue" msgstr "ne eblas aldoni al la atendovico eventon" -#: src/exec.c:406 +#: src/exec.c:392 msgid "unable to create sockets" msgstr "ne eblas krei konektingojn" -#: src/exec.c:502 +#: src/exec.c:447 +msgid "policy plugin failed session initialization" +msgstr "konduta kromprogramo fiaskis dum seanca komenciĝo" + +#: src/exec.c:492 msgid "error in event loop" msgstr "eraro en la eventa iteracio" -#: src/exec.c:520 +#: src/exec.c:510 msgid "unable to restore tty label" msgstr "ne eblis reatingi tty-etikedon" -#: src/exec.c:613 src/exec_pty.c:514 src/signal.c:95 +#: src/exec.c:603 src/exec_pty.c:498 src/signal.c:86 #, c-format msgid "unable to restore handler for signal %d" msgstr "ne eblas restarigi traktilon por la signalo %d" -#: src/exec.c:731 src/exec_pty.c:1199 +#: src/exec.c:721 src/exec_pty.c:1180 msgid "error reading from signal pipe" msgstr "eraro dum legi la signalan tubon" -#: src/exec_common.c:73 +#: src/exec_common.c:166 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "ne eblas forigi PRIV_PROC_EXEC-on de PRIV_LIMIT" -#: src/exec_pty.c:200 +#: src/exec_pty.c:188 msgid "unable to allocate pty" msgstr "ne eblis generi pty-on" -#: src/exec_pty.c:780 src/exec_pty.c:789 src/exec_pty.c:797 -#: src/exec_pty.c:1300 src/exec_pty.c:1389 src/signal.c:137 src/tgetpass.c:218 +#: src/exec_pty.c:766 src/exec_pty.c:775 src/exec_pty.c:783 +#: src/exec_pty.c:1281 src/exec_pty.c:1370 src/signal.c:128 src/tgetpass.c:261 msgid "unable to create pipe" msgstr "ne eblas krei tubon" -#: src/exec_pty.c:836 -msgid "unable to set terminal to raw mode" -msgstr "ne eblas elekti nudan reĝimon ĉe la terminalo" - -#: src/exec_pty.c:1232 +#: src/exec_pty.c:1213 msgid "error reading from pipe" msgstr "eraro dum legi el tubo" -#: src/exec_pty.c:1257 +#: src/exec_pty.c:1238 msgid "error reading from socketpair" msgstr "eraro dum legi la konektingan paron" -#: src/exec_pty.c:1266 +#: src/exec_pty.c:1247 #, c-format msgid "unexpected reply type on backchannel: %d" msgstr "neatendita respondotipo ĉe la postkanalo: %d" -#: src/exec_pty.c:1368 +#: src/exec_pty.c:1349 msgid "unable to set controlling tty" msgstr "ne eblas elekti la regan tty-on" -#: src/load_plugins.c:59 src/load_plugins.c:72 src/load_plugins.c:89 -#: src/load_plugins.c:142 src/load_plugins.c:148 src/load_plugins.c:154 -#: src/load_plugins.c:195 src/load_plugins.c:202 src/load_plugins.c:209 -#: src/load_plugins.c:215 +#: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 +#: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 +#: src/load_plugins.c:170 src/load_plugins.c:178 src/load_plugins.c:185 +#: src/load_plugins.c:191 #, c-format msgid "error in %s, line %d while loading plugin `%s'" msgstr "eraro en %s, linio %d dum ŝargi kromprogramon '%s'" -#: src/load_plugins.c:91 +#: src/load_plugins.c:87 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" -#: src/load_plugins.c:150 +#: src/load_plugins.c:125 #, c-format msgid "%s must be owned by uid %d" msgstr "%s devas esti estrita de uid %d" -#: src/load_plugins.c:156 +#: src/load_plugins.c:131 #, c-format msgid "%s must be only be writable by owner" msgstr "%s estas skribebla nur de estro" -#: src/load_plugins.c:197 +#: src/load_plugins.c:172 #, c-format msgid "unable to load %s: %s" msgstr "maleblas ŝarĝi je %s: %s" -#: src/load_plugins.c:204 +#: src/load_plugins.c:180 #, c-format msgid "unable to find symbol `%s' in %s" msgstr "ne eblas trovi simbolon '%s' en %s" -#: src/load_plugins.c:211 +#: src/load_plugins.c:187 #, c-format msgid "unknown policy type %d found in %s" msgstr "nekonata konduta tipo %d trovita en %s" -#: src/load_plugins.c:217 +#: src/load_plugins.c:193 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "malkongrua granda eldono %d de kromprogramo (estu %d) trovita en %s" -#: src/load_plugins.c:226 +#: src/load_plugins.c:202 #, c-format msgid "ignoring policy plugin `%s' in %s, line %d" msgstr "ignoranta kondutan kromprogramon '%s' en %s, linio %d" -#: src/load_plugins.c:228 +#: src/load_plugins.c:204 msgid "only a single policy plugin may be specified" msgstr "nur unu konduta kromprogramo eblas specifiĝi" -#: src/load_plugins.c:231 +#: src/load_plugins.c:207 #, c-format msgid "ignoring duplicate policy plugin `%s' in %s, line %d" msgstr "ignoranta duobligantan kondutan kromprogramon '%s' en %s, linio %d" -#: src/load_plugins.c:249 +#: src/load_plugins.c:228 #, c-format msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" msgstr "ignoranta duobligitan eneligan kromprogramon '%s' en %s, linio %d" -#: src/load_plugins.c:338 +#: src/load_plugins.c:331 #, 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:236 -msgid "unable to open socket" -msgstr "ne eblas malfermi konektingon" +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:476 +#, c-format +msgid "internal error, %s overflow" +msgstr "interna eraro, superfluo en %s" -#: src/parse_args.c:241 +#: src/parse_args.c:239 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:403 +#: src/parse_args.c:406 msgid "you may not specify both the `-i' and `-s' options" msgstr "vi ne rajtas specifi kaj '-i' kaj '-s'" -#: src/parse_args.c:407 +#: src/parse_args.c:410 msgid "you may not specify both the `-i' and `-E' options" msgstr "vi ne rajtas specifi kaj '-i' kaj '-E'" -#: src/parse_args.c:417 +#: src/parse_args.c:420 msgid "the `-E' option is not valid in edit mode" msgstr "la parametro '-E' ne validas en redakta reĝimo" -#: src/parse_args.c:419 +#: src/parse_args.c:422 msgid "you may not specify environment variables in edit mode" msgstr "vi ne rajtas specifi medivariablojn en redakta reĝimo" -#: src/parse_args.c:427 +#: src/parse_args.c:430 msgid "the `-U' option may only be used with the `-l' option" msgstr "la parametro '-U' ne validas kun '-l'" -#: src/parse_args.c:431 +#: src/parse_args.c:434 msgid "the `-A' and `-S' options may not be used together" msgstr "'-A' kaj '-S' ne eblas uziĝi kune" -#: src/parse_args.c:497 +#: src/parse_args.c:504 msgid "sudoedit is not supported on this platform" msgstr "sudoedit ne estas havebla en ĉi tiu platformon" -#: src/parse_args.c:570 +#: src/parse_args.c:577 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:584 +#: src/parse_args.c:591 #, c-format msgid "" "%s - edit files as another user\n" @@ -316,7 +331,7 @@ "%s - redakti dosierojn kiel alia uzanto\n" "\n" -#: src/parse_args.c:586 +#: src/parse_args.c:593 #, c-format msgid "" "%s - execute a command as another user\n" @@ -325,7 +340,7 @@ "%s - plenumigi komandon kiel alia uzanto\n" "\n" -#: src/parse_args.c:591 +#: src/parse_args.c:598 #, c-format msgid "" "\n" @@ -334,483 +349,519 @@ "\n" "Parametroj:\n" -#: src/parse_args.c:593 +#: src/parse_args.c:600 msgid "use a helper program for password prompting" msgstr "uzi helpoprogrogramon por pasvortilo" -#: src/parse_args.c:596 +#: src/parse_args.c:603 msgid "use specified BSD authentication type" msgstr "uzi specifitan BSD-konstatan tipon" -#: src/parse_args.c:599 +#: src/parse_args.c:606 msgid "run command in the background" msgstr "plenumigi komandon fone" -#: src/parse_args.c:601 +#: src/parse_args.c:608 msgid "close all file descriptors >= num" msgstr "fermi ĉiujn dosierpriskribilojn >= numeron" -#: src/parse_args.c:604 +#: src/parse_args.c:611 msgid "run command with the specified BSD login class" msgstr "plenumigi komandon per specifita BSD-ensaluta klaso" -#: src/parse_args.c:607 +#: src/parse_args.c:614 msgid "preserve user environment when running command" msgstr "konservi uzanto-medivariablojn dum plenumigi komandon" -#: src/parse_args.c:609 +#: src/parse_args.c:616 msgid "edit files instead of running a command" msgstr "redakti dosierojn anstataŭ plenumigi komandon" -#: src/parse_args.c:611 +#: src/parse_args.c:618 msgid "run command as the specified group name or ID" msgstr "plenumigi komandon kiel la specifitan grupnomon aŭ identigilon" -#: src/parse_args.c:613 +#: src/parse_args.c:620 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:615 +#: src/parse_args.c:622 msgid "display help message and exit" msgstr "elmontri helpan mesaĝon kaj eliri" -#: src/parse_args.c:617 +#: src/parse_args.c:624 msgid "run command on host (if supported by plugin)" msgstr "plenumigi komandon en gastiganto (se permesata de kromprogramo)" -#: src/parse_args.c:619 +#: src/parse_args.c:626 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:621 +#: src/parse_args.c:628 msgid "remove timestamp file completely" msgstr "tute forigi tempo-indikilan dosieron" -#: src/parse_args.c:623 +#: src/parse_args.c:630 msgid "invalidate timestamp file" msgstr "eksvalidigi tempo-indikilan dosieron" -#: src/parse_args.c:625 +#: src/parse_args.c:632 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:627 +#: src/parse_args.c:634 msgid "non-interactive mode, no prompts are used" msgstr "neinteraga reĝimo, ne demandos al uzanto" -#: src/parse_args.c:629 +#: src/parse_args.c:636 msgid "preserve group vector instead of setting to target's" msgstr "konservi grupan vektoron anstataŭ elekti celan" -#: src/parse_args.c:631 +#: src/parse_args.c:638 msgid "use the specified password prompt" msgstr "uzi specifitan pasvortilon" -#: src/parse_args.c:634 +#: src/parse_args.c:641 msgid "create SELinux security context with specified role" msgstr "krei SELinux-sekurecan kuntekston kun specifita rolo" -#: src/parse_args.c:637 +#: src/parse_args.c:644 msgid "read password from standard input" msgstr "legi pasvorton el norma enigo" -#: src/parse_args.c:639 +#: src/parse_args.c:646 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:642 +#: src/parse_args.c:649 msgid "create SELinux security context with specified type" msgstr "krei SELinux-sekurecan kuntekston kun specifita rolo" -#: src/parse_args.c:645 +#: src/parse_args.c:652 msgid "in list mode, display privileges for user" msgstr "en lista reĝimo elmontri privilegiojn por uzanto" -#: src/parse_args.c:647 +#: src/parse_args.c:654 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:649 +#: src/parse_args.c:656 msgid "display version information and exit" msgstr "elmontri eldonan informon kaj eliri" -#: src/parse_args.c:651 +#: src/parse_args.c:658 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:653 +#: src/parse_args.c:660 msgid "stop processing command line arguments" msgstr "ĉesigi procedi komandliniajn parametrojn" -#: src/selinux.c:77 +#: src/selinux.c:78 msgid "unable to open audit system" msgstr "ne eblas malfermi aŭdan sistemon" -#: src/selinux.c:85 +#: src/selinux.c:88 msgid "unable to send audit message" msgstr "ne eblas sendi aŭdan mesaĝon" -#: src/selinux.c:113 +#: src/selinux.c:116 #, c-format msgid "unable to fgetfilecon %s" msgstr "ne eblas voki fgetfilecon %s" -#: src/selinux.c:118 +#: src/selinux.c:121 #, c-format msgid "%s changed labels" msgstr "%s ŝanĝis etikedojn" -#: src/selinux.c:123 +#: src/selinux.c:126 #, c-format msgid "unable to restore context for %s" msgstr "ne eblas restarigi kuntekston por %s" -#: src/selinux.c:163 +#: src/selinux.c:166 #, c-format msgid "unable to open %s, not relabeling tty" msgstr "ne eblas malfermi %s, ne remarkanta tty-on" -#: src/selinux.c:172 +#: src/selinux.c:175 msgid "unable to get current tty context, not relabeling tty" msgstr "ne eblas akiri aktualan tty-kuntekston, ne remarkanta" -#: src/selinux.c:179 +#: src/selinux.c:182 msgid "unable to get new tty context, not relabeling tty" msgstr "ne eblas akiri novan tty-kuntekston, ne remarkanta" -#: src/selinux.c:186 +#: src/selinux.c:189 msgid "unable to set new tty context" msgstr "ne eblas elekti novan tty-kuntekston" -#: src/selinux.c:252 +#: src/selinux.c:255 #, c-format msgid "you must specify a role for type %s" msgstr "vi devas specifi rolon por tipon %s" -#: src/selinux.c:258 +#: src/selinux.c:261 #, c-format msgid "unable to get default type for role %s" msgstr "ne eblas akiri aŭtomatan tipon por rolo %s" -#: src/selinux.c:276 +#: src/selinux.c:279 #, c-format msgid "failed to set new role %s" msgstr "malsukcesis elekti novan rolon %s" -#: src/selinux.c:280 +#: src/selinux.c:283 #, c-format msgid "failed to set new type %s" msgstr "malsukcesis elekti novan tipon %s" -#: src/selinux.c:289 +#: src/selinux.c:295 #, c-format msgid "%s is not a valid context" msgstr "%s ne estas valida kunteksto" -#: src/selinux.c:324 +#: src/selinux.c:330 msgid "failed to get old_context" msgstr "malsukcesis je old_context" -#: src/selinux.c:330 +#: src/selinux.c:336 msgid "unable to determine enforcing mode." msgstr "ne povas determini eldevigan reĝimon." -#: src/selinux.c:347 +#: src/selinux.c:353 #, c-format msgid "unable to set tty context to %s" msgstr "ne eblas agordi tty-kuntekston al %s" -#: src/selinux.c:386 +#: src/selinux.c:392 #, c-format msgid "unable to set exec context to %s" msgstr "ne eblas elekti exec-kuntekston al %s" -#: src/selinux.c:393 +#: src/selinux.c:399 #, c-format msgid "unable to set key creation context to %s" -msgstr "ne eblas elekti ŝlosilkrean kuntekston al %s" +msgstr "ne eblas elekti kuntekston de kreo de ŝlosilo al %s" -#: src/sesh.c:80 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "postulas almenaŭ unu parametron" -#: src/sesh.c:109 +#: src/sesh.c:106 +#, c-format +msgid "invalid file descriptor number: %s" +msgstr "malvalida dosierpriskribila numero: %s" + +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "ne eblas lanĉi %s kiel ensalut-ŝelo" -#: src/sesh.c:114 src/sudo.c:1186 +#: src/sesh.c:125 src/sudo.c:1274 #, c-format msgid "unable to execute %s" msgstr "ne eblas plenumigi: %s" -#: src/signal.c:77 +#: src/signal.c:68 #, c-format msgid "unable to save handler for signal %d" msgstr "ne eblas konservi traktilon por la signalo %d" -#: src/solaris.c:88 +#: src/solaris.c:76 msgid "resource control limit has been reached" msgstr "rimedo-rega limigo estis atingita" -#: src/solaris.c:91 +#: src/solaris.c:79 #, c-format msgid "user \"%s\" is not a member of project \"%s\"" msgstr "uzanto \"%s\" ne estas ano de projekto \"%s\"" -#: src/solaris.c:95 +#: src/solaris.c:83 msgid "the invoking task is final" msgstr "la voka tasko estas nenuligebla" -#: src/solaris.c:98 +#: src/solaris.c:86 #, c-format msgid "could not join project \"%s\"" msgstr "ne eblis aliĝi al projekto \"%s\"" -#: src/solaris.c:103 +#: src/solaris.c:91 #, c-format msgid "no resource pool accepting default bindings exists for project \"%s\"" msgstr "neniu rimedujo akceptanta aŭtomatajn bindaĵojn ekzistas por projekto \"%s\"" -#: src/solaris.c:107 +#: src/solaris.c:95 #, c-format msgid "specified resource pool does not exist for project \"%s\"" msgstr "specifita rimedujo ne ekzistas por projekto \"%s\"" -#: src/solaris.c:111 +#: src/solaris.c:99 #, c-format msgid "could not bind to default resource pool for project \"%s\"" msgstr "ne eblis bindi al aprioran rimedujo por projekto \"%s\"" -#: src/solaris.c:117 +#: src/solaris.c:105 #, c-format msgid "setproject failed for project \"%s\"" msgstr "setproject malsukcesis por projekto \"%s\"" -#: src/solaris.c:119 +#: src/solaris.c:107 #, c-format msgid "warning, resource control assignment failed for project \"%s\"" msgstr "averto, rimedo-rega asigno malsukcesis por projekto \"%s\"" -#: src/sudo.c:209 +#: src/sudo.c:212 #, c-format msgid "Sudo version %s\n" msgstr "Sudo: eldono %s\n" -#: src/sudo.c:211 +#: src/sudo.c:214 #, c-format msgid "Configure options: %s\n" msgstr "Muntaj parametroj: %s\n" -#: src/sudo.c:216 +#: src/sudo.c:222 msgid "fatal error, unable to load plugins" msgstr "ĉesiga eraro: ne eblas ŝargi kromprogramojn" -#: src/sudo.c:224 +#: src/sudo.c:230 msgid "unable to initialize policy plugin" msgstr "ne eblas komenci konduktan kromprogramon" -#: src/sudo.c:280 +#: src/sudo.c:276 +msgid "plugin did not return a command to execute" +msgstr "kromprogramo ne liveris komandon por plenumi" + +#: src/sudo.c:292 #, c-format msgid "error initializing I/O plugin %s" msgstr "eraro dum komenci eneligan kromprogramon %s" -#: src/sudo.c:306 +#: src/sudo.c:318 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "neatendita sudo-reĝimon 0x%x" -#: src/sudo.c:426 +#: src/sudo.c:461 msgid "unable to get group vector" msgstr "ne eblas elekti grupan vektoron" -#: src/sudo.c:478 +#: src/sudo.c:522 #, c-format msgid "unknown uid %u: who are you?" msgstr "nekonata uid %u: kiu vi estas?" -#: src/sudo.c:785 +#: src/sudo.c:859 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s devas esti estrita de uid %d kaj la setuid-bito devas esti elektita" -#: src/sudo.c:788 +#: src/sudo.c:862 #, 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:794 +#: src/sudo.c:868 #, 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:923 +#: src/sudo.c:999 #, c-format msgid "unknown login class %s" msgstr "nekonata ensaluta klaso %s" -#: src/sudo.c:936 +#: src/sudo.c:1012 msgid "unable to set user context" msgstr "ne eblas elekti uzanto-kuntekston" -#: src/sudo.c:950 +#: src/sudo.c:1026 msgid "unable to set supplementary group IDs" msgstr "ne eblas elekti suplementajn grupajn identigilojn" -#: src/sudo.c:957 +#: src/sudo.c:1033 #, 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:963 +#: src/sudo.c:1039 #, 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:970 +#: src/sudo.c:1046 msgid "unable to set process priority" msgstr "ne eblas elekti procezan prioritaton" -#: src/sudo.c:978 +#: src/sudo.c:1054 #, c-format msgid "unable to change root to %s" msgstr "ne eblas ŝanĝi ĉefuzanton al %s" -#: src/sudo.c:991 src/sudo.c:997 src/sudo.c:1003 +#: src/sudo.c:1067 src/sudo.c:1073 src/sudo.c:1080 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "ne eblas ŝanĝi al plenumigkiela uid (%u, %u)" -#: src/sudo.c:1021 +#: src/sudo.c:1098 #, c-format msgid "unable to change directory to %s" msgstr "ne eblas ŝanĝi dosierujon al %s" -#: src/sudo.c:1082 +#: src/sudo.c:1156 #, c-format msgid "unexpected child termination condition: %d" msgstr "neatendita ido ekzekutiĝis laŭ la kondiĉo: %d" -#: src/sudo.c:1214 +#: src/sudo.c:1302 #, 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:1232 +#: src/sudo.c:1320 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "konduta kromprogramo %s ne komprenas listigon de privilegioj" -#: src/sudo.c:1249 +#: src/sudo.c:1337 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "konduta kromprogramo %s ne komprenas la parametron -v" -#: src/sudo.c:1264 +#: src/sudo.c:1352 #, 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_edit.c:203 src/sudo_edit.c:294 +#: src/sudo_edit.c:181 +msgid "unable to restore current working directory" +msgstr "ne eblas restarigi nune kurantan dosierujon" + +#: src/sudo_edit.c:526 src/sudo_edit.c:630 #, c-format msgid "%s: not a regular file" msgstr "%s: ne regula dosiero" -#: src/sudo_edit.c:230 src/sudo_edit.c:332 +#: src/sudo_edit.c:533 +#, c-format +msgid "%s: editing symbolic links is not permitted" +msgstr "%s: redakto de simbolaj ligoj ne estas permesata" + +#: src/sudo_edit.c:536 +#, c-format +msgid "%s: editing files in a writable directory is not permitted" +msgstr "%s: redakto de dosieroj en skribebla dosierujo ne estas permesata" + +#: src/sudo_edit.c:567 src/sudo_edit.c:669 #, c-format msgid "%s: short write" msgstr "%s: mallonga skribado" -#: src/sudo_edit.c:295 +#: src/sudo_edit.c:631 #, c-format msgid "%s left unmodified" msgstr "%s restas ne modifita" -#: src/sudo_edit.c:308 src/sudo_edit.c:483 +#: src/sudo_edit.c:644 src/sudo_edit.c:830 #, c-format msgid "%s unchanged" msgstr "%s ne ŝanĝita" -#: src/sudo_edit.c:321 src/sudo_edit.c:343 +#: src/sudo_edit.c:658 src/sudo_edit.c:680 #, c-format msgid "unable to write to %s" msgstr "ne eblas skribi al %s" -#: src/sudo_edit.c:322 src/sudo_edit.c:341 src/sudo_edit.c:344 -#: src/sudo_edit.c:508 src/sudo_edit.c:512 +#: src/sudo_edit.c:659 src/sudo_edit.c:678 src/sudo_edit.c:681 +#: src/sudo_edit.c:855 src/sudo_edit.c:859 #, c-format msgid "contents of edit session left in %s" msgstr "enhavo de redakta seanco restas en %s" -#: src/sudo_edit.c:340 +#: src/sudo_edit.c:677 msgid "unable to read temporary file" msgstr "ne eblas legi provizoran dosieron" -#: src/sudo_edit.c:417 +#: src/sudo_edit.c:760 msgid "sesh: internal error: odd number of paths" msgstr "sesh: interna eraro: malpara nombro da vojoj" -#: src/sudo_edit.c:419 +#: src/sudo_edit.c:762 msgid "sesh: unable to create temporary files" msgstr "sesh: ne eblas krei provizorajn dosierojn" -#: src/sudo_edit.c:421 src/sudo_edit.c:515 +#: src/sudo_edit.c:764 src/sudo_edit.c:862 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: nekonata eraro %d" -#: src/sudo_edit.c:507 +#: src/sudo_edit.c:854 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:511 +#: src/sudo_edit.c:858 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:554 +#: src/sudo_edit.c:901 #, c-format msgid "unable to change uid to root (%u)" msgstr "ne eblas ŝanĝi uid-on al ĉefuzanto (%u)" -#: src/sudo_edit.c:571 +#: src/sudo_edit.c:918 msgid "plugin error: missing file list for sudoedit" msgstr "kromprograma eraro: malhavas dosieran liston por sudoedit" -#: src/tgetpass.c:90 +#: src/sudo_edit.c:959 src/sudo_edit.c:972 +msgid "unable to read the clock" +msgstr "ne eblas legi la horloĝon" + +#: src/tgetpass.c:107 msgid "no tty present and no askpass program specified" msgstr "neniu tty ĉeestas kaj neniu pasvorto-programo specifita" -#: src/tgetpass.c:99 +#: src/tgetpass.c:116 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "neniu pasvorto-programo specifita, provi valorizi SUDO_ASKPASS-on" -#: src/tgetpass.c:232 +#: src/tgetpass.c:276 #, c-format msgid "unable to set gid to %u" msgstr "ne eblas elekti gid-on al %u" -#: src/tgetpass.c:236 +#: src/tgetpass.c:280 #, c-format msgid "unable to set uid to %u" msgstr "ne eblas elekti uid-on al %u" -#: src/tgetpass.c:241 +#: src/tgetpass.c:285 #, c-format msgid "unable to run %s" msgstr "ne eblas plenumigi: %s" -#: src/utmp.c:278 +#: src/utmp.c:266 msgid "unable to save stdin" msgstr "ne eblas konservi enigon" -#: src/utmp.c:280 +#: src/utmp.c:268 msgid "unable to dup2 stdin" msgstr "ne eblas kopii al enigo" -#: src/utmp.c:283 +#: src/utmp.c:271 msgid "unable to restore stdin" msgstr "ne eblas restarigi enigon" +#~ msgid "internal error, tried allocate zero bytes" +#~ msgstr "interna eraro, provo rezervi neniun bajton" + +#~ msgid "unable to set terminal to raw mode" +#~ msgstr "ne eblas elekti nudan reĝimon ĉe la terminalo" + +#~ msgid "unable to open socket" +#~ msgstr "ne eblas malfermi konektingon" + #~ msgid "%s: %s: %s\n" #~ msgstr "%s: %s: %s\n" @@ -850,9 +901,6 @@ #~ msgid "when listing, list specified user's privileges\n" #~ msgstr "dum listigo, listigi privilegiojn de specifita uzanto\n" -#~ msgid "unable to allocate memory" -#~ msgstr "ne eblas generi memoron" - #~ msgid ": " #~ msgstr ": " Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/po/es.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/po/es.mo differ diff -Nru sudo-1.8.12/po/es.po sudo-1.8.16/po/es.po --- sudo-1.8.12/po/es.po 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/po/es.po 2015-10-31 23:35:24.000000000 +0000 @@ -4,324 +4,327 @@ # Abel Sendón , 2012. msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.7b1\n" +"Project-Id-Version: sudo 1.8.14b1\n" "Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2013-04-02 10:40-0400\n" -"PO-Revision-Date: 2013-07-01 15:57-0300\n" +"POT-Creation-Date: 2015-06-19 16:49-0600\n" +"PO-Revision-Date: 2015-08-13 11:34-0300\n" "Last-Translator: Abel Sendón \n" -"Language-Team: Spanish \n" +"Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Lokalize 1.4\n" +"X-Generator: Poedit 1.5.4\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Poedit-Language: Spanish\n" -"X-Poedit-Country: ARGENTINA\n" +"X-Poedit-SourceCharset: UTF-8\n" -#: common/aix.c:150 -#, c-format +#: lib/util/aix.c:86 lib/util/aix.c:156 msgid "unable to open userdb" msgstr "no se puede abrir userdb" -#: common/aix.c:153 +#: lib/util/aix.c:161 #, c-format msgid "unable to switch to registry \"%s\" for %s" msgstr "no se puede cambiar al registro \"%s\" para %s" -#: common/aix.c:170 -#, c-format +#: lib/util/aix.c:186 msgid "unable to restore registry" msgstr "no se puede restaurar el registro" -#: common/alloc.c:82 -msgid "internal error, tried to emalloc(0)" -msgstr "error interno: trató emalloc(0)" - -#: common/alloc.c:99 -msgid "internal error, tried to emalloc2(0)" -msgstr "error interno: trató emalloc2(0)" - -#: common/alloc.c:101 common/alloc.c:123 common/alloc.c:163 common/alloc.c:187 +#: lib/util/aix.c:205 lib/util/gidlist.c:65 lib/util/gidlist.c:75 +#: lib/util/sudo_conf.c:188 lib/util/sudo_conf.c:268 lib/util/sudo_conf.c:345 +#: lib/util/sudo_conf.c:547 src/conversation.c:75 src/exec.c:867 +#: src/exec_common.c:99 src/exec_common.c:111 src/exec_common.c:118 +#: src/exec_pty.c:690 src/exec_pty.c:698 src/load_plugins.c:55 +#: src/load_plugins.c:68 src/load_plugins.c:209 src/load_plugins.c:232 +#: src/load_plugins.c:297 src/load_plugins.c:312 src/parse_args.c:183 +#: src/parse_args.c:205 src/parse_args.c:373 src/parse_args.c:469 +#: src/parse_args.c:488 src/preserve_fds.c:55 src/preserve_fds.c:138 +#: src/selinux.c:85 src/selinux.c:292 src/selinux.c:415 src/sesh.c:101 +#: src/sudo.c:184 src/sudo.c:361 src/sudo.c:380 src/sudo.c:446 src/sudo.c:596 +#: src/sudo.c:615 src/sudo.c:642 src/sudo.c:651 src/sudo.c:660 src/sudo.c:677 +#: src/sudo.c:724 src/sudo.c:734 src/sudo_edit.c:156 src/sudo_edit.c:377 +#: src/sudo_edit.c:472 src/sudo_edit.c:584 src/sudo_edit.c:604 #, c-format -msgid "internal error, %s overflow" -msgstr "error interno: desbordamiento de %s" +msgid "%s: %s" +msgstr "%s: %s" -#: common/alloc.c:120 -msgid "internal error, tried to ecalloc(0)" -msgstr "error interno: trató ecalloc(0)" +#: lib/util/aix.c:205 lib/util/gidlist.c:65 lib/util/sudo_conf.c:188 +#: lib/util/sudo_conf.c:268 lib/util/sudo_conf.c:345 lib/util/sudo_conf.c:547 +#: src/conversation.c:76 src/exec.c:867 src/exec_common.c:99 +#: src/exec_common.c:111 src/exec_common.c:118 src/exec_pty.c:690 +#: src/exec_pty.c:698 src/load_plugins.c:209 src/load_plugins.c:232 +#: src/load_plugins.c:297 src/load_plugins.c:312 src/parse_args.c:183 +#: src/parse_args.c:205 src/parse_args.c:373 src/parse_args.c:469 +#: src/parse_args.c:488 src/preserve_fds.c:55 src/preserve_fds.c:138 +#: src/selinux.c:85 src/selinux.c:292 src/selinux.c:415 src/sesh.c:101 +#: src/sudo.c:184 src/sudo.c:361 src/sudo.c:380 src/sudo.c:446 +#: src/sudo_edit.c:156 src/sudo_edit.c:377 src/sudo_edit.c:472 +#: src/sudo_edit.c:584 src/sudo_edit.c:604 +msgid "unable to allocate memory" +msgstr "no se puede de asignar memoria" + +#: lib/util/strsignal.c:50 +msgid "Unknown signal" +msgstr "Señal desconocida" -#: common/alloc.c:142 -msgid "internal error, tried to erealloc(0)" -msgstr "error interno: trató erealloc(0)" +#: lib/util/strtoid.c:77 lib/util/strtoid.c:105 lib/util/strtomode.c:49 +#: lib/util/strtonum.c:59 lib/util/strtonum.c:177 +msgid "invalid value" +msgstr "valor inválido" -#: common/alloc.c:161 -msgid "internal error, tried to erealloc3(0)" -msgstr "error interno: trató erealloc3(0)" +#: lib/util/strtoid.c:84 lib/util/strtoid.c:112 lib/util/strtomode.c:55 +#: lib/util/strtonum.c:62 lib/util/strtonum.c:189 +msgid "value too large" +msgstr "valor muy grande" -#: common/alloc.c:185 -msgid "internal error, tried to erecalloc(0)" -msgstr "error interno: trató erecalloc(0)" +#: lib/util/strtoid.c:90 lib/util/strtomode.c:55 lib/util/strtonum.c:62 +#: lib/util/strtonum.c:183 +msgid "value too small" +msgstr "valor muy pequeño" -#: common/error.c:154 +#: lib/util/sudo_conf.c:201 #, c-format -msgid "%s: %s: %s\n" -msgstr "%s:%s: %s\n" +msgid "invalid Path value `%s' in %s, line %u" +msgstr "valor de ruta inválido `%s' en %s, linea %u" -#: common/error.c:157 common/error.c:161 +#: lib/util/sudo_conf.c:367 lib/util/sudo_conf.c:420 #, c-format -msgid "%s: %s\n" -msgstr "%s: %s\n" +msgid "invalid value for %s `%s' in %s, line %u" +msgstr "valor inválido para %s `%s' en %s, linea %u" -#: common/sudo_conf.c:172 +#: lib/util/sudo_conf.c:388 #, c-format -msgid "unsupported group source `%s' in %s, line %d" -msgstr "Fuente de grupo no soportada `%s' en %s, linea %d" +msgid "unsupported group source `%s' in %s, line %u" +msgstr "fuente de grupo no soportada `%s' en %s, linea %u" -#: common/sudo_conf.c:186 +#: lib/util/sudo_conf.c:404 #, c-format -msgid "invalid max groups `%s' in %s, line %d" -msgstr "Máximo de grupos inválido `%s' en %s, linea %d" +msgid "invalid max groups `%s' in %s, line %u" +msgstr "máximo de grupos inválido `%s' en %s, linea %u" -#: common/sudo_conf.c:382 +#: lib/util/sudo_conf.c:563 #, c-format msgid "unable to stat %s" msgstr "no se puede stat en %s" -#: common/sudo_conf.c:385 +#: lib/util/sudo_conf.c:566 #, c-format msgid "%s is not a regular file" msgstr "%s no es un archivo regular" -#: common/sudo_conf.c:388 +#: lib/util/sudo_conf.c:569 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s es adueñado por uid %u, sería %u" -#: common/sudo_conf.c:392 +#: lib/util/sudo_conf.c:573 #, c-format msgid "%s is world writable" msgstr "%s es escribible por todos" -#: common/sudo_conf.c:395 +#: lib/util/sudo_conf.c:576 #, c-format msgid "%s is group writable" msgstr "%s es escribible por el grupo" -#: common/sudo_conf.c:405 src/selinux.c:196 src/selinux.c:209 src/sudo.c:328 +#: lib/util/sudo_conf.c:586 src/selinux.c:200 src/selinux.c:213 src/sudo.c:330 #, c-format msgid "unable to open %s" msgstr "no se pudo abrir %s" -#: compat/strsignal.c:50 -msgid "Unknown signal" -msgstr "Señal desconocida" - -#: src/exec.c:127 src/exec_pty.c:685 +#: src/exec.c:117 src/exec.c:119 src/exec.c:124 src/exec.c:412 src/exec.c:414 +#: src/exec.c:416 src/exec.c:418 src/exec.c:420 src/exec.c:423 src/exec.c:440 +#: src/exec.c:442 src/exec.c:444 src/exec.c:599 src/exec.c:794 +#: src/exec_pty.c:471 src/exec_pty.c:728 src/exec_pty.c:798 src/exec_pty.c:800 +#: src/exec_pty.c:812 src/exec_pty.c:814 src/exec_pty.c:1295 +#: src/exec_pty.c:1297 src/exec_pty.c:1302 src/exec_pty.c:1304 +#: src/exec_pty.c:1318 src/exec_pty.c:1329 src/exec_pty.c:1331 +#: src/exec_pty.c:1333 src/exec_pty.c:1335 src/exec_pty.c:1337 +#: src/exec_pty.c:1339 src/exec_pty.c:1341 src/signal.c:150 #, c-format -msgid "policy plugin failed session initialization" -msgstr "política de plugin falló en la inicialización de sesión " +msgid "unable to set handler for signal %d" +msgstr "no se puede establecer el manejador para señal %d" -#: src/exec.c:132 src/exec_pty.c:701 src/exec_pty.c:1066 src/tgetpass.c:220 -#, c-format +#: src/exec.c:129 src/exec_pty.c:848 src/exec_pty.c:1379 src/tgetpass.c:215 msgid "unable to fork" msgstr "no se puede bifurcar" -#: src/exec.c:259 -#, c-format +#: src/exec.c:307 src/exec.c:315 src/exec.c:872 src/exec_pty.c:595 +#: src/exec_pty.c:600 src/exec_pty.c:658 src/exec_pty.c:665 src/exec_pty.c:952 +#: src/exec_pty.c:962 src/exec_pty.c:1007 src/exec_pty.c:1014 +#: src/exec_pty.c:1444 src/exec_pty.c:1451 src/exec_pty.c:1458 +msgid "unable to add event to queue" +msgstr "no se puede agregar evento a la cola" + +#: src/exec.c:395 msgid "unable to create sockets" msgstr "no se puede crear sockets" -#: src/exec.c:347 src/exec_pty.c:1130 src/exec_pty.c:1268 -#, c-format -msgid "select failed" -msgstr "selección fallida" +#: src/exec.c:451 +msgid "policy plugin failed session initialization" +msgstr "política de plugin falló en la inicialización de sesión " -#: src/exec.c:449 -#, c-format +#: src/exec.c:496 +msgid "error in event loop" +msgstr "error en loop de evento" + +#: src/exec.c:514 msgid "unable to restore tty label" msgstr "no se puede restaurar la etiqueta tty " -#: src/exec_common.c:70 +#: src/exec.c:607 src/exec_pty.c:505 src/signal.c:89 #, c-format +msgid "unable to restore handler for signal %d" +msgstr "no se puede restaurar el manejador para señal %d" + +#: src/exec.c:725 src/exec_pty.c:1186 +msgid "error reading from signal pipe" +msgstr "error al leer desde la tubería de la señal" + +#: src/exec_common.c:67 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "no se puede remover PRIV_PROC_EXEC desde PRIV_LIMIT" -#: src/exec_pty.c:183 -#, c-format +#: src/exec_pty.c:191 msgid "unable to allocate pty" msgstr "no se puede asignar pty" -#: src/exec_pty.c:623 src/exec_pty.c:632 src/exec_pty.c:640 src/exec_pty.c:986 -#: src/exec_pty.c:1063 src/signal.c:126 src/tgetpass.c:217 -#, c-format +#: src/exec_pty.c:772 src/exec_pty.c:781 src/exec_pty.c:789 +#: src/exec_pty.c:1287 src/exec_pty.c:1376 src/signal.c:131 src/tgetpass.c:211 msgid "unable to create pipe" msgstr "no se puede crear tubería" -#: src/exec_pty.c:676 -#, c-format +#: src/exec_pty.c:830 msgid "unable to set terminal to raw mode" msgstr "no se puede establecer la terminal en modo directo" -#: src/exec_pty.c:1042 -#, c-format -msgid "unable to set controlling tty" -msgstr "no se puede establecer el controlador tty" - -#: src/exec_pty.c:1139 -#, c-format -msgid "error reading from signal pipe" -msgstr "error al leer desde la tubería de la señal" - -#: src/exec_pty.c:1160 -#, c-format +#: src/exec_pty.c:1219 msgid "error reading from pipe" msgstr "error al leer de la tubería" -#: src/exec_pty.c:1176 -#, c-format +#: src/exec_pty.c:1244 msgid "error reading from socketpair" msgstr "error leyendo de socketpair" -#: src/exec_pty.c:1180 +#: src/exec_pty.c:1253 #, c-format msgid "unexpected reply type on backchannel: %d" msgstr "tipo de respuesta inesperada en canales alternos %d" -#: src/load_plugins.c:70 src/load_plugins.c:79 src/load_plugins.c:132 -#: src/load_plugins.c:138 src/load_plugins.c:144 src/load_plugins.c:185 -#: src/load_plugins.c:192 src/load_plugins.c:199 src/load_plugins.c:205 +#: src/exec_pty.c:1355 +msgid "unable to set controlling tty" +msgstr "no se puede establecer el controlador tty" + +#: src/load_plugins.c:53 src/load_plugins.c:66 src/load_plugins.c:83 +#: src/load_plugins.c:113 src/load_plugins.c:119 src/load_plugins.c:125 +#: src/load_plugins.c:165 src/load_plugins.c:172 src/load_plugins.c:179 +#: src/load_plugins.c:185 #, c-format msgid "error in %s, line %d while loading plugin `%s'" msgstr "error en %s, línea %d mientras carga plugin `%s'" -#: src/load_plugins.c:72 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" - -#: src/load_plugins.c:81 +#: src/load_plugins.c:85 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" -#: src/load_plugins.c:140 +#: src/load_plugins.c:121 #, c-format msgid "%s must be owned by uid %d" msgstr "%s debe ser propiedad del uid %d" -#: src/load_plugins.c:146 +#: src/load_plugins.c:127 #, c-format msgid "%s must be only be writable by owner" msgstr "%s sólo tener permisos de escritura por el propietario" -#: src/load_plugins.c:187 +#: src/load_plugins.c:167 #, c-format -msgid "unable to dlopen %s: %s" -msgstr "no se puede dlopen %s: %s" +msgid "unable to load %s: %s" +msgstr "no se puede cargar %s: %s" -#: src/load_plugins.c:194 +#: src/load_plugins.c:174 #, c-format msgid "unable to find symbol `%s' in %s" msgstr "no se puede de encontrar el símbolo `%s' en %s" -#: src/load_plugins.c:201 +#: src/load_plugins.c:181 #, c-format msgid "unknown policy type %d found in %s" msgstr "tipo de política desconocido %d encontrado en %s" -#: src/load_plugins.c:207 +#: src/load_plugins.c:187 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "incompatible la versión principal de la política de plugin %d (se esperaba %d) encontrada in %s" -#: src/load_plugins.c:216 +#: src/load_plugins.c:196 #, c-format msgid "ignoring policy plugin `%s' in %s, line %d" msgstr "Ignorando política de plugin `%s' en %s, linea %d" -#: src/load_plugins.c:218 -#, c-format +#: src/load_plugins.c:198 msgid "only a single policy plugin may be specified" msgstr "sólo una política de plugin puede ser especificada" -#: src/load_plugins.c:221 +#: src/load_plugins.c:201 #, c-format msgid "ignoring duplicate policy plugin `%s' in %s, line %d" msgstr "Ignorando política de plugin duplicada `%s' en %s, linea %d" -#: src/load_plugins.c:236 +#: src/load_plugins.c:222 #, c-format msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" msgstr "Ignorando E/S de plugin duplicada `%s' en %s, linea %d" -#: src/load_plugins.c:313 +#: src/load_plugins.c:325 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "la política del plugin %s no incluye un método check_policy" -#: src/net_ifs.c:156 src/net_ifs.c:165 src/net_ifs.c:177 src/net_ifs.c:186 -#: src/net_ifs.c:297 src/net_ifs.c:321 -#, c-format -msgid "load_interfaces: overflow detected" -msgstr "load_interfaces: desbordamiento detectado" - -#: src/net_ifs.c:226 +#: src/net_ifs.c:169 src/net_ifs.c:186 src/net_ifs.c:327 src/sudo.c:441 #, c-format -msgid "unable to open socket" -msgstr "no se puede de abrir socket" +msgid "internal error, %s overflow" +msgstr "error interno: desbordamiento de %s" -#: src/parse_args.c:197 -#, c-format +#: src/parse_args.c:242 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "el argumento -C debe ser un número mayor o igual a 3" -#: src/parse_args.c:286 -#, c-format -msgid "unknown user: %s" -msgstr "usuario desconocido: %s" - -#: src/parse_args.c:345 -#, c-format +#: src/parse_args.c:409 msgid "you may not specify both the `-i' and `-s' options" msgstr "no se deben especificar las opciones '-i' y '-s' simultáneamente" -#: src/parse_args.c:349 -#, c-format +#: src/parse_args.c:413 msgid "you may not specify both the `-i' and `-E' options" msgstr "no se deben especificar las opciones '-i' y '-E' simultáneamente" -#: src/parse_args.c:359 -#, c-format +#: src/parse_args.c:423 msgid "the `-E' option is not valid in edit mode" msgstr "la opción '-E' no es válida en el modo edición" -#: src/parse_args.c:361 -#, c-format +#: src/parse_args.c:425 msgid "you may not specify environment variables in edit mode" msgstr "no se debe especificar variables de entorno en el modo edición" -#: src/parse_args.c:369 -#, c-format +#: src/parse_args.c:433 msgid "the `-U' option may only be used with the `-l' option" msgstr "la opción '-U' sólo se puede usar con la opcion '-l'" -#: src/parse_args.c:373 -#, c-format +#: src/parse_args.c:437 msgid "the `-A' and `-S' options may not be used together" msgstr "las opciones '-A' y '-S' no se pueden utilizar conjuntamente" -#: src/parse_args.c:456 -#, c-format +#: src/parse_args.c:507 msgid "sudoedit is not supported on this platform" msgstr "sudoedit no está soportado en ésta plataforma" -#: src/parse_args.c:529 -#, c-format +#: src/parse_args.c:580 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "puede ser especificada sólo una de las opciones -e, -h, -i, -K, -l, -s, -v o -V" -#: src/parse_args.c:543 +#: src/parse_args.c:594 #, c-format msgid "" "%s - edit files as another user\n" @@ -330,7 +333,7 @@ "%s - edita archivos como otro usuario\n" "\n" -#: src/parse_args.c:545 +#: src/parse_args.c:596 #, c-format msgid "" "%s - execute a command as another user\n" @@ -339,7 +342,7 @@ "%s - ejecuta un comando como otro usuario\n" "\n" -#: src/parse_args.c:550 +#: src/parse_args.c:601 #, c-format msgid "" "\n" @@ -348,468 +351,528 @@ "\n" "Opciones:\n" -#: src/parse_args.c:552 -msgid "use helper program for password prompting\n" -msgstr "utilizar el programa de ayuda para la solicitud de contraseña\n" - -#: src/parse_args.c:555 -msgid "use specified BSD authentication type\n" -msgstr "utiliza tipo de autentificación especificado en BSD\n" - -#: src/parse_args.c:558 -msgid "run command in the background\n" -msgstr "ejecuta un comando en segundo plano\n" - -#: src/parse_args.c:560 -msgid "close all file descriptors >= fd\n" -msgstr "cierra todos los descriptores de archivo >= fd\n" - -#: src/parse_args.c:563 -msgid "run command with specified login class\n" -msgstr "ejecuta un comando con la clase especificada de inicio de sesión\n" - -#: src/parse_args.c:566 -msgid "preserve user environment when executing command\n" -msgstr "preserva entorno del usuario cuando está ejecutando un comando\n" - -#: src/parse_args.c:568 -msgid "edit files instead of running a command\n" -msgstr "edita archivos en vez de ejecutar un comando\n" - -#: src/parse_args.c:570 -msgid "execute command as the specified group\n" -msgstr "ejecuta un comando como el grupo especificado\n" - -#: src/parse_args.c:572 -msgid "set HOME variable to target user's home dir.\n" -msgstr "asigna la variable HOME al directorio de inicio del usuario\n" - -#: src/parse_args.c:574 -msgid "display help message and exit\n" -msgstr "muestra este mensaje de ayuda y sale\n" - -#: src/parse_args.c:576 -msgid "run a login shell as target user\n" -msgstr "ejecuta un intérprete de comandos como un determinado usuario\n" - -#: src/parse_args.c:578 -msgid "remove timestamp file completely\n" -msgstr "remueve un archivo de marca completamente\n" - -#: src/parse_args.c:580 -msgid "invalidate timestamp file\n" -msgstr "archivo de marca inválido\n" - -#: src/parse_args.c:582 -msgid "list user's available commands\n" -msgstr "lista los comandos del usuario disponibles\n" - -#: src/parse_args.c:584 -msgid "non-interactive mode, will not prompt user\n" -msgstr "modo no-interactivo, no se pedirá usuario\n" - -#: src/parse_args.c:586 -msgid "preserve group vector instead of setting to target's\n" -msgstr "preserva el vector de grupos en vez de establecer de objetivo\n" - -#: src/parse_args.c:588 -msgid "use specified password prompt\n" -msgstr "usa la contraseña especificada\n" - -#: src/parse_args.c:591 src/parse_args.c:599 -msgid "create SELinux security context with specified role\n" -msgstr "crea el contexto de seguridad SELinux con la regla especificada\n" - -#: src/parse_args.c:594 -msgid "read password from standard input\n" -msgstr "lee la contraseña desde la entrada estandar\n" - -#: src/parse_args.c:596 -msgid "run a shell as target user\n" -msgstr "ejecuta un intérprete de comandos como un determinado usuario\n" - -#: src/parse_args.c:602 -msgid "when listing, list specified user's privileges\n" -msgstr "cuando está listando, lista los privilegios del usuario especificado\n" - -#: src/parse_args.c:604 -msgid "run command (or edit file) as specified user\n" -msgstr "ejecuta un comando (o edita un archivo) como un usuario específico\n" +#: src/parse_args.c:603 +msgid "use a helper program for password prompting" +msgstr "utiliza un programa auxiliar para la solicitud de contraseña" #: src/parse_args.c:606 -msgid "display version information and exit\n" -msgstr "muestra la información de la versión y sale\n" +msgid "use specified BSD authentication type" +msgstr "utiliza tipo de autentificación especificado en BSD" -#: src/parse_args.c:608 -msgid "update user's timestamp without running a command\n" -msgstr "actualiza la marca del usuario sin ejecutar un comando\n" - -#: src/parse_args.c:610 -msgid "stop processing command line arguments\n" -msgstr "detiene el proceso de argumentos de la línea de comandos\n" +#: src/parse_args.c:609 +msgid "run command in the background" +msgstr "ejecuta un comando en segundo plano" + +#: src/parse_args.c:611 +msgid "close all file descriptors >= num" +msgstr "cierra todos los descriptores de archivo >= num" + +#: src/parse_args.c:614 +msgid "run command with the specified BSD login class" +msgstr "ejecuta un comando con la clase especificada de inicio de sesión BSD" + +#: src/parse_args.c:617 +msgid "preserve user environment when running command" +msgstr "preserva entorno del usuario cuando está ejecutando un comando" + +#: src/parse_args.c:619 +msgid "edit files instead of running a command" +msgstr "edita archivos en vez de ejecutar un comando" + +#: src/parse_args.c:621 +msgid "run command as the specified group name or ID" +msgstr "ejecuta un comando como el ID o grupo especificado" + +#: src/parse_args.c:623 +msgid "set HOME variable to target user's home dir" +msgstr "asigna la variable HOME al directorio de inicio del usuario" + +#: src/parse_args.c:625 +msgid "display help message and exit" +msgstr "muestra este mensaje de ayuda y sale" + +#: src/parse_args.c:627 +msgid "run command on host (if supported by plugin)" +msgstr "ejecuta comando en host (si está soportado por plugin)" + +#: src/parse_args.c:629 +msgid "run login shell as the target user; a command may also be specified" +msgstr "ejecuta un intérprete de comandos como un determinado usuario, un comando también puede ser especificado" + +#: src/parse_args.c:631 +msgid "remove timestamp file completely" +msgstr "remueve un archivo de marca completamente" + +#: src/parse_args.c:633 +msgid "invalidate timestamp file" +msgstr "archivo de marca inválido" + +#: src/parse_args.c:635 +msgid "list user's privileges or check a specific command; use twice for longer format" +msgstr "lista privilegios de usuario o chequea un comando especifico; usar dos veces para formato extenso" + +#: src/parse_args.c:637 +msgid "non-interactive mode, no prompts are used" +msgstr "modo no-interactivo, no se pedirá usuario" + +#: src/parse_args.c:639 +msgid "preserve group vector instead of setting to target's" +msgstr "preserva el vector de grupos en vez de establecer al objetivo" + +#: src/parse_args.c:641 +msgid "use the specified password prompt" +msgstr "usa la contraseña especificada" + +#: src/parse_args.c:644 +msgid "create SELinux security context with specified role" +msgstr "crea el contexto de seguridad SELinux con la regla especificada" + +#: src/parse_args.c:647 +msgid "read password from standard input" +msgstr "lee la contraseña desde la entrada estandar" + +#: src/parse_args.c:649 +msgid "run shell as the target user; a command may also be specified" +msgstr "ejecuta un intérprete de comandos como un determinado usuario, un comando también puede ser especificado" + +#: src/parse_args.c:652 +msgid "create SELinux security context with specified type" +msgstr "crea el contexto de seguridad SELinux con el tipo especificado" + +#: src/parse_args.c:655 +msgid "in list mode, display privileges for user" +msgstr "en modo lista, muestra los privilegios para el usuario" + +#: src/parse_args.c:657 +msgid "run command (or edit file) as specified user name or ID" +msgstr "ejecuta un comando (o edita un archivo) como un ID o usuario específico" + +#: src/parse_args.c:659 +msgid "display version information and exit" +msgstr "muestra la información de la versión y sale" + +#: src/parse_args.c:661 +msgid "update user's timestamp without running a command" +msgstr "actualiza la marca del usuario sin ejecutar un comando" + +#: src/parse_args.c:663 +msgid "stop processing command line arguments" +msgstr "detiene el proceso de argumentos de la línea de comandos" -#: src/selinux.c:77 -#, c-format +#: src/selinux.c:79 msgid "unable to open audit system" msgstr "no se puede de abrir el sistema de auditoría" -#: src/selinux.c:85 -#, c-format +#: src/selinux.c:89 msgid "unable to send audit message" msgstr "no se puede enviar mensaje de auditoría" -#: src/selinux.c:113 +#: src/selinux.c:117 #, c-format msgid "unable to fgetfilecon %s" msgstr "no se puede fgetfilecon %s" -#: src/selinux.c:118 +#: src/selinux.c:122 #, c-format msgid "%s changed labels" msgstr "%s etiquetas cambiadas" -#: src/selinux.c:123 +#: src/selinux.c:127 #, c-format msgid "unable to restore context for %s" msgstr "no se puede restaurar el contexto para %s" -#: src/selinux.c:163 +#: src/selinux.c:167 #, c-format msgid "unable to open %s, not relabeling tty" msgstr "no se puede abrir %s, no volver a etiquetar tty" -#: src/selinux.c:172 -#, c-format +#: src/selinux.c:176 msgid "unable to get current tty context, not relabeling tty" msgstr "no se puede obtener el actual contexto tty, no volver a etiquetar tty" -#: src/selinux.c:179 -#, c-format +#: src/selinux.c:183 msgid "unable to get new tty context, not relabeling tty" msgstr "no se puede obtener el nuevo contexto tty, no volver a etiquetar tty" -#: src/selinux.c:186 -#, c-format +#: src/selinux.c:190 msgid "unable to set new tty context" msgstr "no se puede establecer nuevo contexto tty" -#: src/selinux.c:252 +#: src/selinux.c:256 #, c-format msgid "you must specify a role for type %s" msgstr "se debe especificar una regla por tipo %s" -#: src/selinux.c:258 +#: src/selinux.c:262 #, c-format msgid "unable to get default type for role %s" msgstr "no se puede obtener el tipo de regla predeterminada %s" -#: src/selinux.c:276 +#: src/selinux.c:280 #, c-format msgid "failed to set new role %s" msgstr "falló al establecer nueva regla %s" -#: src/selinux.c:280 +#: src/selinux.c:284 #, c-format msgid "failed to set new type %s" msgstr "falló al establecer nuevo tipo %s" -#: src/selinux.c:289 +#: src/selinux.c:296 #, c-format msgid "%s is not a valid context" msgstr "%s no es un contexto válido" -#: src/selinux.c:324 -#, c-format +#: src/selinux.c:331 msgid "failed to get old_context" msgstr "falló al obtener old_context" -#: src/selinux.c:330 -#, c-format +#: src/selinux.c:337 msgid "unable to determine enforcing mode." msgstr "no se puede determinar el método de forzado" -#: src/selinux.c:342 +#: src/selinux.c:354 #, c-format -msgid "unable to setup tty context for %s" -msgstr "no se puede establecer el contexto tty para %s" +msgid "unable to set tty context to %s" +msgstr "no se puede establecer el contexto tty a %s" -#: src/selinux.c:381 +#: src/selinux.c:393 #, c-format msgid "unable to set exec context to %s" msgstr "no se puede establecer el contexto de ejecución a %s" -#: src/selinux.c:388 +#: src/selinux.c:400 #, c-format msgid "unable to set key creation context to %s" msgstr "no se puede establecer la clave de creación de contexto a %s" -#: src/sesh.c:57 -#, c-format +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "requiere al menos un argumento" -#: src/sesh.c:78 src/sudo.c:1126 +#: src/sesh.c:106 +#, c-format +msgid "unable to run %s as a login shell" +msgstr "no se puede ejecutar %s como un login" + +#: src/sesh.c:111 src/sudo.c:1211 #, c-format msgid "unable to execute %s" msgstr "no se puede ejecutar %s" -#: src/solaris.c:88 +#: src/signal.c:71 #, c-format +msgid "unable to save handler for signal %d" +msgstr "no se puede guardar el manejador para la señal %d" + +#: src/solaris.c:79 msgid "resource control limit has been reached" msgstr "el límite de control de recursos ha sido alcanzado" -#: src/solaris.c:91 +#: src/solaris.c:82 #, c-format msgid "user \"%s\" is not a member of project \"%s\"" msgstr "el usuario \"%s\" no es miembro del proyecto \"%s\"" -#: src/solaris.c:95 -#, c-format +#: src/solaris.c:86 msgid "the invoking task is final" msgstr "la tarea que invoca es definitiva" -#: src/solaris.c:98 +#: src/solaris.c:89 #, c-format msgid "could not join project \"%s\"" msgstr "no podría unirse al proyecto \"%s\"" -#: src/solaris.c:103 +#: src/solaris.c:94 #, c-format msgid "no resource pool accepting default bindings exists for project \"%s\"" msgstr "no hay fondo de recursos aceptando las asignaciones existentes para el proyecto \"%s\"" -#: src/solaris.c:107 +#: src/solaris.c:98 #, c-format msgid "specified resource pool does not exist for project \"%s\"" msgstr "el fondo de recursos especificado no existe para el proyecto \"%s\"" -#: src/solaris.c:111 +#: src/solaris.c:102 #, c-format msgid "could not bind to default resource pool for project \"%s\"" msgstr "no se podría enlazar al fondo de recursos predeterminado para el proyecto \"%s\" " -#: src/solaris.c:117 +#: src/solaris.c:108 #, c-format msgid "setproject failed for project \"%s\"" msgstr "configuración del proyecto fallida \"%s\" " -#: src/solaris.c:119 +#: src/solaris.c:110 #, c-format msgid "warning, resource control assignment failed for project \"%s\"" msgstr "aviso, el control de asignación de recursos falló para el proyecto \"%s\"" -#: src/sudo.c:196 +#: src/sudo.c:195 #, c-format msgid "Sudo version %s\n" msgstr "Sudo versión %s\n" -#: src/sudo.c:198 +#: src/sudo.c:197 #, c-format msgid "Configure options: %s\n" msgstr "Opciones de configuración: %s\n" -#: src/sudo.c:203 -#, c-format +#: src/sudo.c:205 msgid "fatal error, unable to load plugins" msgstr "error fatal, no se puede cargar los plugins" -#: src/sudo.c:211 -#, c-format +#: src/sudo.c:213 msgid "unable to initialize policy plugin" msgstr "no se puede inicializar la política de plugin" -#: src/sudo.c:268 +#: src/sudo.c:269 #, c-format msgid "error initializing I/O plugin %s" msgstr "error al inicializar los plugins de E/S %s" -#: src/sudo.c:293 +#: src/sudo.c:295 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "inesperado modo sudo 0x%x" -#: src/sudo.c:413 -#, c-format +#: src/sudo.c:426 msgid "unable to get group vector" msgstr "no se puede obtener el vector de grupo" -#: src/sudo.c:465 +#: src/sudo.c:484 #, c-format msgid "unknown uid %u: who are you?" msgstr "uid desconocido %u: quién es usted?" -#: src/sudo.c:802 +#: src/sudo.c:807 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s debe ser propiedad del uid %d y tener el bit setuid establecido" -#: src/sudo.c:805 +#: src/sudo.c:810 #, 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 "el uid no es %d, es %s en un sistema de archivos con la opción 'nosuid' establecida o un sistema de archivos NFS sin privilegios de root?" -#: src/sudo.c:811 +#: src/sudo.c:816 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "el uid efectivo no es %d, sudo está instalado con setuid root?" -#: src/sudo.c:915 +#: src/sudo.c:947 #, c-format msgid "unknown login class %s" msgstr "clase de inicio de sesión desconocida %s" -#: src/sudo.c:929 src/sudo.c:932 -#, c-format +#: src/sudo.c:960 msgid "unable to set user context" msgstr "no se puede establecer el contexto del usuario" -#: src/sudo.c:944 -#, c-format +#: src/sudo.c:974 msgid "unable to set supplementary group IDs" msgstr "no se puede establecer el grupo suplementario de IDs" -#: src/sudo.c:951 +#: src/sudo.c:981 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "no se puede establecer el gid efectivo para ejecutar como gid %u" -#: src/sudo.c:957 +#: src/sudo.c:987 #, c-format msgid "unable to set gid to runas gid %u" msgstr "no se puede establecer el gid para ejecutar como gid %u" -#: src/sudo.c:964 -#, c-format +#: src/sudo.c:994 msgid "unable to set process priority" msgstr "no se puede establecer la prioridad de proceso" -#: src/sudo.c:972 +#: src/sudo.c:1002 #, c-format msgid "unable to change root to %s" msgstr "no se puede cambiar de root a %s" -#: src/sudo.c:979 src/sudo.c:985 src/sudo.c:991 +#: src/sudo.c:1015 src/sudo.c:1021 src/sudo.c:1027 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "no se puede cambiar a runas uid (%u, %u)" -#: src/sudo.c:1005 +#: src/sudo.c:1045 #, c-format msgid "unable to change directory to %s" msgstr "no se puede cambiar al directorio %s" -#: src/sudo.c:1089 +#: src/sudo.c:1106 #, c-format msgid "unexpected child termination condition: %d" msgstr "inesperada terminación de condición hija: %d" -#: src/sudo.c:1146 +#: src/sudo.c:1239 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "la política del plugin %s no incluye un método `check_policy' " -#: src/sudo.c:1159 +#: src/sudo.c:1257 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "la política del plugin %s no soporta listado de privilegios" -#: src/sudo.c:1171 +#: src/sudo.c:1274 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "la política del plugin %s no soporta la opción -v" -#: src/sudo.c:1183 +#: src/sudo.c:1289 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "la política del plugin %s no soporta las opciones -k/-K" -#: src/sudo_edit.c:110 -#, c-format -msgid "unable to change uid to root (%u)" -msgstr "no se puede cambiar uid a root (%u)" - -#: src/sudo_edit.c:142 -#, c-format -msgid "plugin error: missing file list for sudoedit" -msgstr "error de plugin: falta la lista de archivos para sudoedit" - -#: src/sudo_edit.c:170 src/sudo_edit.c:270 +#: src/sudo_edit.c:202 src/sudo_edit.c:292 #, c-format msgid "%s: not a regular file" msgstr "%s: no es un archivo regular" -#: src/sudo_edit.c:204 src/sudo_edit.c:306 +#: src/sudo_edit.c:229 src/sudo_edit.c:330 #, c-format msgid "%s: short write" msgstr "%s: escritura corta" -#: src/sudo_edit.c:271 +#: src/sudo_edit.c:293 #, c-format msgid "%s left unmodified" msgstr "%s sin modificar" -#: src/sudo_edit.c:284 +#: src/sudo_edit.c:306 src/sudo_edit.c:489 #, c-format msgid "%s unchanged" msgstr "%s sin cambios" -#: src/sudo_edit.c:296 src/sudo_edit.c:317 +#: src/sudo_edit.c:319 src/sudo_edit.c:341 #, c-format msgid "unable to write to %s" msgstr "no se puede escribir en %s" -#: src/sudo_edit.c:297 src/sudo_edit.c:315 src/sudo_edit.c:318 +#: src/sudo_edit.c:320 src/sudo_edit.c:339 src/sudo_edit.c:342 +#: src/sudo_edit.c:514 src/sudo_edit.c:518 #, c-format msgid "contents of edit session left in %s" msgstr "los contenidos de edición de sesión se dejan en %s" -#: src/sudo_edit.c:314 -#, c-format +#: src/sudo_edit.c:338 msgid "unable to read temporary file" msgstr "no se puede leer el archivo temporal" -#: src/tgetpass.c:89 +#: src/sudo_edit.c:419 +msgid "sesh: internal error: odd number of paths" +msgstr "sesh: error interno: número de rutas impar" + +#: src/sudo_edit.c:421 +msgid "sesh: unable to create temporary files" +msgstr "sesh: no se puede crear archivos temporales" + +#: src/sudo_edit.c:423 src/sudo_edit.c:521 +#, c-format +msgid "sesh: unknown error %d" +msgstr "sesh: error desconocido %d" + +#: src/sudo_edit.c:513 +msgid "unable to copy temporary files back to their original location" +msgstr "no se puede copiar los archivos temporales nuevamente a su ubicación original" + +#: src/sudo_edit.c:517 +msgid "unable to copy some of the temporary files back to their original location" +msgstr "no se puede copiar algunos de los archivos temporales nuevamente a su ubicación original" + +#: src/sudo_edit.c:560 #, c-format +msgid "unable to change uid to root (%u)" +msgstr "no se puede cambiar uid a root (%u)" + +#: src/sudo_edit.c:577 +msgid "plugin error: missing file list for sudoedit" +msgstr "error de plugin: falta la lista de archivos para sudoedit" + +#: src/sudo_edit.c:618 src/sudo_edit.c:631 +msgid "unable to read the clock" +msgstr "no se leer el reloj" + +#: src/tgetpass.c:83 msgid "no tty present and no askpass program specified" msgstr "sin tty presente y no hay programa askpass especificado" -#: src/tgetpass.c:98 -#, c-format +#: src/tgetpass.c:92 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "no hay programa askpass especificado, intente establecer SUDO_ASKPASS" -#: src/tgetpass.c:230 +#: src/tgetpass.c:226 #, c-format msgid "unable to set gid to %u" msgstr "no se puede establecer el gid a %u" -#: src/tgetpass.c:234 +#: src/tgetpass.c:230 #, c-format msgid "unable to set uid to %u" msgstr "no se puede establecer el uid a %u" -#: src/tgetpass.c:239 +#: src/tgetpass.c:235 #, c-format msgid "unable to run %s" msgstr "no se puede ejecutar %s" -#: src/utmp.c:278 -#, c-format +#: src/utmp.c:269 msgid "unable to save stdin" msgstr "no se puede guardar stdin" -#: src/utmp.c:280 -#, c-format +#: src/utmp.c:271 msgid "unable to dup2 stdin" msgstr "no se puede hacer dup2 stdin" -#: src/utmp.c:283 -#, c-format +#: src/utmp.c:274 msgid "unable to restore stdin" msgstr "no se puede restaurar stdin" -#~ msgid "unable to allocate memory" -#~ msgstr "no se puede de asignar memoria" +#~ msgid "internal error, tried to emalloc(0)" +#~ msgstr "error interno: trató emalloc(0)" + +#~ msgid "internal error, tried to emalloc2(0)" +#~ msgstr "error interno: trató emalloc2(0)" + +#~ msgid "internal error, tried to ecalloc(0)" +#~ msgstr "error interno: trató ecalloc(0)" + +#~ msgid "internal error, tried to erealloc(0)" +#~ msgstr "error interno: trató erealloc(0)" + +#~ msgid "internal error, tried to erealloc3(0)" +#~ msgstr "error interno: trató erealloc3(0)" + +#~ msgid "internal error, tried to erecalloc(0)" +#~ msgstr "error interno: trató erecalloc(0)" + +#~ msgid "%s: %s: %s\n" +#~ msgstr "%s:%s: %s\n" + +#~ msgid "%s: %s\n" +#~ msgstr "%s: %s\n" + +#~ msgid "select failed" +#~ msgstr "selección fallida" + +#~ msgid "load_interfaces: overflow detected" +#~ msgstr "load_interfaces: desbordamiento detectado" + +#~ msgid "unable to open socket" +#~ msgstr "no se puede de abrir socket" + +#~ msgid "list user's available commands\n" +#~ msgstr "lista los comandos del usuario disponibles\n" + +#~ msgid "run a shell as target user\n" +#~ msgstr "ejecuta un intérprete de comandos como un determinado usuario\n" + +#~ msgid "when listing, list specified user's privileges\n" +#~ msgstr "cuando está listando, lista los privilegios del usuario especificado\n" #~ msgid ": " #~ msgstr ": " Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/po/fi.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/po/fi.mo differ diff -Nru sudo-1.8.12/po/fi.po sudo-1.8.16/po/fi.po --- sudo-1.8.12/po/fi.po 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/po/fi.po 2016-03-17 16:13:10.000000000 +0000 @@ -1,14 +1,14 @@ # Finnish messages for sudo. # This file is put in the public domain. # This file is distributed under the same license as the sudo package. -# Jorma Karvonen , 2011-2014. +# Jorma Karvonen , 2011-2015. # msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.12b1\n" +"Project-Id-Version: sudo 1.8.15rc3\n" "Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-10-27 12:35-0600\n" -"PO-Revision-Date: 2014-11-10 18:37+0200\n" +"POT-Creation-Date: 2015-10-24 06:26-0600\n" +"PO-Revision-Date: 2015-11-21 10:04+0200\n" "Last-Translator: Jorma Karvonen \n" "Language-Team: Finnish \n" "Language: fi\n" @@ -16,303 +16,319 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Poedit 1.7.4\n" -#: lib/util/aix.c:92 lib/util/aix.c:151 +#: lib/util/aix.c:85 lib/util/aix.c:155 msgid "unable to open userdb" msgstr "userdb-käyttäjätietokannan avaaminen epäonnistui" -#: lib/util/aix.c:156 +#: lib/util/aix.c:160 #, c-format msgid "unable to switch to registry \"%s\" for %s" msgstr "vaihtaminen registeröitymiseen ”%s” käyttäjälle %s epäonnistui" -#: lib/util/aix.c:175 +#: lib/util/aix.c:185 msgid "unable to restore registry" msgstr "rekisteröitymisen palauttaminen epäonnistui" -#: lib/util/alloc.c:68 lib/util/alloc.c:85 lib/util/alloc.c:106 -#: lib/util/alloc.c:128 lib/util/alloc.c:147 lib/util/alloc.c:170 -msgid "internal error, tried allocate zero bytes" -msgstr "sisäinen virhe, yritettiin varata nolla tavua" - -#: lib/util/alloc.c:87 lib/util/alloc.c:109 lib/util/alloc.c:149 -#: lib/util/alloc.c:172 src/net_ifs.c:174 src/net_ifs.c:191 src/net_ifs.c:325 -#, c-format -msgid "internal error, %s overflow" -msgstr "sisäinen virhe, %s-ylivuoto" - -#: lib/util/gidlist.c:78 src/load_plugins.c:61 src/load_plugins.c:74 -#: src/sudo.c:572 src/sudo.c:591 src/sudo.c:618 src/sudo.c:627 src/sudo.c:636 -#: src/sudo.c:653 src/sudo.c:700 src/sudo.c:710 +#: lib/util/aix.c:204 lib/util/gidlist.c:64 lib/util/gidlist.c:74 +#: lib/util/sudo_conf.c:185 lib/util/sudo_conf.c:265 lib/util/sudo_conf.c:342 +#: lib/util/sudo_conf.c:544 src/conversation.c:75 src/exec.c:863 +#: src/exec_common.c:96 src/exec_common.c:108 src/exec_common.c:115 +#: src/exec_pty.c:684 src/exec_pty.c:692 src/load_plugins.c:52 +#: src/load_plugins.c:65 src/load_plugins.c:208 src/load_plugins.c:231 +#: src/load_plugins.c:296 src/load_plugins.c:311 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:414 src/sesh.c:102 +#: src/sudo.c:182 src/sudo.c:371 src/sudo.c:390 src/sudo.c:454 src/sudo.c:608 +#: src/sudo.c:627 src/sudo.c:654 src/sudo.c:663 src/sudo.c:672 src/sudo.c:689 +#: src/sudo.c:746 src/sudo.c:756 src/sudo.c:780 src/sudo.c:1160 +#: src/sudo.c:1162 src/sudo.c:1168 src/sudo.c:1176 src/sudo_edit.c:151 +#: src/sudo_edit.c:602 src/sudo_edit.c:699 src/sudo_edit.c:811 +#: src/sudo_edit.c:831 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/util/strsignal.c:50 +#: lib/util/aix.c:204 lib/util/gidlist.c:64 lib/util/sudo_conf.c:185 +#: lib/util/sudo_conf.c:265 lib/util/sudo_conf.c:342 lib/util/sudo_conf.c:544 +#: src/conversation.c:76 src/exec.c:863 src/exec_common.c:96 +#: src/exec_common.c:108 src/exec_common.c:115 src/exec_pty.c:684 +#: src/exec_pty.c:692 src/load_plugins.c:208 src/load_plugins.c:231 +#: src/load_plugins.c:296 src/load_plugins.c:311 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:414 src/sesh.c:102 +#: src/sudo.c:182 src/sudo.c:371 src/sudo.c:390 src/sudo.c:454 src/sudo.c:780 +#: src/sudo.c:1160 src/sudo.c:1162 src/sudo.c:1168 src/sudo.c:1176 +#: src/sudo_edit.c:151 src/sudo_edit.c:602 src/sudo_edit.c:699 +#: src/sudo_edit.c:811 src/sudo_edit.c:831 +msgid "unable to allocate memory" +msgstr "muistin varaaminen epäonnistui" + +#: lib/util/strsignal.c:48 msgid "Unknown signal" msgstr "Tuntematon signaali" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:65 lib/util/strtonum.c:183 +#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:48 +#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "virheellinen arvo" -#: lib/util/strtoid.c:90 lib/util/strtoid.c:118 lib/util/strtomode.c:61 -#: lib/util/strtonum.c:68 lib/util/strtonum.c:195 +#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:54 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "arvo on liian suuri" -#: lib/util/strtoid.c:96 lib/util/strtomode.c:61 lib/util/strtonum.c:68 -#: lib/util/strtonum.c:189 +#: lib/util/strtoid.c:89 lib/util/strtomode.c:54 lib/util/strtonum.c:61 +#: lib/util/strtonum.c:182 msgid "value too small" msgstr "arvo on liian pieni" -#: lib/util/sudo_conf.c:181 +#: lib/util/sudo_conf.c:198 #, c-format msgid "invalid Path value `%s' in %s, line %u" msgstr "virheellinen Polku-arvo ”%s” tiedostossa %s, rivi %u" -#: lib/util/sudo_conf.c:335 lib/util/sudo_conf.c:388 +#: lib/util/sudo_conf.c:364 lib/util/sudo_conf.c:417 #, c-format msgid "invalid value for %s `%s' in %s, line %u" msgstr "virheellinen arvo kohteelle %s ”%s” tiedostossa %s, rivi %u" -#: lib/util/sudo_conf.c:356 +#: lib/util/sudo_conf.c:385 #, c-format msgid "unsupported group source `%s' in %s, line %u" msgstr "tukematon ryhmälähde ”%s” tiedostossa %s, rivi %u" -#: lib/util/sudo_conf.c:372 +#: lib/util/sudo_conf.c:401 #, c-format msgid "invalid max groups `%s' in %s, line %u" msgstr "virheellinen ryhmien ”%s” enimmäismäärä tiedostossa %s, rivi %u" -#: lib/util/sudo_conf.c:522 +#: lib/util/sudo_conf.c:560 #, c-format msgid "unable to stat %s" msgstr "käskyn stat %s suorittaminen epäonnistui" -#: lib/util/sudo_conf.c:525 +#: lib/util/sudo_conf.c:563 #, c-format msgid "%s is not a regular file" msgstr "%s ei ole tavallinen tiedosto" # ensimmäinen parametri on path -#: lib/util/sudo_conf.c:528 +#: lib/util/sudo_conf.c:566 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "polun %s omistaja on %u, pitäisi olla %u" -#: lib/util/sudo_conf.c:532 +#: lib/util/sudo_conf.c:570 #, c-format msgid "%s is world writable" msgstr "%s on yleiskirjoitettava" -#: lib/util/sudo_conf.c:535 +#: lib/util/sudo_conf.c:573 #, c-format msgid "%s is group writable" msgstr "%s on ryhmäkirjoitettava" -#: lib/util/sudo_conf.c:545 src/selinux.c:196 src/selinux.c:209 src/sudo.c:341 +#: lib/util/sudo_conf.c:583 src/selinux.c:199 src/selinux.c:212 src/sudo.c:340 #, c-format msgid "unable to open %s" msgstr "kohteen %s avaaminen epäonnistui" -#: src/exec.c:123 src/exec.c:128 src/exec.c:423 src/exec.c:425 src/exec.c:427 -#: src/exec.c:429 src/exec.c:431 src/exec.c:433 src/exec.c:436 src/exec.c:453 -#: src/exec.c:455 src/exec.c:457 src/exec.c:605 src/exec.c:800 -#: src/exec_pty.c:480 src/exec_pty.c:736 src/exec_pty.c:806 src/exec_pty.c:808 -#: src/exec_pty.c:820 src/exec_pty.c:1308 src/exec_pty.c:1310 -#: src/exec_pty.c:1315 src/exec_pty.c:1317 src/exec_pty.c:1331 -#: src/exec_pty.c:1342 src/exec_pty.c:1344 src/exec_pty.c:1346 -#: src/exec_pty.c:1348 src/exec_pty.c:1350 src/exec_pty.c:1352 -#: src/exec_pty.c:1354 src/signal.c:156 +#: src/exec.c:114 src/exec.c:116 src/exec.c:121 src/exec.c:409 src/exec.c:411 +#: src/exec.c:413 src/exec.c:415 src/exec.c:417 src/exec.c:419 src/exec.c:422 +#: src/exec.c:438 src/exec.c:440 src/exec.c:595 src/exec.c:790 +#: src/exec_pty.c:466 src/exec_pty.c:722 src/exec_pty.c:792 src/exec_pty.c:794 +#: src/exec_pty.c:806 src/exec_pty.c:808 src/exec_pty.c:1285 +#: src/exec_pty.c:1287 src/exec_pty.c:1292 src/exec_pty.c:1294 +#: src/exec_pty.c:1308 src/exec_pty.c:1319 src/exec_pty.c:1321 +#: src/exec_pty.c:1323 src/exec_pty.c:1325 src/exec_pty.c:1327 +#: src/exec_pty.c:1329 src/exec_pty.c:1331 src/signal.c:147 #, c-format msgid "unable to set handler for signal %d" msgstr "käsittelijän asettaminen signaalille %d epäonnistui" -#: src/exec.c:135 src/exec_pty.c:845 -msgid "policy plugin failed session initialization" -msgstr "Menettelytapalisäosa epäonnistui istunnon alustamisessa" - -#: src/exec.c:140 src/exec_pty.c:861 src/exec_pty.c:1392 src/tgetpass.c:221 +#: src/exec.c:126 src/exec_pty.c:838 src/exec_pty.c:1369 src/tgetpass.c:265 msgid "unable to fork" msgstr "fork-kutsu epäonnistui" -#: src/exec.c:318 src/exec.c:326 src/exec.c:877 src/exec_pty.c:604 -#: src/exec_pty.c:609 src/exec_pty.c:667 src/exec_pty.c:674 src/exec_pty.c:965 -#: src/exec_pty.c:975 src/exec_pty.c:1020 src/exec_pty.c:1027 -#: src/exec_pty.c:1457 src/exec_pty.c:1464 src/exec_pty.c:1471 +#: src/exec.c:304 src/exec.c:312 src/exec.c:868 src/exec_pty.c:604 +#: src/exec_pty.c:611 src/exec_pty.c:654 src/exec_pty.c:659 src/exec_pty.c:942 +#: src/exec_pty.c:952 src/exec_pty.c:997 src/exec_pty.c:1004 +#: src/exec_pty.c:1434 src/exec_pty.c:1441 src/exec_pty.c:1448 msgid "unable to add event to queue" msgstr "tapahtuman lisääminen jonoon epäonnistui" -#: src/exec.c:406 +#: src/exec.c:392 msgid "unable to create sockets" msgstr "vastakkeiden luominen epäonnistui" -#: src/exec.c:502 +#: src/exec.c:447 +msgid "policy plugin failed session initialization" +msgstr "Menettelytapalisäosa epäonnistui istunnon alustamisessa" + +#: src/exec.c:492 msgid "error in event loop" msgstr "virhe tapahtumasilmukassa" -#: src/exec.c:520 +#: src/exec.c:510 msgid "unable to restore tty label" msgstr "tty-nimiön palauttaminen epäonnistui" -#: src/exec.c:613 src/exec_pty.c:514 src/signal.c:95 +#: src/exec.c:603 src/exec_pty.c:498 src/signal.c:86 #, c-format msgid "unable to restore handler for signal %d" msgstr "käsittelijän palauttaminen signaalille %d epäonnistui" -#: src/exec.c:731 src/exec_pty.c:1199 +#: src/exec.c:721 src/exec_pty.c:1176 msgid "error reading from signal pipe" msgstr "virhe luettaessa signaaliputkesta" # Solaris privileges, remove PRIV_PROC_EXEC post-execve. -#: src/exec_common.c:73 +#: src/exec_common.c:64 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "kohteen PRIV_PROC_EXEC poistaminen kohteesta PRIV_LIMIT epäonnistui" -#: src/exec_pty.c:200 +#: src/exec_pty.c:188 msgid "unable to allocate pty" msgstr "pty:n varaaminen epäonnistui" -#: src/exec_pty.c:780 src/exec_pty.c:789 src/exec_pty.c:797 -#: src/exec_pty.c:1300 src/exec_pty.c:1389 src/signal.c:137 src/tgetpass.c:218 +#: src/exec_pty.c:766 src/exec_pty.c:775 src/exec_pty.c:783 +#: src/exec_pty.c:1277 src/exec_pty.c:1366 src/signal.c:128 src/tgetpass.c:261 msgid "unable to create pipe" msgstr "putken luominen epäonnistui" -#: src/exec_pty.c:836 -msgid "unable to set terminal to raw mode" -msgstr "pääteikkunan asentaminen raakatilaan epäonnistui" - -#: src/exec_pty.c:1232 +#: src/exec_pty.c:1209 msgid "error reading from pipe" msgstr "virhe luettaessa putkesta" -#: src/exec_pty.c:1257 +#: src/exec_pty.c:1234 msgid "error reading from socketpair" msgstr "virhe luettaessa vastakeparista" -#: src/exec_pty.c:1266 +#: src/exec_pty.c:1243 #, c-format msgid "unexpected reply type on backchannel: %d" msgstr "odottamaton vastaustyyppi paluukanavalla: %d" # Istunnolla voi olla ohjaava tty. Istunnon yksi prosessiryhmä voi olla edustaprosessiryhmä ja toimia siten ohjaavana tty:nä, joka vastaanottaa tty-syötteen ja -signaalit. -#: src/exec_pty.c:1368 +#: src/exec_pty.c:1345 msgid "unable to set controlling tty" msgstr "ohjaavan tty:n asettaminen epäonnistui" -#: src/load_plugins.c:59 src/load_plugins.c:72 src/load_plugins.c:89 -#: src/load_plugins.c:142 src/load_plugins.c:148 src/load_plugins.c:154 -#: src/load_plugins.c:195 src/load_plugins.c:202 src/load_plugins.c:209 -#: src/load_plugins.c:215 +#: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:80 +#: src/load_plugins.c:110 src/load_plugins.c:116 src/load_plugins.c:122 +#: src/load_plugins.c:163 src/load_plugins.c:171 src/load_plugins.c:178 +#: src/load_plugins.c:184 #, c-format msgid "error in %s, line %d while loading plugin `%s'" msgstr "virhe tiedostossa %s, rivi %d alustettaessa lisäosaa ”%s”" -#: src/load_plugins.c:91 +#: src/load_plugins.c:82 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" # ensimmäinen parametri on path -#: src/load_plugins.c:150 +#: src/load_plugins.c:118 #, c-format msgid "%s must be owned by uid %d" msgstr "polun %s omistajan on oltava uid %d" # parametri on path -#: src/load_plugins.c:156 +#: src/load_plugins.c:124 #, c-format msgid "%s must be only be writable by owner" msgstr "polun %s on oltava vain omistajan kirjoitettava" -#: src/load_plugins.c:197 +#: src/load_plugins.c:165 #, c-format msgid "unable to load %s: %s" msgstr "kohteen %s lataaminen epäonnistui: %s" -#: src/load_plugins.c:204 +#: src/load_plugins.c:173 #, c-format msgid "unable to find symbol `%s' in %s" msgstr "symbolin ”%s” löytäminen kohteesta %s epäonnistui" -#: src/load_plugins.c:211 +#: src/load_plugins.c:180 #, c-format msgid "unknown policy type %d found in %s" msgstr "tuntematon menettelytapatyyppi %d löytyi kohteesta %s" -#: src/load_plugins.c:217 +#: src/load_plugins.c:186 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "yhteensopimaton lisäosan major-versio %d (odotettiin %d) löytyi kohteesta %s" -#: src/load_plugins.c:226 +#: src/load_plugins.c:195 #, c-format msgid "ignoring policy plugin `%s' in %s, line %d" msgstr "ohitetaan menettelytapaliitännäinen ”%s” tiedostossa %s, rivi %d" -#: src/load_plugins.c:228 +#: src/load_plugins.c:197 msgid "only a single policy plugin may be specified" msgstr "vain yksi menettelytapalisäosa voidaan määritellä" -#: src/load_plugins.c:231 +#: src/load_plugins.c:200 #, c-format msgid "ignoring duplicate policy plugin `%s' in %s, line %d" msgstr "ohitetaan menettelytapalisäosan ”%s” kaksoiskappale tiedostossa %s, rivi %d" -#: src/load_plugins.c:249 +#: src/load_plugins.c:221 #, c-format msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" msgstr "ohitetaan siirräntälisäosan ”%s” kaksoiskappale tiedostossa %s, rivi %d" -#: src/load_plugins.c:338 +#: src/load_plugins.c:324 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "menettelytapalisäosa %s ei sisällä check_policy-metodia" -#: src/net_ifs.c:236 -msgid "unable to open socket" -msgstr "vastakkeen avaaminen epäonnistui" +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:449 +#, c-format +msgid "internal error, %s overflow" +msgstr "sisäinen virhe, %s-ylivuoto" -#: src/parse_args.c:241 +#: src/parse_args.c:239 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "valitsimen -C argumentin on oltava vähintään 3" -#: src/parse_args.c:403 +#: src/parse_args.c:406 msgid "you may not specify both the `-i' and `-s' options" msgstr "sekä valitsimen ”-i” että valitsimen ”-s” määritteleminen ei ole sallittua" -#: src/parse_args.c:407 +#: src/parse_args.c:410 msgid "you may not specify both the `-i' and `-E' options" msgstr "sekä valitsimen ”-i” että valitsimen ”-E” määritteleminen ei ole sallittua" -#: src/parse_args.c:417 +#: src/parse_args.c:420 msgid "the `-E' option is not valid in edit mode" msgstr "valitsin ”-E” ei ole kelvollinen muokkaustilassa" -#: src/parse_args.c:419 +#: src/parse_args.c:422 msgid "you may not specify environment variables in edit mode" msgstr "ympäristömuuttujien määritteleminen muokkaustilassa ei ole salittua" -#: src/parse_args.c:427 +#: src/parse_args.c:430 msgid "the `-U' option may only be used with the `-l' option" msgstr "valitsinta ”-U” voidaan käyttää vain valitsimen ”-l” kanssa" -#: src/parse_args.c:431 +#: src/parse_args.c:434 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:497 +#: src/parse_args.c:504 msgid "sudoedit is not supported on this platform" msgstr "sudoedit ei ole tuettu tällä alustalla" -#: src/parse_args.c:570 +#: src/parse_args.c:577 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Vain yksi valitsimista -e, -h, -i, -K, -l, -s, -v tai -V voidaan määritellä" -#: src/parse_args.c:584 +#: src/parse_args.c:591 #, c-format msgid "" "%s - edit files as another user\n" @@ -321,7 +337,7 @@ "%s - muokkaa tiedostoja toisena käyttäjänä\n" "\n" -#: src/parse_args.c:586 +#: src/parse_args.c:593 #, c-format msgid "" "%s - execute a command as another user\n" @@ -330,7 +346,7 @@ "%s - suorita komentoja toisena käyttäjänä\n" "\n" -#: src/parse_args.c:591 +#: src/parse_args.c:598 #, c-format msgid "" "\n" @@ -339,487 +355,514 @@ "\n" "Valitsimet:\n" -#: src/parse_args.c:593 +#: src/parse_args.c:600 msgid "use a helper program for password prompting" msgstr "käytä apuohjelmaa salasanakyselyyn" -#: src/parse_args.c:596 +#: src/parse_args.c:603 msgid "use specified BSD authentication type" msgstr "käytä määriteltyä BSD-todennustyyppiä" -#: src/parse_args.c:599 +#: src/parse_args.c:606 msgid "run command in the background" msgstr "suorita komento taustalla" -#: src/parse_args.c:601 +#: src/parse_args.c:608 msgid "close all file descriptors >= num" msgstr "sulje kaikki tiedostokuvaajat >= num" -#: src/parse_args.c:604 +#: src/parse_args.c:611 msgid "run command with the specified BSD login class" msgstr "suorita komento määritellyllä BSD-kirjautumisluokalla" -#: src/parse_args.c:607 +#: src/parse_args.c:614 msgid "preserve user environment when running command" msgstr "säilytä käyttäjäympäristö komentoa suoritettaessa" -#: src/parse_args.c:609 +#: src/parse_args.c:616 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:611 +#: src/parse_args.c:618 msgid "run command as the specified group name or ID" msgstr "suorita komento määriteltynä ryhmänimenä tai tunnisteena" -#: src/parse_args.c:613 +#: src/parse_args.c:620 msgid "set HOME variable to target user's home dir" msgstr "aseta HOME-muuttuja osoittamaan kohdekäyttäjän kotihakemistoon" -#: src/parse_args.c:615 +#: src/parse_args.c:622 msgid "display help message and exit" msgstr "näytä opasteviesti ja poistu" -#: src/parse_args.c:617 +#: src/parse_args.c:624 msgid "run command on host (if supported by plugin)" msgstr "suorita komento verkkokoneessa (jos lisäosa tukee)" -#: src/parse_args.c:619 +#: src/parse_args.c:626 msgid "run login shell as the target user; a command may also be specified" msgstr "suorita kirjautumiskomentoikkuna kohdekäyttäjänä; komento voidaan myös määritellä" -#: src/parse_args.c:621 +#: src/parse_args.c:628 msgid "remove timestamp file completely" msgstr "poista aikaleimatiedosto kokonaan" -#: src/parse_args.c:623 +#: src/parse_args.c:630 msgid "invalidate timestamp file" msgstr "mitätöi aikaleimatiedosto" -#: src/parse_args.c:625 +#: src/parse_args.c:632 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "luettele käyttäjä käyttöoikeudet ja tarkista määritelty komento; käytä kahdesti pitemmällä muodolla" -#: src/parse_args.c:627 +#: src/parse_args.c:634 msgid "non-interactive mode, no prompts are used" msgstr "vuorovaikutteeton tila, ei kysy käyttäjältä" -#: src/parse_args.c:629 +#: src/parse_args.c:636 msgid "preserve group vector instead of setting to target's" msgstr "säilytä ryhmävektori kohteen vektorin asettamisen sijasta" -#: src/parse_args.c:631 +#: src/parse_args.c:638 msgid "use the specified password prompt" msgstr "käytä määriteltyä salasanakehotetta" -#: src/parse_args.c:634 +#: src/parse_args.c:641 msgid "create SELinux security context with specified role" msgstr "luo SELinux-turva-asiayhteys määritellyllä roolilla" -#: src/parse_args.c:637 +#: src/parse_args.c:644 msgid "read password from standard input" msgstr "lue salasana vakiosyötteestä" -#: src/parse_args.c:639 +#: src/parse_args.c:646 msgid "run shell as the target user; a command may also be specified" msgstr "suorita komentotulkki kohdekäyttäjänä; myös komento voidaan määritellä" -#: src/parse_args.c:642 +#: src/parse_args.c:649 msgid "create SELinux security context with specified type" msgstr "luo SELinux-turva-asiayhteys määritellyllä roolilla" -#: src/parse_args.c:645 +#: src/parse_args.c:652 msgid "in list mode, display privileges for user" msgstr "luettelotilassa, näytä käyttöoikeudet käyttäjälle" -#: src/parse_args.c:647 +#: src/parse_args.c:654 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 tunnisteena" -#: src/parse_args.c:649 +#: src/parse_args.c:656 msgid "display version information and exit" msgstr "näytä versiotiedot ja poistu" -#: src/parse_args.c:651 +#: src/parse_args.c:658 msgid "update user's timestamp without running a command" msgstr "päivitä käyttäjän aikaleima suorittamatta komentoa" -#: src/parse_args.c:653 +#: src/parse_args.c:660 msgid "stop processing command line arguments" msgstr "lopeta komentoriviargumenttien käsittely" -#: src/selinux.c:77 +#: src/selinux.c:78 msgid "unable to open audit system" msgstr "audit-järjestelmän avaaminen epäonnistui" -#: src/selinux.c:85 +#: src/selinux.c:88 msgid "unable to send audit message" msgstr "audit-viestin lähettäminen epäonnistui" -#: src/selinux.c:113 +#: src/selinux.c:116 #, c-format msgid "unable to fgetfilecon %s" msgstr "funktion fgetfilecon %s kutsuminen epäonnistui" -#: src/selinux.c:118 +#: src/selinux.c:121 #, c-format msgid "%s changed labels" msgstr "%s muutti nimiöitä" -#: src/selinux.c:123 +#: src/selinux.c:126 #, c-format msgid "unable to restore context for %s" msgstr "asiayhteyden palauttaminen kohteelle %s epäonnistui" -#: src/selinux.c:163 +#: src/selinux.c:166 #, c-format msgid "unable to open %s, not relabeling tty" msgstr "kohteen %s avaaminen epäonnistui, ei nimiöidä uudelleen tty:tä" -#: src/selinux.c:172 +#: src/selinux.c:175 msgid "unable to get current tty context, not relabeling tty" msgstr "nykyisen tty-asiayhteyden hakeminen epäonnistui, ei nimiöidä uudelleen tty:tä" -#: src/selinux.c:179 +#: src/selinux.c:182 msgid "unable to get new tty context, not relabeling tty" msgstr "uuden tty-asiayhteyden hakeminen epäonnistui, ei nimiöidä uudelleen tty:tä" -#: src/selinux.c:186 +#: src/selinux.c:189 msgid "unable to set new tty context" msgstr "uuden tty-asiayhteyden asettaminen epäonnistui" -#: src/selinux.c:252 +#: src/selinux.c:255 #, c-format msgid "you must specify a role for type %s" msgstr "tyypille %s on määriteltävä rooli" -#: src/selinux.c:258 +#: src/selinux.c:261 #, c-format msgid "unable to get default type for role %s" msgstr "oletustyypin hakeminen roolille %s epäonnistui" -#: src/selinux.c:276 +#: src/selinux.c:279 #, c-format msgid "failed to set new role %s" msgstr "uuden roolin %s asettaminen epäonnistui" -#: src/selinux.c:280 +#: src/selinux.c:283 #, c-format msgid "failed to set new type %s" msgstr "uuden tyypin %s asettaminen epäonnistui" -#: src/selinux.c:289 +#: src/selinux.c:295 #, c-format msgid "%s is not a valid context" msgstr "%s ei ole kelvollinen asiayhteys" -#: src/selinux.c:324 +#: src/selinux.c:330 msgid "failed to get old_context" msgstr "kohteen old_context hakeminen epäonnistui" -#: src/selinux.c:330 +#: src/selinux.c:336 msgid "unable to determine enforcing mode." msgstr "vahvistustilan määritteleminen epäonnistui." -#: src/selinux.c:347 +#: src/selinux.c:353 #, c-format msgid "unable to set tty context to %s" msgstr "ei kyetä asettamaan tty-asiayhteydeksi %s" -#: src/selinux.c:386 +#: src/selinux.c:392 #, c-format msgid "unable to set exec context to %s" msgstr "ei kyetä asettamaan suoritusasiayhteydeksi %s" -#: src/selinux.c:393 +#: src/selinux.c:399 #, c-format msgid "unable to set key creation context to %s" msgstr "ei kyetä asettamaan avaimenluontiasiayhteydeksi %s" -#: src/sesh.c:80 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "vaatii vähintään yhden argumentin" -#: src/sesh.c:109 +#: src/sesh.c:107 #, c-format msgid "unable to run %s as a login shell" msgstr "salasanakyselyn %s suorittaminen komentorivi-ikkunassa epäonnistui" -#: src/sesh.c:114 src/sudo.c:1186 +#: src/sesh.c:112 src/sudo.c:1231 #, c-format msgid "unable to execute %s" msgstr "kohteen %s suorittaminen epäonnistui" -#: src/signal.c:77 +#: src/signal.c:68 #, c-format msgid "unable to save handler for signal %d" msgstr "käsittelijän tallentaminen signaalille %d epäonnistui" -#: src/solaris.c:88 +#: src/solaris.c:76 msgid "resource control limit has been reached" msgstr "resurssivalvontaraja saavutettu" -#: src/solaris.c:91 +#: src/solaris.c:79 #, c-format msgid "user \"%s\" is not a member of project \"%s\"" msgstr "käyttäjä ”%s” ei ole hankkeen ”%s” jäsen" -#: src/solaris.c:95 +#: src/solaris.c:83 msgid "the invoking task is final" msgstr "kutsuttu tehtävä on final-tyyppinen" -#: src/solaris.c:98 +#: src/solaris.c:86 #, c-format msgid "could not join project \"%s\"" msgstr "hankkeeseen ”%s” liittyminen epäonnistui" -#: src/solaris.c:103 +#: src/solaris.c:91 #, c-format msgid "no resource pool accepting default bindings exists for project \"%s\"" msgstr "hankkeelle ”%s” ei ole oletusyhteydet hyväksyvää resurssivarantoa" -#: src/solaris.c:107 +#: src/solaris.c:95 #, c-format msgid "specified resource pool does not exist for project \"%s\"" msgstr "hankkeelle ”%s” ei ole määriteltyä resurssivarantoa" -#: src/solaris.c:111 +#: src/solaris.c:99 #, c-format msgid "could not bind to default resource pool for project \"%s\"" msgstr "hankkeelle ”%s” ei voitu sitoa oletusresurssivarantoa" -#: src/solaris.c:117 +#: src/solaris.c:105 #, c-format msgid "setproject failed for project \"%s\"" msgstr "funktio setproject hankkeelle ”%s” epäonnistui" -#: src/solaris.c:119 +#: src/solaris.c:107 #, c-format msgid "warning, resource control assignment failed for project \"%s\"" msgstr "varoitus, hankkeen ”%s” resurssiohjausosoitus epäonnistui" -#: src/sudo.c:209 +#: src/sudo.c:193 #, c-format msgid "Sudo version %s\n" msgstr "Sudo-versio %s\n" -#: src/sudo.c:211 +#: src/sudo.c:195 #, c-format msgid "Configure options: %s\n" msgstr "Asetusvalitsimet: %s\n" -#: src/sudo.c:216 +#: src/sudo.c:203 msgid "fatal error, unable to load plugins" msgstr "vakava virhe, lisäosien lataaminen epäonnistui" -#: src/sudo.c:224 +#: src/sudo.c:211 msgid "unable to initialize policy plugin" msgstr "menettelytapalisäosan alustaminen epäonnistui" -#: src/sudo.c:280 +#: src/sudo.c:267 #, c-format msgid "error initializing I/O plugin %s" msgstr "virhe alustettaessa siirräntälisäosaa %s" -#: src/sudo.c:306 +#: src/sudo.c:293 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "odottamaton sudo-tila 0x%x" -#: src/sudo.c:426 +#: src/sudo.c:434 msgid "unable to get group vector" msgstr "ei kyetä hakemaan ryhmävektoria" -#: src/sudo.c:478 +#: src/sudo.c:497 #, c-format msgid "unknown uid %u: who are you?" msgstr "tuntematon uid-käyttäjätunniste %u: kuka olet?" # ensimmäinen parametri on path -#: src/sudo.c:785 +#: src/sudo.c:829 #, 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:788 +#: src/sudo.c:832 #, 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 "todellinen käyttäjätunniste ei ole %d, onko %s asetettu tiedostojärjestelmässä, jossa on ’nosuid’-valitsin vai onko tämä NFS-tiedostojärjestelmä ilman root-käyttöoikeuksia?" -#: src/sudo.c:794 +#: src/sudo.c:838 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "todellinen käyttäjätunniste ei ole %d, onko sudo asennettu setuid root -käyttöoikeuksilla?" -#: src/sudo.c:923 +#: src/sudo.c:969 #, c-format msgid "unknown login class %s" msgstr "tuntematon kirjautumisluokka %s" -#: src/sudo.c:936 +#: src/sudo.c:982 msgid "unable to set user context" msgstr "käyttäjäasiayhteyden asettaminen epäonnistui" -#: src/sudo.c:950 +#: src/sudo.c:996 msgid "unable to set supplementary group IDs" msgstr "lisäryhmätunnisteiden 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:957 +#: src/sudo.c:1003 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "voimassaolevan gid-ryhmätunnisteen asettaminen suoritettavaksi gid-ryhmätunnisteeksi %u epäonnistui" -#: src/sudo.c:963 +#: src/sudo.c:1009 #, c-format msgid "unable to set gid to runas gid %u" msgstr "gid-ryhmätunnisteen asettaminen suoritettavaksi gid-ryhmätunnisteeksi %u epäonnistui" -#: src/sudo.c:970 +#: src/sudo.c:1016 msgid "unable to set process priority" msgstr "prosessiprioriteetin asettaminen epäonnistui" -#: src/sudo.c:978 +#: src/sudo.c:1024 #, c-format msgid "unable to change root to %s" msgstr "root-käyttäjän vaihtaminen käyttäjäksi %s epäonnistui" -#: src/sudo.c:991 src/sudo.c:997 src/sudo.c:1003 +#: src/sudo.c:1037 src/sudo.c:1043 src/sudo.c:1050 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "ei kyetä vaihtamaan suoritettavaksi uid-käyttäjätunnisteeksi (%u, %u)" # parametrina on CWD- eli Change Working Directory- komennolla palautettava hakemisto -#: src/sudo.c:1021 +#: src/sudo.c:1068 #, c-format msgid "unable to change directory to %s" msgstr "ei kyetä vaihtamaan hakemistoksi %s" -#: src/sudo.c:1082 +#: src/sudo.c:1126 #, c-format msgid "unexpected child termination condition: %d" msgstr "lapsiprosessin odottamaton päättymisehto: %d" -#: src/sudo.c:1214 +#: src/sudo.c:1259 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "menettelytapalisäosa %s ei sisällä ”check_policy”-metodia" -#: src/sudo.c:1232 +#: src/sudo.c:1277 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "menettelytapalisäosa %s ei tue luettelointikäyttöoikeuksia" -#: src/sudo.c:1249 +#: src/sudo.c:1294 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "menettelytapalisäosa %s ei tue valitsinta -v" -#: src/sudo.c:1264 +#: src/sudo.c:1309 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "menettelytapalisäosa %s ei tue valitsimia -k/-K" -#: src/sudo_edit.c:203 src/sudo_edit.c:294 +#: src/sudo_edit.c:202 +msgid "unable to restore current working directory" +msgstr "nykyisen työhakemiston palauttaminen epäonnistui" + +#: src/sudo_edit.c:412 src/sudo_edit.c:516 #, c-format msgid "%s: not a regular file" msgstr "%s: ei ole tavallinen tiedosto" -#: src/sudo_edit.c:230 src/sudo_edit.c:332 +#: src/sudo_edit.c:419 +#, c-format +msgid "%s: editing symbolic links is not permitted" +msgstr "%s: symbolisten linkkien muokkaus ei ole sallittua" + +#: src/sudo_edit.c:422 +#, c-format +msgid "%s: editing files in a writable directory is not permitted" +msgstr "%s: tiedostojen muokkaus kirjoitettavassa hakemistossa ei ole sallittua" + +#: src/sudo_edit.c:453 src/sudo_edit.c:555 #, c-format msgid "%s: short write" msgstr "%s: lyhyt kirjoitus" -#: src/sudo_edit.c:295 +#: src/sudo_edit.c:517 #, c-format msgid "%s left unmodified" msgstr "%s jätetty muokkaamattomaksi" -#: src/sudo_edit.c:308 src/sudo_edit.c:483 +#: src/sudo_edit.c:530 src/sudo_edit.c:716 #, c-format msgid "%s unchanged" msgstr "%s muuttamaton" -#: src/sudo_edit.c:321 src/sudo_edit.c:343 +#: src/sudo_edit.c:544 src/sudo_edit.c:566 #, c-format msgid "unable to write to %s" msgstr "kohteeseen %s kirjoittaminen epäonnistui" -#: src/sudo_edit.c:322 src/sudo_edit.c:341 src/sudo_edit.c:344 -#: src/sudo_edit.c:508 src/sudo_edit.c:512 +#: src/sudo_edit.c:545 src/sudo_edit.c:564 src/sudo_edit.c:567 +#: src/sudo_edit.c:741 src/sudo_edit.c:745 #, c-format msgid "contents of edit session left in %s" msgstr "muokkausistunnon sisältö jätetty kohteessa %s" -#: src/sudo_edit.c:340 +#: src/sudo_edit.c:563 msgid "unable to read temporary file" msgstr "tilapäisen tiedoston lukeminen epäonnistui" -#: src/sudo_edit.c:417 +#: src/sudo_edit.c:646 msgid "sesh: internal error: odd number of paths" msgstr "sesh: sisäinen virhe: polkujen pariton määrä" -#: src/sudo_edit.c:419 +#: src/sudo_edit.c:648 msgid "sesh: unable to create temporary files" msgstr "sesh: tilapäisten tiedostojen luominen epäonnistui" -#: src/sudo_edit.c:421 src/sudo_edit.c:515 +#: src/sudo_edit.c:650 src/sudo_edit.c:748 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: tuntematon virhe %d" -#: src/sudo_edit.c:507 +#: src/sudo_edit.c:740 msgid "unable to copy temporary files back to their original location" msgstr "tilapäisten tiedostojen kopioiminen takaisin niiden alkuperäiseen sijaintiin epäonnistui" -#: src/sudo_edit.c:511 +#: src/sudo_edit.c:744 msgid "unable to copy some of the temporary files back to their original location" msgstr "joidenkin tilapäisten tiedostojen kopioiminen takaisin niiden alkuperäiseen sijaintiin epäonnistui" -#: src/sudo_edit.c:554 +#: src/sudo_edit.c:787 #, c-format msgid "unable to change uid to root (%u)" msgstr "uid-käyttäjätunnisteen vaihtaminen root-tunnisteeksi (%u) epäonnistui" -#: src/sudo_edit.c:571 +#: src/sudo_edit.c:804 msgid "plugin error: missing file list for sudoedit" msgstr "lisäosavirhe: puuttuu sudoedit-tiedostoluettelo" -#: src/tgetpass.c:90 +#: src/sudo_edit.c:845 src/sudo_edit.c:858 +msgid "unable to read the clock" +msgstr "kellon lukeminen epäonnistui" + +#: src/tgetpass.c:107 msgid "no tty present and no askpass program specified" msgstr "ei tty:tä käytettävissä eikä salasanan kyselyohjelmaa määriteltynä" -#: src/tgetpass.c:99 +#: src/tgetpass.c:116 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "salasanan kyselyohjelma ei ole määritelty, yritä asettaa SUDO_ASKPASS" -#: src/tgetpass.c:232 +#: src/tgetpass.c:276 #, c-format msgid "unable to set gid to %u" msgstr "ei kyetä asettamaan gid-ryhmätunnisteeksi %u" -#: src/tgetpass.c:236 +#: src/tgetpass.c:280 #, c-format msgid "unable to set uid to %u" msgstr "ei kyetä asettamaan uid-käyttäjätunnisteeksi %u" -#: src/tgetpass.c:241 +#: src/tgetpass.c:285 #, c-format msgid "unable to run %s" msgstr "salasanakyselyn %s suorittaminen epäonnistui" -#: src/utmp.c:278 +#: src/utmp.c:266 msgid "unable to save stdin" msgstr "vakiosyötteeseen tallentaminen epäonnistui" -#: src/utmp.c:280 +#: src/utmp.c:268 msgid "unable to dup2 stdin" msgstr "funktion dup2 kutsuminen vakiosyötteellä epäonnistui" -#: src/utmp.c:283 +#: src/utmp.c:271 msgid "unable to restore stdin" msgstr "vakiosyötteen palauttaminen epäonnistui" +#~ msgid "internal error, tried allocate zero bytes" +#~ msgstr "sisäinen virhe, yritettiin varata nolla tavua" + +#~ msgid "unable to set terminal to raw mode" +#~ msgstr "pääteikkunan asentaminen raakatilaan epäonnistui" + +#~ msgid "unable to open socket" +#~ msgstr "vastakkeen avaaminen epäonnistui" + #~ msgid "%s: %s: %s\n" #~ msgstr "%s: %s: %s\n" @@ -859,9 +902,6 @@ #~ msgid "when listing, list specified user's privileges\n" #~ msgstr "luetteloitaessa luettele määritellyn käyttäjän käyttöoikeudet\n" -#~ msgid "unable to allocate memory" -#~ msgstr "muistin varaaminen epäonnistui" - #~ msgid ": " #~ msgstr ": " Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/po/fr.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/po/fr.mo differ diff -Nru sudo-1.8.12/po/fr.po sudo-1.8.16/po/fr.po --- sudo-1.8.12/po/fr.po 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/po/fr.po 2016-03-17 16:13:10.000000000 +0000 @@ -1,15 +1,15 @@ # Messages français pour sudo. -# Copyright (C) 2013 Free Software Foundation, Inc. +# Copyright (C) 2015 Free Software Foundation, Inc. # This file is put in the public domain. # Todd C. Miller , 2011-2013 -# Frédéric Marchal , 2013 +# Frédéric Marchal , 2016 # msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.8b1\n" -"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2013-08-16 10:14-0600\n" -"PO-Revision-Date: 2013-08-19 07:53+0200\n" +"Project-Id-Version: sudo 1.8.16b1\n" +"Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" +"POT-Creation-Date: 2016-02-19 15:48-0700\n" +"PO-Revision-Date: 2016-02-26 07:15+0100\n" "Last-Translator: Frédéric Marchal \n" "Language-Team: French \n" "Language: fr\n" @@ -18,320 +18,312 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: common/aix.c:150 -#, c-format +#: lib/util/aix.c:85 lib/util/aix.c:164 msgid "unable to open userdb" msgstr "impossible d'ouvrir la base de données utilisateurs" -#: common/aix.c:153 +#: lib/util/aix.c:219 #, c-format msgid "unable to switch to registry \"%s\" for %s" msgstr "impossible de basculer vers le registre « %s » pour %s" -#: common/aix.c:170 -#, c-format +#: lib/util/aix.c:244 msgid "unable to restore registry" msgstr "impossible de rétablir le registre" -#: common/alloc.c:81 -msgid "internal error, tried to emalloc(0)" -msgstr "erreur interne, emalloc(0) a été tenté" - -#: common/alloc.c:98 -msgid "internal error, tried to emalloc2(0)" -msgstr "erreur interne, emalloc2(0) a été tenté" - -#: common/alloc.c:100 common/alloc.c:122 common/alloc.c:162 common/alloc.c:186 +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/gidlist.c:74 +#: lib/util/sudo_conf.c:207 lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 +#: lib/util/sudo_conf.c:569 src/conversation.c:75 src/exec.c:863 +#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 +#: src/exec_pty.c:684 src/exec_pty.c:692 src/load_plugins.c:52 +#: src/load_plugins.c:65 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:655 src/sudo.c:665 src/sudo.c:685 src/sudo.c:704 src/sudo.c:713 +#: src/sudo.c:722 src/sudo.c:739 src/sudo.c:780 src/sudo.c:790 src/sudo.c:810 +#: src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 src/sudo.c:1492 +#: src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 #, c-format -msgid "internal error, %s overflow" -msgstr "erreur interne, débordement %s" +msgid "%s: %s" +msgstr "%s: %s" + +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/sudo_conf.c:208 +#: lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 lib/util/sudo_conf.c:569 +#: src/conversation.c:76 src/exec.c:863 src/exec_common.c:107 +#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:684 +#: src/exec_pty.c:692 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:810 src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 +#: src/sudo.c:1492 src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 +msgid "unable to allocate memory" +msgstr "impossible d'allouer la mémoire" -#: common/alloc.c:119 -msgid "internal error, tried to ecalloc(0)" -msgstr "erreur interne, ecalloc(0) a été tenté" - -#: common/alloc.c:141 -msgid "internal error, tried to erealloc(0)" -msgstr "erreur interne, erealloc(0) a été tenté" - -#: common/alloc.c:160 -msgid "internal error, tried to erealloc3(0)" -msgstr "erreur interne, erealloc3(0) a été tenté" - -#: common/alloc.c:184 -msgid "internal error, tried to erecalloc(0)" -msgstr "erreur interne, erecalloc(0) a été tenté" +#: lib/util/strsignal.c:48 +msgid "Unknown signal" +msgstr "Signal inconnu" -#: common/atoid.c:77 common/atoid.c:99 src/sudo.c:561 src/sudo.c:586 -#: src/sudo.c:694 src/sudo.c:710 +#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:48 +#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "valeur incorrecte" -#: common/atoid.c:84 src/sudo.c:565 src/sudo.c:590 src/sudo.c:698 -#: src/sudo.c:714 -msgid "value out of range" -msgstr "valeur hors limites" - -#: common/atoid.c:105 +#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:54 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "valeur trop grande" -#: common/fatal.c:154 -#, c-format -msgid "%s: %s: %s\n" -msgstr "%s: %s: %s\n" +#: lib/util/strtoid.c:89 lib/util/strtomode.c:54 lib/util/strtonum.c:61 +#: lib/util/strtonum.c:182 +msgid "value too small" +msgstr "valeur trop petite" -#: common/fatal.c:157 common/fatal.c:161 +#: lib/util/sudo_conf.c:223 #, c-format -msgid "%s: %s\n" -msgstr "%s: %s\n" +msgid "invalid Path value `%s' in %s, line %u" +msgstr "valeur de chemin « %s » incorrecte dans %s, ligne %u" -#: common/gidlist.c:80 src/load_plugins.c:72 src/sudo.c:561 src/sudo.c:565 -#: src/sudo.c:586 src/sudo.c:590 src/sudo.c:613 src/sudo.c:622 src/sudo.c:631 -#: src/sudo.c:646 src/sudo.c:694 src/sudo.c:698 src/sudo.c:710 src/sudo.c:714 +#: lib/util/sudo_conf.c:389 lib/util/sudo_conf.c:442 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "invalid value for %s `%s' in %s, line %u" +msgstr "valeur « %2$s » incorrecte pour %1$s dans %3$s, ligne %4$u" -#: common/sudo_conf.c:176 +#: lib/util/sudo_conf.c:410 #, c-format -msgid "unsupported group source `%s' in %s, line %d" -msgstr "group_source « %s » inconnu dans %s, ligne %d" +msgid "unsupported group source `%s' in %s, line %u" +msgstr "source de groupe « %s » non supportée dans %s, ligne %u" -#: common/sudo_conf.c:190 +#: lib/util/sudo_conf.c:426 #, c-format -msgid "invalid max groups `%s' in %s, line %d" -msgstr "max_groups « %s » incorrect dans %s, ligne %d" +msgid "invalid max groups `%s' in %s, line %u" +msgstr "groupes max « %s » incorrects dans %s, ligne %u" -#: common/sudo_conf.c:394 +#: lib/util/sudo_conf.c:585 #, c-format msgid "unable to stat %s" msgstr "impossible d'évaluer par stat() %s" -#: common/sudo_conf.c:397 +#: lib/util/sudo_conf.c:588 #, c-format msgid "%s is not a regular file" msgstr "%s n'est pas un fichier régulier" -#: common/sudo_conf.c:400 +#: lib/util/sudo_conf.c:591 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s est la propriété du uid %u alors que ça devrait être %u" -#: common/sudo_conf.c:404 +#: lib/util/sudo_conf.c:595 #, c-format msgid "%s is world writable" msgstr "%s peut être écrit par tout le monde" -#: common/sudo_conf.c:407 +#: lib/util/sudo_conf.c:598 #, c-format msgid "%s is group writable" msgstr "%s peut être écrit par le groupe" -#: common/sudo_conf.c:417 src/selinux.c:196 src/selinux.c:209 src/sudo.c:329 +#: lib/util/sudo_conf.c:608 src/selinux.c:199 src/selinux.c:212 src/sudo.c:367 #, c-format msgid "unable to open %s" msgstr "impossible d'ouvrir %s" -#: compat/strsignal.c:50 -msgid "Unknown signal" -msgstr "Signal inconnu" - -#: src/exec.c:127 src/exec_pty.c:685 +#: src/exec.c:114 src/exec.c:116 src/exec.c:121 src/exec.c:409 src/exec.c:411 +#: src/exec.c:413 src/exec.c:415 src/exec.c:417 src/exec.c:419 src/exec.c:422 +#: src/exec.c:438 src/exec.c:440 src/exec.c:595 src/exec.c:790 +#: src/exec_pty.c:466 src/exec_pty.c:722 src/exec_pty.c:792 src/exec_pty.c:794 +#: src/exec_pty.c:806 src/exec_pty.c:808 src/exec_pty.c:1289 +#: src/exec_pty.c:1291 src/exec_pty.c:1296 src/exec_pty.c:1298 +#: src/exec_pty.c:1312 src/exec_pty.c:1323 src/exec_pty.c:1325 +#: src/exec_pty.c:1327 src/exec_pty.c:1329 src/exec_pty.c:1331 +#: src/exec_pty.c:1333 src/exec_pty.c:1335 src/signal.c:147 #, c-format -msgid "policy plugin failed session initialization" -msgstr "le greffon de règles a échoué lors de l'initialisation de la session" +msgid "unable to set handler for signal %d" +msgstr "impossible de spécifier le gestionnaire pour le signal %d" -#: src/exec.c:132 src/exec_pty.c:701 src/exec_pty.c:1066 src/tgetpass.c:221 -#, c-format +#: src/exec.c:126 src/exec_pty.c:838 src/exec_pty.c:1373 src/tgetpass.c:265 msgid "unable to fork" msgstr "erreur de fork" -#: src/exec.c:259 -#, c-format +#: src/exec.c:304 src/exec.c:312 src/exec.c:868 src/exec_pty.c:604 +#: src/exec_pty.c:611 src/exec_pty.c:654 src/exec_pty.c:659 src/exec_pty.c:946 +#: src/exec_pty.c:956 src/exec_pty.c:1001 src/exec_pty.c:1008 +#: src/exec_pty.c:1438 src/exec_pty.c:1445 src/exec_pty.c:1452 +msgid "unable to add event to queue" +msgstr "impossible d'ajouter l'événement à la queue" + +#: src/exec.c:392 msgid "unable to create sockets" msgstr "impossible de créer des sockets" -#: src/exec.c:347 src/exec_pty.c:1130 src/exec_pty.c:1268 -#, c-format -msgid "select failed" -msgstr "select a échoué" +#: src/exec.c:447 +msgid "policy plugin failed session initialization" +msgstr "le greffon de règles a échoué lors de l'initialisation de la session" -#: src/exec.c:449 -#, c-format +#: src/exec.c:492 +msgid "error in event loop" +msgstr "erreur dans la boucle des événements" + +#: src/exec.c:510 msgid "unable to restore tty label" msgstr "impossible de rétablir l'étiquette du tty" -#: src/exec_common.c:70 +#: src/exec.c:603 src/exec_pty.c:498 src/signal.c:86 #, c-format +msgid "unable to restore handler for signal %d" +msgstr "impossible de rétablir le gestionnaire pour le signal %d" + +#: src/exec.c:721 src/exec_pty.c:1180 +msgid "error reading from signal pipe" +msgstr "erreur lors de la lecture du tube signal" + +#: src/exec_common.c:166 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "impossible de supprimer PRIV_PROC_EXEC de PRIV_LIMIT" -#: src/exec_pty.c:183 -#, c-format +#: src/exec_pty.c:188 msgid "unable to allocate pty" msgstr "impossible d'allouer le pty" -#: src/exec_pty.c:623 src/exec_pty.c:632 src/exec_pty.c:640 src/exec_pty.c:986 -#: src/exec_pty.c:1063 src/signal.c:126 src/tgetpass.c:218 -#, c-format +#: src/exec_pty.c:766 src/exec_pty.c:775 src/exec_pty.c:783 +#: src/exec_pty.c:1281 src/exec_pty.c:1370 src/signal.c:128 src/tgetpass.c:261 msgid "unable to create pipe" msgstr "impossible de créer le tube" -#: src/exec_pty.c:676 -#, c-format -msgid "unable to set terminal to raw mode" -msgstr "impossible de mettre le terminal en mode brut" - -#: src/exec_pty.c:1042 -#, c-format -msgid "unable to set controlling tty" -msgstr "impossible de choisir le tty de contrôle" - -#: src/exec_pty.c:1139 -#, c-format -msgid "error reading from signal pipe" -msgstr "erreur lors de la lecture du tube signal" - -#: src/exec_pty.c:1160 -#, c-format +#: src/exec_pty.c:1213 msgid "error reading from pipe" msgstr "erreur de lecture sur le tube" -#: src/exec_pty.c:1176 -#, c-format +#: src/exec_pty.c:1238 msgid "error reading from socketpair" msgstr "erreur de lecture sur la paire de sockets" -#: src/exec_pty.c:1180 +#: src/exec_pty.c:1247 #, c-format msgid "unexpected reply type on backchannel: %d" msgstr "réponse inattendue sur le backchannel : %d" -#: src/load_plugins.c:70 src/load_plugins.c:79 src/load_plugins.c:132 -#: src/load_plugins.c:138 src/load_plugins.c:144 src/load_plugins.c:185 -#: src/load_plugins.c:192 src/load_plugins.c:199 src/load_plugins.c:205 +#: src/exec_pty.c:1349 +msgid "unable to set controlling tty" +msgstr "impossible de choisir le tty de contrôle" + +#: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 +#: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 +#: src/load_plugins.c:170 src/load_plugins.c:178 src/load_plugins.c:185 +#: src/load_plugins.c:191 #, c-format msgid "error in %s, line %d while loading plugin `%s'" msgstr "erreur dans %s, ligne %d lors du chargement du greffon « %s »" -#: src/load_plugins.c:81 +#: src/load_plugins.c:87 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" -#: src/load_plugins.c:140 +#: src/load_plugins.c:125 #, c-format msgid "%s must be owned by uid %d" msgstr "%s doit être la propriété du uid %d" -#: src/load_plugins.c:146 +#: src/load_plugins.c:131 #, c-format msgid "%s must be only be writable by owner" msgstr "seul le propriétaire doit pouvoir écrire dans %s" -#: src/load_plugins.c:187 +#: src/load_plugins.c:172 #, c-format -msgid "unable to dlopen %s: %s" -msgstr "impossible d'exécuter dlopen %s : %s" +msgid "unable to load %s: %s" +msgstr "impossible de charger %s : %s" -#: src/load_plugins.c:194 +#: src/load_plugins.c:180 #, c-format msgid "unable to find symbol `%s' in %s" msgstr "impossible de trouver le symbole « %s » dans %s" -#: src/load_plugins.c:201 +#: src/load_plugins.c:187 #, c-format msgid "unknown policy type %d found in %s" msgstr "type de règle %d inconnu dans %s" -#: src/load_plugins.c:207 +#: src/load_plugins.c:193 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "greffon à la version majeure %d incompatible (%d attendu) trouvé dans %s" -#: src/load_plugins.c:216 +#: src/load_plugins.c:202 #, c-format msgid "ignoring policy plugin `%s' in %s, line %d" msgstr "ignore le greffon de règles « %s » dans %s, ligne %d" -#: src/load_plugins.c:218 -#, c-format +#: src/load_plugins.c:204 msgid "only a single policy plugin may be specified" msgstr "un seul greffon de règles peut être spécifié" -#: src/load_plugins.c:221 +#: src/load_plugins.c:207 #, c-format msgid "ignoring duplicate policy plugin `%s' in %s, line %d" msgstr "ignore le greffon de règles en double « %s » dans %s, ligne %d" -#: src/load_plugins.c:236 +#: src/load_plugins.c:228 #, c-format msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" msgstr "ignore le greffon E/S en double « %s » dans %s, ligne %d" -#: src/load_plugins.c:313 +#: src/load_plugins.c:331 #, 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:156 src/net_ifs.c:165 src/net_ifs.c:177 src/net_ifs.c:186 -#: src/net_ifs.c:297 src/net_ifs.c:321 +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:476 #, c-format -msgid "load_interfaces: overflow detected" -msgstr "load_interfaces: débordement détecté" - -#: src/net_ifs.c:226 -#, c-format -msgid "unable to open socket" -msgstr "impossible d'ouvrir la socket" +msgid "internal error, %s overflow" +msgstr "erreur interne, débordement %s" -#: src/parse_args.c:246 -#, c-format +#: src/parse_args.c:239 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:408 -#, c-format +#: src/parse_args.c:406 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:412 -#, c-format +#: src/parse_args.c:410 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:422 -#, c-format +#: src/parse_args.c:420 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:424 -#, c-format +#: src/parse_args.c:422 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:432 -#, c-format +#: src/parse_args.c:430 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:436 -#, c-format +#: src/parse_args.c:434 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:519 -#, c-format +#: src/parse_args.c:504 msgid "sudoedit is not supported on this platform" msgstr "sudoedit n'est pas pris en charge sur cette plate-forme" -#: src/parse_args.c:592 -#, c-format +#: src/parse_args.c:577 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:606 +#: src/parse_args.c:591 #, c-format msgid "" "%s - edit files as another user\n" @@ -340,7 +332,7 @@ "%s – édite les fichiers en tant qu'un autre utilisateur\n" "\n" -#: src/parse_args.c:608 +#: src/parse_args.c:593 #, c-format msgid "" "%s - execute a command as another user\n" @@ -349,7 +341,7 @@ "%s – exécute une commande en tant qu'un autre utilisateur\n" "\n" -#: src/parse_args.c:613 +#: src/parse_args.c:598 #, c-format msgid "" "\n" @@ -358,470 +350,545 @@ "\n" "Options:\n" -#: src/parse_args.c:615 +#: src/parse_args.c:600 msgid "use a helper program for password prompting" msgstr "utiliser un programme adjoint pour demander le mot de passe" -#: src/parse_args.c:618 +#: src/parse_args.c:603 msgid "use specified BSD authentication type" msgstr "utiliser le type d'authentification BSD spécifié" -#: src/parse_args.c:621 +#: src/parse_args.c:606 msgid "run command in the background" msgstr "exécuter la commande en arrière-plan" -#: src/parse_args.c:623 +#: src/parse_args.c:608 msgid "close all file descriptors >= num" msgstr "fermer tous les descripteurs de fichiers >= n°" -#: src/parse_args.c:626 +#: src/parse_args.c:611 msgid "run command with the specified BSD login class" msgstr "exécuter la commande avec la classe de login BSD" -#: src/parse_args.c:629 +#: src/parse_args.c:614 msgid "preserve user environment when running command" msgstr "préserver l'environnement de l'utilisateur en exécutant la commande" -#: src/parse_args.c:631 +#: src/parse_args.c:616 msgid "edit files instead of running a command" msgstr "éditer les fichiers au lieu d'exécuter une commande" -#: src/parse_args.c:633 +#: src/parse_args.c:618 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:635 +#: src/parse_args.c:620 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:637 +#: src/parse_args.c:622 msgid "display help message and exit" msgstr "afficher le message d'aide et terminer" -#: src/parse_args.c:639 +#: src/parse_args.c:624 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:641 +#: src/parse_args.c:626 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:643 +#: src/parse_args.c:628 msgid "remove timestamp file completely" msgstr "supprime complètement le fichier d'horodatage" -#: src/parse_args.c:645 +#: src/parse_args.c:630 msgid "invalidate timestamp file" msgstr "invalide le fichier d'horodatage" -#: src/parse_args.c:647 +#: src/parse_args.c:632 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:649 +#: src/parse_args.c:634 msgid "non-interactive mode, no prompts are used" msgstr "mode non interactif, aucune invite utilisée" -#: src/parse_args.c:651 +#: src/parse_args.c:636 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:653 +#: src/parse_args.c:638 msgid "use the specified password prompt" msgstr "utiliser l'invite de mot de passe spécifié" -#: src/parse_args.c:656 +#: src/parse_args.c:641 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:659 +#: src/parse_args.c:644 msgid "read password from standard input" msgstr "lire le mot de passe depuis l'entrée standard" -#: src/parse_args.c:661 +#: src/parse_args.c:646 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:664 +#: src/parse_args.c:649 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:667 +#: src/parse_args.c:652 msgid "in list mode, display privileges for user" msgstr "en mode liste, afficher les privilèges de l'utilisateur" -#: src/parse_args.c:669 +#: src/parse_args.c:654 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:671 +#: src/parse_args.c:656 msgid "display version information and exit" msgstr "afficher les informations de version et terminer" -#: src/parse_args.c:673 +#: src/parse_args.c:658 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:675 +#: src/parse_args.c:660 msgid "stop processing command line arguments" msgstr "arrêter de traiter les arguments en ligne de commande" -#: src/selinux.c:77 -#, c-format +#: src/selinux.c:78 msgid "unable to open audit system" msgstr "impossible d'ouvrir le système d'audit" -#: src/selinux.c:85 -#, c-format +#: src/selinux.c:88 msgid "unable to send audit message" msgstr "impossible d'envoyer le message d'audit" -#: src/selinux.c:113 +#: src/selinux.c:116 #, c-format msgid "unable to fgetfilecon %s" msgstr "impossible d'exécuter fgetfilecon %s" -#: src/selinux.c:118 +#: src/selinux.c:121 #, c-format msgid "%s changed labels" msgstr "%s à changé des étiquettes" -#: src/selinux.c:123 +#: src/selinux.c:126 #, c-format msgid "unable to restore context for %s" msgstr "impossible de rétablir le contexte de %s" -#: src/selinux.c:163 +#: src/selinux.c:166 #, c-format msgid "unable to open %s, not relabeling tty" msgstr "impossible d'ouvrir %s, le tty n'est pas ré-étiqueté" -#: src/selinux.c:172 -#, c-format +#: src/selinux.c:175 msgid "unable to get current tty context, not relabeling tty" msgstr "impossible d'obtenir le contexte actuel du tty, le tty n'est pas ré-étiqueté" -#: src/selinux.c:179 -#, c-format +#: src/selinux.c:182 msgid "unable to get new tty context, not relabeling tty" msgstr "impossible d'obtenir le nouveau contexte du tty, le tty n'est pas ré-étiqueté" -#: src/selinux.c:186 -#, c-format +#: src/selinux.c:189 msgid "unable to set new tty context" msgstr "impossible de changer le nouveau contexte du tty" -#: src/selinux.c:252 +#: src/selinux.c:255 #, c-format msgid "you must specify a role for type %s" msgstr "vous devez spécifier un rôle pour le type %s" -#: src/selinux.c:258 +#: src/selinux.c:261 #, c-format msgid "unable to get default type for role %s" msgstr "impossible d'obtenir le type par défaut pour le rôle %s" -#: src/selinux.c:276 +#: src/selinux.c:279 #, c-format msgid "failed to set new role %s" msgstr "échec lors du changement du nouveau rôle %s" -#: src/selinux.c:280 +#: src/selinux.c:283 #, c-format msgid "failed to set new type %s" msgstr "échec lors du changement du nouveau type %s" -#: src/selinux.c:289 +#: src/selinux.c:295 #, c-format msgid "%s is not a valid context" msgstr "%s n'est pas un contexte valide" -#: src/selinux.c:324 -#, c-format +#: src/selinux.c:330 msgid "failed to get old_context" msgstr "échec de l'obtention de old_context" -#: src/selinux.c:330 -#, c-format +#: src/selinux.c:336 msgid "unable to determine enforcing mode." msgstr "impossible de déterminer le mode de contrainte" -#: src/selinux.c:342 +#: src/selinux.c:353 #, c-format -msgid "unable to setup tty context for %s" -msgstr "impossible de mettre en place le contexte du tty pour %s" +msgid "unable to set tty context to %s" +msgstr "impossible de changer le contexte du tty en %s" -#: src/selinux.c:381 +#: src/selinux.c:392 #, c-format msgid "unable to set exec context to %s" msgstr "impossible de changer le contexte exec en %s" -#: src/selinux.c:388 +#: src/selinux.c:399 #, c-format 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:57 -#, c-format +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "exige au moins un argument" -#: src/sesh.c:78 src/sudo.c:1114 +#: src/sesh.c:106 +#, c-format +msgid "invalid file descriptor number: %s" +msgstr "numéro de descripteur de fichier invalide: %s" + +#: 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" + +#: src/sesh.c:125 src/sudo.c:1274 #, c-format msgid "unable to execute %s" msgstr "impossible d'exécuter %s" -#: src/solaris.c:88 +#: src/signal.c:68 #, c-format +msgid "unable to save handler for signal %d" +msgstr "impossible de sauvegarder le gestionnaire du signal %d" + +#: src/solaris.c:76 msgid "resource control limit has been reached" msgstr "la limite de contrôle de la ressource a été atteinte" -#: src/solaris.c:91 +#: src/solaris.c:79 #, c-format msgid "user \"%s\" is not a member of project \"%s\"" msgstr "l'utilisateur « %s » n'est pas un membre du projet « %s »" -#: src/solaris.c:95 -#, c-format +#: src/solaris.c:83 msgid "the invoking task is final" msgstr "la tâche appelante est « final »" -#: src/solaris.c:98 +#: src/solaris.c:86 #, c-format msgid "could not join project \"%s\"" msgstr "impossible de joindre le projet « %s »" -#: src/solaris.c:103 +#: src/solaris.c:91 #, 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:107 +#: src/solaris.c:95 #, 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:111 +#: src/solaris.c:99 #, 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:117 +#: src/solaris.c:105 #, c-format msgid "setproject failed for project \"%s\"" msgstr "setproject a échoué pour le projet « %s »" -#: src/solaris.c:119 +#: src/solaris.c:107 #, 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 »" -#: src/sudo.c:196 +#: src/sudo.c:212 #, c-format msgid "Sudo version %s\n" msgstr "Sudo version %s\n" -#: src/sudo.c:198 +#: src/sudo.c:214 #, c-format msgid "Configure options: %s\n" msgstr "Options de configuration : %s\n" -#: src/sudo.c:203 -#, c-format +#: src/sudo.c:222 msgid "fatal error, unable to load plugins" msgstr "erreur fatale, impossible de charger les greffons" -#: src/sudo.c:211 -#, c-format +#: src/sudo.c:230 msgid "unable to initialize policy plugin" msgstr "impossible d'initialiser le greffon de règles" -#: src/sudo.c:268 +#: src/sudo.c:276 +msgid "plugin did not return a command to execute" +msgstr "le greffon n'a pas retourné une commande à exécuter" + +#: src/sudo.c:292 #, c-format msgid "error initializing I/O plugin %s" msgstr "erreur à l'initialisation du greffon E/S %s" -#: src/sudo.c:294 +#: src/sudo.c:318 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "mode sudo 0x%x inattendu" -#: src/sudo.c:414 -#, c-format +#: src/sudo.c:461 msgid "unable to get group vector" msgstr "impossible d'obtenir le vecteur de groupes" -#: src/sudo.c:466 +#: src/sudo.c:522 #, c-format msgid "unknown uid %u: who are you?" msgstr "uid %u inconnu : qui êtes-vous ?" -#: src/sudo.c:788 +#: src/sudo.c:859 #, 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:791 +#: src/sudo.c:862 #, 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:797 +#: src/sudo.c:868 #, 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:923 +#: src/sudo.c:999 #, c-format msgid "unknown login class %s" msgstr "classe de login %s inconnue" -#: src/sudo.c:936 -#, c-format +#: src/sudo.c:1012 msgid "unable to set user context" msgstr "impossible de changer le contexte utilisateur" -#: src/sudo.c:950 -#, c-format +#: src/sudo.c:1026 msgid "unable to set supplementary group IDs" msgstr "impossible d'attribuer les ID de groupe supplémentaires" -#: src/sudo.c:957 +#: src/sudo.c:1033 #, 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:963 +#: src/sudo.c:1039 #, c-format msgid "unable to set gid to runas gid %u" msgstr "impossible de changer le gid à runas gid %u" -#: src/sudo.c:970 -#, c-format +#: src/sudo.c:1046 msgid "unable to set process priority" msgstr "impossible de changer la priorité du processus" -#: src/sudo.c:978 +#: src/sudo.c:1054 #, c-format msgid "unable to change root to %s" msgstr "impossible de changer root en %s" -#: src/sudo.c:991 src/sudo.c:997 src/sudo.c:1003 +#: src/sudo.c:1067 src/sudo.c:1073 src/sudo.c:1080 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "impossible de changer vers runas uid (%u, %u)" -#: src/sudo.c:1020 +#: src/sudo.c:1098 #, c-format msgid "unable to change directory to %s" msgstr "impossible de changer le répertoire vers %s" -#: src/sudo.c:1077 +#: src/sudo.c:1156 #, c-format msgid "unexpected child termination condition: %d" msgstr "condition de fin de l'enfant inconnue: %d" -#: src/sudo.c:1134 +#: src/sudo.c:1302 #, 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:1147 +#: src/sudo.c:1320 #, 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:1159 +#: src/sudo.c:1337 #, 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:1171 +#: src/sudo.c:1352 #, 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_edit.c:110 +#: src/sudo_edit.c:181 +msgid "unable to restore current working directory" +msgstr "impossible de rétablir le répertoire de travail actuel" + +#: src/sudo_edit.c:526 src/sudo_edit.c:630 #, c-format -msgid "unable to change uid to root (%u)" -msgstr "impossible de changer le uid en root (%u)" +msgid "%s: not a regular file" +msgstr "%s: pas un fichier régulier" -#: src/sudo_edit.c:142 +#: src/sudo_edit.c:533 #, c-format -msgid "plugin error: missing file list for sudoedit" -msgstr "erreur de greffon : liste de fichiers manquantes pour sudoedit" +msgid "%s: editing symbolic links is not permitted" +msgstr "%s: l'édition de liens symboliques n'est pas permise" -#: src/sudo_edit.c:170 src/sudo_edit.c:270 +#: src/sudo_edit.c:536 #, c-format -msgid "%s: not a regular file" -msgstr "%s: pas un fichier régulier" +msgid "%s: editing files in a writable directory is not permitted" +msgstr "%s: l'édition de fichiers dans un répertoire accessible en écriture n'est pas permis" -#: src/sudo_edit.c:204 src/sudo_edit.c:306 +#: src/sudo_edit.c:567 src/sudo_edit.c:669 #, c-format msgid "%s: short write" msgstr "%s: écriture trop courte" -#: src/sudo_edit.c:271 +#: src/sudo_edit.c:631 #, c-format msgid "%s left unmodified" msgstr "%s laissé tel quel" -#: src/sudo_edit.c:284 +#: src/sudo_edit.c:644 src/sudo_edit.c:830 #, c-format msgid "%s unchanged" msgstr "%s non modifié" -#: src/sudo_edit.c:296 src/sudo_edit.c:317 +#: src/sudo_edit.c:658 src/sudo_edit.c:680 #, c-format msgid "unable to write to %s" msgstr "impossible d'écrire dans %s" -#: src/sudo_edit.c:297 src/sudo_edit.c:315 src/sudo_edit.c:318 +#: src/sudo_edit.c:659 src/sudo_edit.c:678 src/sudo_edit.c:681 +#: src/sudo_edit.c:855 src/sudo_edit.c:859 #, c-format msgid "contents of edit session left in %s" msgstr "contenu de la session d'édition laissé dans %s" -#: src/sudo_edit.c:314 -#, c-format +#: src/sudo_edit.c:677 msgid "unable to read temporary file" msgstr "impossible de lire le fichier temporaire" -#: src/tgetpass.c:90 +#: src/sudo_edit.c:760 +msgid "sesh: internal error: odd number of paths" +msgstr "sesh: erreur interne: nombre impaire de chemins" + +#: src/sudo_edit.c:762 +msgid "sesh: unable to create temporary files" +msgstr "sesh: impossible de créer des fichiers temporaires" + +#: src/sudo_edit.c:764 src/sudo_edit.c:862 #, c-format +msgid "sesh: unknown error %d" +msgstr "sesh: erreur %d inconnue" + +#: src/sudo_edit.c:854 +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:858 +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:901 +#, c-format +msgid "unable to change uid to root (%u)" +msgstr "impossible de changer le uid en root (%u)" + +#: src/sudo_edit.c:918 +msgid "plugin error: missing file list for sudoedit" +msgstr "erreur de greffon : liste de fichiers manquantes pour sudoedit" + +#: src/sudo_edit.c:959 src/sudo_edit.c:972 +msgid "unable to read the clock" +msgstr "impossible de lire l'horloge" + +#: src/tgetpass.c:107 msgid "no tty present and no askpass program specified" msgstr "pas de tty présent et pas de programme askpass spécifié" -#: src/tgetpass.c:99 -#, c-format +#: src/tgetpass.c:116 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "pas de programme askpass spécifié, essayez avec SUDO_ASKPASS" -#: src/tgetpass.c:232 +#: src/tgetpass.c:276 #, c-format msgid "unable to set gid to %u" msgstr "impossible de changer le gid en %u" -#: src/tgetpass.c:236 +#: src/tgetpass.c:280 #, c-format msgid "unable to set uid to %u" msgstr "impossible de changer le uid en %u" -#: src/tgetpass.c:241 +#: src/tgetpass.c:285 #, c-format msgid "unable to run %s" msgstr "impossible d'exécuter %s" -#: src/utmp.c:278 -#, c-format +#: src/utmp.c:266 msgid "unable to save stdin" msgstr "impossible de sauvegarder stdin" -#: src/utmp.c:280 -#, c-format +#: src/utmp.c:268 msgid "unable to dup2 stdin" msgstr "impossible d'exécuter dup2 sur stdin" -#: src/utmp.c:283 -#, c-format +#: src/utmp.c:271 msgid "unable to restore stdin" msgstr "impossible de rétablir stdin" + +#~ msgid "unable to set terminal to raw mode" +#~ msgstr "impossible de mettre le terminal en mode brut" + +#~ msgid "internal error, tried allocate zero bytes" +#~ msgstr "erreur interne, a tenté d'allouer zéro octets" + +#~ msgid "unable to open socket" +#~ msgstr "impossible d'ouvrir la socket" + +#~ msgid "internal error, tried to emalloc2(0)" +#~ msgstr "erreur interne, emalloc2(0) a été tenté" + +#~ msgid "internal error, tried to ecalloc(0)" +#~ msgstr "erreur interne, ecalloc(0) a été tenté" + +#~ msgid "internal error, tried to erealloc(0)" +#~ msgstr "erreur interne, erealloc(0) a été tenté" + +#~ msgid "internal error, tried to erealloc3(0)" +#~ msgstr "erreur interne, erealloc3(0) a été tenté" + +#~ msgid "internal error, tried to erecalloc(0)" +#~ msgstr "erreur interne, erecalloc(0) a été tenté" + +#~ msgid "value out of range" +#~ msgstr "valeur hors limites" + +#~ msgid "%s: %s: %s\n" +#~ msgstr "%s: %s: %s\n" + +#~ msgid "%s: %s\n" +#~ msgstr "%s: %s\n" + +#~ msgid "select failed" +#~ msgstr "select a échoué" + +#~ msgid "load_interfaces: overflow detected" +#~ msgstr "load_interfaces: débordement détecté" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/po/gl.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/po/gl.mo differ diff -Nru sudo-1.8.12/po/gl.po sudo-1.8.16/po/gl.po --- sudo-1.8.12/po/gl.po 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/po/gl.po 2015-10-31 23:35:24.000000000 +0000 @@ -1,19 +1,16 @@ # Galician translations for sudo package. # This file is put in the public domain. -# # Fran Dieguez , 2012. # Francisco Diéguez , 2012. -# Leandro Regueiro , 2012, 2013, 2014. -# +# Leandro Regueiro , 2012-2015. # Proxecto Trasno - Adaptación do software libre á lingua galega: Se desexas # colaborar connosco, podes atopar máis información en -# msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.9b2\n" +"Project-Id-Version: sudo 1.8.15b1\n" "Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2013-12-11 13:41-0700\n" -"PO-Revision-Date: 2014-05-10 18:38+0100\n" +"POT-Creation-Date: 2015-09-10 14:28-0600\n" +"PO-Revision-Date: 2015-09-15 10:41+0100\n" "Last-Translator: Leandro Regueiro \n" "Language-Team: Galician \n" "Language: gl\n" @@ -21,304 +18,314 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.5.4\n" -#: common/aix.c:93 common/aix.c:150 +#: lib/util/aix.c:85 lib/util/aix.c:155 msgid "unable to open userdb" msgstr "non foi posíbel abrir userdb" -#: common/aix.c:153 +#: lib/util/aix.c:160 #, c-format msgid "unable to switch to registry \"%s\" for %s" msgstr "non foi posíbel ir ao rexistro «%s» para %s" -#: common/aix.c:170 +#: lib/util/aix.c:185 msgid "unable to restore registry" msgstr "non foi posíbel restaurar o rexistro" -#: common/alloc.c:81 -msgid "internal error, tried to emalloc(0)" -msgstr "erro interno: tentou emalloc(0)" - -#: common/alloc.c:98 -msgid "internal error, tried to emalloc2(0)" -msgstr "erro interno: tentou emalloc2(0)" - -#: common/alloc.c:100 common/alloc.c:122 common/alloc.c:162 common/alloc.c:185 +#: lib/util/aix.c:204 lib/util/gidlist.c:64 lib/util/gidlist.c:74 +#: lib/util/sudo_conf.c:185 lib/util/sudo_conf.c:265 lib/util/sudo_conf.c:342 +#: lib/util/sudo_conf.c:544 src/conversation.c:72 src/exec.c:864 +#: src/exec_common.c:96 src/exec_common.c:108 src/exec_common.c:115 +#: src/exec_pty.c:684 src/exec_pty.c:692 src/load_plugins.c:52 +#: src/load_plugins.c:65 src/load_plugins.c:208 src/load_plugins.c:231 +#: src/load_plugins.c:296 src/load_plugins.c:311 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:414 src/sesh.c:102 +#: src/sudo.c:182 src/sudo.c:359 src/sudo.c:378 src/sudo.c:442 src/sudo.c:596 +#: src/sudo.c:615 src/sudo.c:642 src/sudo.c:651 src/sudo.c:660 src/sudo.c:677 +#: src/sudo.c:729 src/sudo.c:739 src/sudo.c:763 src/sudo.c:1146 +#: src/sudo.c:1148 src/sudo.c:1154 src/sudo.c:1162 src/sudo_edit.c:150 +#: src/sudo_edit.c:425 src/sudo_edit.c:522 src/sudo_edit.c:634 +#: src/sudo_edit.c:654 #, c-format -msgid "internal error, %s overflow" -msgstr "erro interno, desbordamento en %s" +msgid "%s: %s" +msgstr "%s: %s" + +#: lib/util/aix.c:204 lib/util/gidlist.c:64 lib/util/sudo_conf.c:185 +#: lib/util/sudo_conf.c:265 lib/util/sudo_conf.c:342 lib/util/sudo_conf.c:544 +#: src/conversation.c:73 src/exec.c:864 src/exec_common.c:96 +#: src/exec_common.c:108 src/exec_common.c:115 src/exec_pty.c:684 +#: src/exec_pty.c:692 src/load_plugins.c:208 src/load_plugins.c:231 +#: src/load_plugins.c:296 src/load_plugins.c:311 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:414 src/sesh.c:102 +#: src/sudo.c:182 src/sudo.c:359 src/sudo.c:378 src/sudo.c:442 src/sudo.c:763 +#: src/sudo.c:1146 src/sudo.c:1148 src/sudo.c:1154 src/sudo.c:1162 +#: src/sudo_edit.c:150 src/sudo_edit.c:425 src/sudo_edit.c:522 +#: src/sudo_edit.c:634 src/sudo_edit.c:654 +msgid "unable to allocate memory" +msgstr "non foi posíbel asignar memoria" -#: common/alloc.c:119 -msgid "internal error, tried to ecalloc(0)" -msgstr "erro interno, tentou ecalloc(0)" - -#: common/alloc.c:141 -msgid "internal error, tried to erealloc(0)" -msgstr "erro interno, tentou erealloc(0)" - -#: common/alloc.c:160 -msgid "internal error, tried to erealloc3(0)" -msgstr "erro interno, tentou erealloc3(0)" - -#: common/alloc.c:183 -msgid "internal error, tried to erecalloc(0)" -msgstr "erro interno, tentou erealloc(0)" +#: lib/util/strsignal.c:50 +msgid "Unknown signal" +msgstr "Sinal descoñecido" -#: common/atoid.c:78 common/atoid.c:106 common/atomode.c:54 -#: compat/strtonum.c:65 compat/strtonum.c:183 +#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:48 +#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "valor non válido" -#: common/atoid.c:85 common/atoid.c:113 common/atomode.c:60 -#: compat/strtonum.c:68 compat/strtonum.c:195 +#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:54 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "valor demasiado grande" -#: common/atoid.c:91 common/atomode.c:60 compat/strtonum.c:68 -#: compat/strtonum.c:189 +#: lib/util/strtoid.c:89 lib/util/strtomode.c:54 lib/util/strtonum.c:61 +#: lib/util/strtonum.c:182 msgid "value too small" msgstr "valor demasiado pequeno" -#: common/fatal.c:158 +#: lib/util/sudo_conf.c:198 #, c-format -msgid "%s: %s: %s\n" -msgstr "%s: %s: %s\n" +msgid "invalid Path value `%s' in %s, line %u" +msgstr "" -#: common/fatal.c:161 common/fatal.c:165 +#: lib/util/sudo_conf.c:364 lib/util/sudo_conf.c:417 #, c-format -msgid "%s: %s\n" -msgstr "%s: %s\n" +msgid "invalid value for %s `%s' in %s, line %u" +msgstr "valor non válido para %s `%s' en %s, liña %u" -#: common/gidlist.c:80 src/load_plugins.c:63 src/load_plugins.c:76 -#: src/sudo.c:558 src/sudo.c:577 src/sudo.c:599 src/sudo.c:608 src/sudo.c:617 -#: src/sudo.c:632 src/sudo.c:679 src/sudo.c:689 +#: lib/util/sudo_conf.c:385 #, c-format -msgid "%s: %s" -msgstr "%s: %s" - -#: common/sudo_conf.c:177 -#, c-format -msgid "unsupported group source `%s' in %s, line %d" +msgid "unsupported group source `%s' in %s, line %u" msgstr "" -#: common/sudo_conf.c:191 +#: lib/util/sudo_conf.c:401 #, c-format -msgid "invalid max groups `%s' in %s, line %d" +msgid "invalid max groups `%s' in %s, line %u" msgstr "" -#: common/sudo_conf.c:391 +#: lib/util/sudo_conf.c:560 #, c-format msgid "unable to stat %s" msgstr "non foi posíbel executar stat en %s" -#: common/sudo_conf.c:394 +#: lib/util/sudo_conf.c:563 #, c-format msgid "%s is not a regular file" msgstr "%s non é un ficheiro normal" -#: common/sudo_conf.c:397 +#: lib/util/sudo_conf.c:566 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s é propiedade de uid %u, pero debería ser %u" -#: common/sudo_conf.c:401 +#: lib/util/sudo_conf.c:570 #, c-format msgid "%s is world writable" msgstr "%s é escribíbel por todo o mundo" -#: common/sudo_conf.c:404 +#: lib/util/sudo_conf.c:573 #, c-format msgid "%s is group writable" msgstr "%s é escribíbel polo grupo" -#: common/sudo_conf.c:414 src/selinux.c:196 src/selinux.c:209 src/sudo.c:328 +#: lib/util/sudo_conf.c:583 src/selinux.c:199 src/selinux.c:212 src/sudo.c:328 #, c-format msgid "unable to open %s" msgstr "non foi posíbel abrir %s" -#: compat/strsignal.c:50 -msgid "Unknown signal" -msgstr "Sinal descoñecido" - -#: src/exec.c:133 src/exec_pty.c:744 -msgid "policy plugin failed session initialization" -msgstr "produciuse un erro durante a inicialización de sesión do engadido de política" +#: src/exec.c:114 src/exec.c:116 src/exec.c:121 src/exec.c:409 src/exec.c:411 +#: src/exec.c:413 src/exec.c:415 src/exec.c:417 src/exec.c:420 src/exec.c:437 +#: src/exec.c:439 src/exec.c:441 src/exec.c:596 src/exec.c:791 +#: src/exec_pty.c:466 src/exec_pty.c:722 src/exec_pty.c:792 src/exec_pty.c:794 +#: src/exec_pty.c:806 src/exec_pty.c:808 src/exec_pty.c:1285 +#: src/exec_pty.c:1287 src/exec_pty.c:1292 src/exec_pty.c:1294 +#: src/exec_pty.c:1308 src/exec_pty.c:1319 src/exec_pty.c:1321 +#: src/exec_pty.c:1323 src/exec_pty.c:1325 src/exec_pty.c:1327 +#: src/exec_pty.c:1329 src/exec_pty.c:1331 src/signal.c:147 +#, c-format +msgid "unable to set handler for signal %d" +msgstr "non foi posíbel definir o manexador para o sinal %d" -#: src/exec.c:138 src/exec_pty.c:760 src/exec_pty.c:1272 src/tgetpass.c:221 +#: src/exec.c:126 src/exec_pty.c:838 src/exec_pty.c:1369 src/tgetpass.c:265 msgid "unable to fork" msgstr "non é posíbel realizar fork" -#: src/exec.c:309 src/exec.c:317 src/exec.c:841 src/exec_pty.c:507 -#: src/exec_pty.c:512 src/exec_pty.c:570 src/exec_pty.c:577 src/exec_pty.c:870 -#: src/exec_pty.c:880 src/exec_pty.c:925 src/exec_pty.c:932 -#: src/exec_pty.c:1334 src/exec_pty.c:1341 src/exec_pty.c:1348 +#: src/exec.c:304 src/exec.c:312 src/exec.c:869 src/exec_pty.c:604 +#: src/exec_pty.c:611 src/exec_pty.c:654 src/exec_pty.c:659 src/exec_pty.c:942 +#: src/exec_pty.c:952 src/exec_pty.c:997 src/exec_pty.c:1004 +#: src/exec_pty.c:1434 src/exec_pty.c:1441 src/exec_pty.c:1448 msgid "unable to add event to queue" -msgstr "" +msgstr "non foi posíbel engadir o evento á cola" -#: src/exec.c:394 +#: src/exec.c:392 msgid "unable to create sockets" msgstr "non foi posíbel crear sockets" -#: src/exec.c:477 +#: src/exec.c:448 +msgid "policy plugin failed session initialization" +msgstr "produciuse un erro durante a inicialización de sesión do engadido de política" + +#: src/exec.c:493 msgid "error in event loop" -msgstr "" +msgstr "erro no bucle de eventos" -#: src/exec.c:492 +#: src/exec.c:511 msgid "unable to restore tty label" msgstr "non foi posíbel restaurar a etiqueta tty" -#: src/exec_common.c:73 +#: src/exec.c:604 src/exec_pty.c:498 src/signal.c:86 +#, c-format +msgid "unable to restore handler for signal %d" +msgstr "non foi posíbel restaurar o manexador para o sinal %d" + +#: src/exec.c:722 src/exec_pty.c:1176 +msgid "error reading from signal pipe" +msgstr "produciuse un erro ao ler desde a tubería do sinal" + +#: src/exec_common.c:64 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "non foi posíbel retirar PRIV_PROC_EXEC desde PRIV_LIMIT" -#: src/exec_pty.c:184 +#: src/exec_pty.c:188 msgid "unable to allocate pty" msgstr "non foi posíbel asignar pty" -#: src/exec_pty.c:682 src/exec_pty.c:691 src/exec_pty.c:699 -#: src/exec_pty.c:1192 src/exec_pty.c:1269 src/signal.c:126 src/tgetpass.c:218 +#: src/exec_pty.c:766 src/exec_pty.c:775 src/exec_pty.c:783 +#: src/exec_pty.c:1277 src/exec_pty.c:1366 src/signal.c:128 src/tgetpass.c:261 msgid "unable to create pipe" msgstr "non foi psosíbel crear tubería" -#: src/exec_pty.c:735 -msgid "unable to set terminal to raw mode" -msgstr "non foi posíbel estabelcer a terminal en modo directo" - -#: src/exec_pty.c:1091 -msgid "error reading from signal pipe" -msgstr "produciuse un erro ao ler desde a tubería do sinal" - -#: src/exec_pty.c:1124 +#: src/exec_pty.c:1209 msgid "error reading from pipe" msgstr "produciuse un erro ao ler da tubería" -#: src/exec_pty.c:1149 +#: src/exec_pty.c:1234 msgid "error reading from socketpair" msgstr "produciuse un erro ao ler de socketpair" -#: src/exec_pty.c:1158 +#: src/exec_pty.c:1243 #, c-format msgid "unexpected reply type on backchannel: %d" msgstr "tipo de resposta inesperada en canles alternos %d" -#: src/exec_pty.c:1248 +#: src/exec_pty.c:1345 msgid "unable to set controlling tty" msgstr "non foi posíebl estabelecer o controlador tty" -#: src/load_plugins.c:61 src/load_plugins.c:74 src/load_plugins.c:91 -#: src/load_plugins.c:144 src/load_plugins.c:150 src/load_plugins.c:156 -#: src/load_plugins.c:197 src/load_plugins.c:204 src/load_plugins.c:211 -#: src/load_plugins.c:217 +#: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:80 +#: src/load_plugins.c:110 src/load_plugins.c:116 src/load_plugins.c:122 +#: src/load_plugins.c:163 src/load_plugins.c:171 src/load_plugins.c:178 +#: src/load_plugins.c:184 #, c-format msgid "error in %s, line %d while loading plugin `%s'" msgstr "produciuse un erro en %s, liña %d ao cargar o engadido «%s»" -#: src/load_plugins.c:93 +#: src/load_plugins.c:82 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" -#: src/load_plugins.c:152 +#: src/load_plugins.c:118 #, c-format msgid "%s must be owned by uid %d" msgstr "%s debe ser propiedade do uid %d" -#: src/load_plugins.c:158 +#: src/load_plugins.c:124 #, c-format msgid "%s must be only be writable by owner" msgstr "%s só debe ter permisos de escritura polo propietario" -#: src/load_plugins.c:199 +#: src/load_plugins.c:165 #, c-format msgid "unable to load %s: %s" msgstr "non foi posíbel cargar %s: %s" -#: src/load_plugins.c:206 +#: src/load_plugins.c:173 #, c-format msgid "unable to find symbol `%s' in %s" msgstr " non foi posíbel atopar o símbolo «%s» en %s" -#: src/load_plugins.c:213 +#: src/load_plugins.c:180 #, c-format msgid "unknown policy type %d found in %s" msgstr "tipo de política descoñecida %d atopado en %s" -#: src/load_plugins.c:219 +#: src/load_plugins.c:186 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "versión principal %d do engadido incompatíbel (agardábase %d) atopouse en %s" -#: src/load_plugins.c:228 +#: src/load_plugins.c:195 #, c-format msgid "ignoring policy plugin `%s' in %s, line %d" msgstr "" -#: src/load_plugins.c:230 +#: src/load_plugins.c:197 msgid "only a single policy plugin may be specified" msgstr "só se pode especificar unha política de engadido" -#: src/load_plugins.c:233 +#: src/load_plugins.c:200 #, c-format msgid "ignoring duplicate policy plugin `%s' in %s, line %d" msgstr "" -#: src/load_plugins.c:248 +#: src/load_plugins.c:221 #, c-format msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" msgstr "" -#: src/load_plugins.c:319 +#: src/load_plugins.c:324 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "a política do engadido %s non inclúe un método check_policy" -#: src/net_ifs.c:156 src/net_ifs.c:165 src/net_ifs.c:177 src/net_ifs.c:186 -#: src/net_ifs.c:297 src/net_ifs.c:321 -msgid "load_interfaces: overflow detected" -msgstr "load_interfaces: desbordamento detectado" - -#: src/net_ifs.c:226 -msgid "unable to open socket" -msgstr "non foi posíbel abrir o socket" - -#: src/parse_args.c:246 +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:437 #, c-format +msgid "internal error, %s overflow" +msgstr "erro interno, desbordamento en %s" + +#: src/parse_args.c:239 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "o agumento -C debe ser un número maior ou igual a 3" -#: src/parse_args.c:408 +#: src/parse_args.c:406 msgid "you may not specify both the `-i' and `-s' options" msgstr "non se deben especificar as opcións «-i» e «-s» simultáneamente" -#: src/parse_args.c:412 +#: src/parse_args.c:410 msgid "you may not specify both the `-i' and `-E' options" msgstr "non se deben especificar as opcións «-i» e «-E» simultáneamente" -#: src/parse_args.c:422 +#: src/parse_args.c:420 msgid "the `-E' option is not valid in edit mode" msgstr "a opción «-E» non é válida no modo edición" -#: src/parse_args.c:424 +#: src/parse_args.c:422 msgid "you may not specify environment variables in edit mode" msgstr "non se deben especificar variábeis de ambiente no modo edición" -#: src/parse_args.c:432 +#: src/parse_args.c:430 msgid "the `-U' option may only be used with the `-l' option" msgstr "a opción «-U» só se pode usar coa opción «-l»" -#: src/parse_args.c:436 +#: src/parse_args.c:434 msgid "the `-A' and `-S' options may not be used together" msgstr "as opcións «-A» e «-S» non se poden empregar conxuntamente" -#: src/parse_args.c:519 +#: src/parse_args.c:504 msgid "sudoedit is not supported on this platform" msgstr "sudoedit non se admite nesta plataforma" -#: src/parse_args.c:592 +#: src/parse_args.c:577 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Só pode especificar unha das opcións -e, -h, -i, -K, -l, -s, -v ou -V" -#: src/parse_args.c:606 +#: src/parse_args.c:591 #, c-format msgid "" "%s - edit files as another user\n" @@ -327,7 +334,7 @@ "%s - edita ficheiros como outro usuario\n" "\n" -#: src/parse_args.c:608 +#: src/parse_args.c:593 #, c-format msgid "" "%s - execute a command as another user\n" @@ -336,7 +343,7 @@ "%s - executa unha orde como outro usuario\n" "\n" -#: src/parse_args.c:613 +#: src/parse_args.c:598 #, c-format msgid "" "\n" @@ -345,261 +352,271 @@ "\n" "Opcións:\n" -#: src/parse_args.c:615 +#: src/parse_args.c:600 msgid "use a helper program for password prompting" msgstr "usar un programa auxiliar para a solicitude de contrasinal" -#: src/parse_args.c:618 +#: src/parse_args.c:603 msgid "use specified BSD authentication type" msgstr "usar tipo de autenticación especificado en BSD" -#: src/parse_args.c:621 +#: src/parse_args.c:606 msgid "run command in the background" msgstr "executa unha orde en segundo plano" -#: src/parse_args.c:623 +#: src/parse_args.c:608 msgid "close all file descriptors >= num" msgstr "pecha todos os descritores de ficheiro >= num" -#: src/parse_args.c:626 +#: src/parse_args.c:611 msgid "run command with the specified BSD login class" msgstr "executa unha orde coa clase de inicio de sesión especificada" -#: src/parse_args.c:629 +#: src/parse_args.c:614 msgid "preserve user environment when running command" msgstr "conserva o ambiente de usuario ao executar unha orde" -#: src/parse_args.c:631 +#: src/parse_args.c:616 msgid "edit files instead of running a command" msgstr "edita ficheiros no lugar de executar unha orde" -#: src/parse_args.c:633 +#: src/parse_args.c:618 msgid "run command as the specified group name or ID" msgstr "executa unha orde como o nome ou ID de grupo especificado" -#: src/parse_args.c:635 +#: src/parse_args.c:620 msgid "set HOME variable to target user's home dir" msgstr "define a variábel HOME como o cartafol de inicio do usuario" -#: src/parse_args.c:637 +#: src/parse_args.c:622 msgid "display help message and exit" msgstr "mostra esta mensaxe de axuda e sae" -#: src/parse_args.c:639 +#: src/parse_args.c:624 msgid "run command on host (if supported by plugin)" msgstr "" -#: src/parse_args.c:641 +#: src/parse_args.c:626 msgid "run login shell as the target user; a command may also be specified" msgstr "executar un intérprete de ordes de inicio como o usuario destino; tamén se pode especificar unha orde" -#: src/parse_args.c:643 +#: src/parse_args.c:628 msgid "remove timestamp file completely" msgstr "retira completamente un ficheiro de marca de tempo" -#: src/parse_args.c:645 +#: src/parse_args.c:630 msgid "invalidate timestamp file" msgstr "invalidar o ficheiro de marca de tempo" -#: src/parse_args.c:647 +#: src/parse_args.c:632 msgid "list user's privileges or check a specific command; use twice for longer format" -msgstr "" +msgstr "listar os privilexios do usuario ou comprobar unha orde específica; usar dúas veces para un formato máis longo" -#: src/parse_args.c:649 +#: src/parse_args.c:634 msgid "non-interactive mode, no prompts are used" msgstr "modo non interactivo, non se preguntará ao usuario" -#: src/parse_args.c:651 +#: src/parse_args.c:636 #, fuzzy msgid "preserve group vector instead of setting to target's" -msgstr "conserva o vector de grupos no lugar de definilo ao obxectivo" +msgstr "conserva o vector de grupos en vez de definilo ao obxectivo" -#: src/parse_args.c:653 +#: src/parse_args.c:638 msgid "use the specified password prompt" msgstr "usa o contrasinal especificado" -#: src/parse_args.c:656 +#: src/parse_args.c:641 msgid "create SELinux security context with specified role" msgstr "crea un contexto de seguranza SELinux co rol especificado" -#: src/parse_args.c:659 +#: src/parse_args.c:644 msgid "read password from standard input" msgstr "le o contrasinal desde a entrada estándar" -#: src/parse_args.c:661 +#: src/parse_args.c:646 msgid "run shell as the target user; a command may also be specified" msgstr "executar o intérprete de ordes como o usuario destino; tamén se pode especificar unha orde" -#: src/parse_args.c:664 +#: src/parse_args.c:649 msgid "create SELinux security context with specified type" msgstr "crea un contexto de seguranza SELinux co tipo especificado" -#: src/parse_args.c:667 +#: src/parse_args.c:652 msgid "in list mode, display privileges for user" -msgstr "" +msgstr "en modo lista, mostrar os privilexios do usuario" -#: src/parse_args.c:669 +#: src/parse_args.c:654 msgid "run command (or edit file) as specified user name or ID" msgstr "executa unha orde (ou edita un ficheiro) como o nome ou ID de usuario especificado" -#: src/parse_args.c:671 +#: src/parse_args.c:656 msgid "display version information and exit" msgstr "mostra a información da versión e sae" -#: src/parse_args.c:673 +#: src/parse_args.c:658 msgid "update user's timestamp without running a command" msgstr "actualiza a marca de tempo do usuario sen executar ningunha orde" -#: src/parse_args.c:675 +#: src/parse_args.c:660 msgid "stop processing command line arguments" msgstr "detén o proceso de argumentos da liña de ordes" -#: src/selinux.c:77 +#: src/selinux.c:78 msgid "unable to open audit system" msgstr "non foi posíbel abrir o sistema de auditoría" -#: src/selinux.c:85 +#: src/selinux.c:88 msgid "unable to send audit message" msgstr "non foi posíbel enviar a mensaxe de auditoría" -#: src/selinux.c:113 +#: src/selinux.c:116 #, c-format msgid "unable to fgetfilecon %s" msgstr "non foi posíbel executar fgetfilecon %s" -#: src/selinux.c:118 +#: src/selinux.c:121 #, c-format msgid "%s changed labels" msgstr "%s etiquetas cambiadas" -#: src/selinux.c:123 +#: src/selinux.c:126 #, c-format msgid "unable to restore context for %s" msgstr "non foi posíbel restaurar o contexto para %s" -#: src/selinux.c:163 +#: src/selinux.c:166 #, c-format msgid "unable to open %s, not relabeling tty" msgstr "non foi posíbel abrir %s, non volver a etiquetar tty" -#: src/selinux.c:172 +#: src/selinux.c:175 msgid "unable to get current tty context, not relabeling tty" msgstr "non foi posíbel obter o contexto actual de tty, non se volve etiquetar tty" -#: src/selinux.c:179 +#: src/selinux.c:182 msgid "unable to get new tty context, not relabeling tty" msgstr "non foi posíbel obter o novo contexto tty, non volver a etiquetar tty" -#: src/selinux.c:186 +#: src/selinux.c:189 msgid "unable to set new tty context" msgstr "non foi posíbel estabelecer o novo contexto tty" -#: src/selinux.c:252 +#: src/selinux.c:255 #, c-format msgid "you must specify a role for type %s" msgstr "débese especificar unha regra por tipo %s" -#: src/selinux.c:258 +#: src/selinux.c:261 #, c-format msgid "unable to get default type for role %s" msgstr "non foi posíbel obter o tipo de regra predeterminada %s" -#: src/selinux.c:276 +#: src/selinux.c:279 #, c-format msgid "failed to set new role %s" msgstr "produciuse un erro ao definir a nova regra %s" -#: src/selinux.c:280 +#: src/selinux.c:283 #, c-format msgid "failed to set new type %s" msgstr "produciuse un erro ao definir o novo tipo %s" -#: src/selinux.c:289 +#: src/selinux.c:295 #, c-format msgid "%s is not a valid context" msgstr "%s non é un contexto válido" -#: src/selinux.c:324 +#: src/selinux.c:330 msgid "failed to get old_context" msgstr "produciuse un erro ao obter old_context" -#: src/selinux.c:330 +#: src/selinux.c:336 msgid "unable to determine enforcing mode." msgstr "non foi posíbel determinar o método de forzado" -#: src/selinux.c:342 +#: src/selinux.c:353 #, c-format msgid "unable to set tty context to %s" msgstr "non foi posíbel definir o contexto tty para %s" -#: src/selinux.c:381 +#: src/selinux.c:392 #, c-format msgid "unable to set exec context to %s" msgstr "non foi posíbel o contexto de execución a %s" -#: src/selinux.c:388 +#: src/selinux.c:399 #, c-format msgid "unable to set key creation context to %s" msgstr "non foi posíbel estabelecer a chave de creación de contexto a %s" -#: src/sesh.c:57 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "require cando menos un argumento" -#: src/sesh.c:78 src/sudo.c:1088 +#: src/sesh.c:107 +#, c-format +msgid "unable to run %s as a login shell" +msgstr "non foi posíbel executar %s como shell de inicio de sesión" + +#: src/sesh.c:112 src/sudo.c:1217 #, c-format msgid "unable to execute %s" msgstr "non é posíbel executar %s" -#: src/solaris.c:88 +#: src/signal.c:68 +#, c-format +msgid "unable to save handler for signal %d" +msgstr "non foi posíbel gardar o manexador para o sinal %d" + +#: src/solaris.c:76 msgid "resource control limit has been reached" -msgstr "o límite de control de recursos foi alcanzado" +msgstr "acadouse o límite de control de recursos" -#: src/solaris.c:91 +#: src/solaris.c:79 #, c-format msgid "user \"%s\" is not a member of project \"%s\"" msgstr "o usuario «%s» non é membro do grupo «%s»" -#: src/solaris.c:95 +#: src/solaris.c:83 msgid "the invoking task is final" msgstr "a tarefa que invoca é definitiva" -#: src/solaris.c:98 +#: src/solaris.c:86 #, c-format msgid "could not join project \"%s\"" msgstr "non é posíbel unirse ao proxecto «%s»" -#: src/solaris.c:103 +#: src/solaris.c:91 #, c-format msgid "no resource pool accepting default bindings exists for project \"%s\"" msgstr "non hai fondo de recursos aceptando as asignacións existentes par ao proxecto «%s»" -#: src/solaris.c:107 +#: src/solaris.c:95 #, c-format msgid "specified resource pool does not exist for project \"%s\"" msgstr "o fondo de recursos especificado non existe para o proxecto «%s»" -#: src/solaris.c:111 +#: src/solaris.c:99 #, c-format msgid "could not bind to default resource pool for project \"%s\"" msgstr "non é posíbel ligar ao fondo de recursos predeterminado para o proxecto «%s»" -#: src/solaris.c:117 +#: src/solaris.c:105 #, c-format msgid "setproject failed for project \"%s\"" msgstr "configuración do proxecto fallada «%s»" -#: src/solaris.c:119 +#: src/solaris.c:107 #, c-format msgid "warning, resource control assignment failed for project \"%s\"" msgstr "aviso, o control de asignación de recuros fallou para o proxecto «%s»" -#: src/sudo.c:196 +#: src/sudo.c:193 #, c-format msgid "Sudo version %s\n" msgstr "Sudo versión %s\n" -#: src/sudo.c:198 +#: src/sudo.c:195 #, c-format msgid "Configure options: %s\n" msgstr "Opcións de configuración: %s\n" @@ -622,177 +639,238 @@ msgid "unexpected sudo mode 0x%x" msgstr "modo sudo 0x%x non agardado" -#: src/sudo.c:413 +#: src/sudo.c:422 msgid "unable to get group vector" msgstr "non é posíbel obter o vector de grupo" -#: src/sudo.c:465 +#: src/sudo.c:485 #, c-format msgid "unknown uid %u: who are you?" msgstr "uid descoñecido %u: quen é vostede?" -#: src/sudo.c:762 +#: src/sudo.c:812 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s debe ser propiedade do uid %d e debe ter definido o bit setuid" -#: src/sudo.c:765 +#: src/sudo.c:815 #, 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 "o uid efectivo non é %d, é %s nun sistema de ficheiros coa opción «nosuid» definida ou nun sistema de ficheiros NFS sen privilexios de root?" -#: src/sudo.c:771 +#: src/sudo.c:821 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "o uid efectivo non é %d, está sudo instalado con setuid de root?" -#: src/sudo.c:897 +#: src/sudo.c:952 #, c-format msgid "unknown login class %s" msgstr "clase de inicio de sesión descoñecida %s" -#: src/sudo.c:910 +#: src/sudo.c:965 msgid "unable to set user context" msgstr "non foi posíbel estabelecer o contexto do usuario" -#: src/sudo.c:924 +#: src/sudo.c:979 msgid "unable to set supplementary group IDs" msgstr "non foi posíbel estabelecer o grupo suplementario de IDs" -#: src/sudo.c:931 +#: src/sudo.c:986 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "non foi posíbel estabelcer o gid efectivo para executar como gid %u" -#: src/sudo.c:937 +#: src/sudo.c:992 #, c-format msgid "unable to set gid to runas gid %u" msgstr "non foi posíbel estabelcer o gid para executar como gid %u" -#: src/sudo.c:944 +#: src/sudo.c:999 msgid "unable to set process priority" msgstr "non foi posíbel estabelecer a prioridade de proceso" -#: src/sudo.c:952 +#: src/sudo.c:1007 #, c-format msgid "unable to change root to %s" msgstr "non foi posíbel cambiar de root a %s" -#: src/sudo.c:965 src/sudo.c:971 src/sudo.c:977 +#: src/sudo.c:1020 src/sudo.c:1026 src/sudo.c:1033 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "non foi posíbel cambiar as runas uid (%u, %u)" -#: src/sudo.c:994 +#: src/sudo.c:1051 #, c-format msgid "unable to change directory to %s" msgstr "non foi posíbel cambiar ao cartafol %s" -#: src/sudo.c:1051 +#: src/sudo.c:1112 #, c-format msgid "unexpected child termination condition: %d" msgstr "terminación de condición filla non agardada: %d" -#: src/sudo.c:1108 +#: src/sudo.c:1245 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "a política do engadido %s non inclúe ningún método «check_policy»" -#: src/sudo.c:1121 +#: src/sudo.c:1263 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "a política do engadido %s non admite listar os privilexios" -#: src/sudo.c:1133 +#: src/sudo.c:1280 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "a política do engadido %s non admite a opción -v" -#: src/sudo.c:1145 +#: src/sudo.c:1295 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "a normativa do engadido %s non admite as opcións -k/-K" -#: src/sudo_edit.c:110 -#, c-format -msgid "unable to change uid to root (%u)" -msgstr "non foi posíbel cambiar uid a root (%u)" - -#: src/sudo_edit.c:142 -msgid "plugin error: missing file list for sudoedit" -msgstr "erro do engadido: falta a lista de ficheiros para sudoedit" - -#: src/sudo_edit.c:170 src/sudo_edit.c:270 +#: src/sudo_edit.c:238 src/sudo_edit.c:339 #, c-format msgid "%s: not a regular file" msgstr "%s: non é un ficheiro regular" -#: src/sudo_edit.c:204 src/sudo_edit.c:306 +#: src/sudo_edit.c:245 +#, c-format +msgid "%s: editing symbolic links is not permitted" +msgstr "%s: a edición de ligazóns simbólicas non está permitida" + +#: src/sudo_edit.c:276 src/sudo_edit.c:378 #, c-format msgid "%s: short write" msgstr "%s: escritura curta" -#: src/sudo_edit.c:271 +#: src/sudo_edit.c:340 #, c-format msgid "%s left unmodified" msgstr "%s sen modificar" -#: src/sudo_edit.c:284 +#: src/sudo_edit.c:353 src/sudo_edit.c:539 #, c-format msgid "%s unchanged" msgstr "%s sen cambios" -#: src/sudo_edit.c:296 src/sudo_edit.c:317 +#: src/sudo_edit.c:367 src/sudo_edit.c:389 #, c-format msgid "unable to write to %s" msgstr "non foi posíbel escribir en %s" -#: src/sudo_edit.c:297 src/sudo_edit.c:315 src/sudo_edit.c:318 +#: src/sudo_edit.c:368 src/sudo_edit.c:387 src/sudo_edit.c:390 +#: src/sudo_edit.c:564 src/sudo_edit.c:568 #, c-format msgid "contents of edit session left in %s" msgstr "os contidos de edición de sesión déixanse en %s" -#: src/sudo_edit.c:314 +#: src/sudo_edit.c:386 msgid "unable to read temporary file" msgstr "non é posíbel ler o ficheiro temporal" -#: src/tgetpass.c:90 +#: src/sudo_edit.c:469 +msgid "sesh: internal error: odd number of paths" +msgstr "sesh: erro interno: número impar de rutas" + +#: src/sudo_edit.c:471 +msgid "sesh: unable to create temporary files" +msgstr "sesh: non é posíbel crear ficheiros temporais" + +#: src/sudo_edit.c:473 src/sudo_edit.c:571 +#, c-format +msgid "sesh: unknown error %d" +msgstr "sesh: erro descoñecido %d" + +#: src/sudo_edit.c:563 +msgid "unable to copy temporary files back to their original location" +msgstr "non foi posíbel copiar os ficheiros temporais de volta á súa localización orixinal" + +#: src/sudo_edit.c:567 +msgid "unable to copy some of the temporary files back to their original location" +msgstr "non foi posíbel copiar algúns ficheiros temporais de volta á súa localización orixinal" + +#: src/sudo_edit.c:610 +#, c-format +msgid "unable to change uid to root (%u)" +msgstr "non foi posíbel cambiar uid a root (%u)" + +#: src/sudo_edit.c:627 +msgid "plugin error: missing file list for sudoedit" +msgstr "erro do engadido: falta a lista de ficheiros para sudoedit" + +#: src/sudo_edit.c:668 src/sudo_edit.c:681 +msgid "unable to read the clock" +msgstr "non foi posíbel ler o reloxo" + +#: src/tgetpass.c:107 msgid "no tty present and no askpass program specified" msgstr "sen tty presente e non se especificou un programa askpass" -#: src/tgetpass.c:99 +#: src/tgetpass.c:116 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "non hai programa askpass especificado, tente estabelecer SUDO_ASKPASS" -#: src/tgetpass.c:232 +#: src/tgetpass.c:276 #, c-format msgid "unable to set gid to %u" msgstr "non foi posíbel estabelecer o gid a %u" -#: src/tgetpass.c:236 +#: src/tgetpass.c:280 #, c-format msgid "unable to set uid to %u" msgstr "non foi posíbel estabelecer o uid a %u" -#: src/tgetpass.c:241 +#: src/tgetpass.c:285 #, c-format msgid "unable to run %s" msgstr "non foi posíbel executar %s" -#: src/utmp.c:278 +#: src/utmp.c:266 msgid "unable to save stdin" msgstr "non foi posíbel gardar stdin" -#: src/utmp.c:280 +#: src/utmp.c:268 msgid "unable to dup2 stdin" msgstr "non foi posíbel facer dup2 stdin" -#: src/utmp.c:283 +#: src/utmp.c:271 msgid "unable to restore stdin" msgstr "non foi posíbel restaurar stdin" -#~ msgid "unable to allocate memory" -#~ msgstr "non foi posíbel asignar memoria" +#~ msgid "internal error, tried to emalloc(0)" +#~ msgstr "erro interno: tentou emalloc(0)" + +#~ msgid "internal error, tried to emalloc2(0)" +#~ msgstr "erro interno: tentou emalloc2(0)" + +#~ msgid "internal error, tried to ecalloc(0)" +#~ msgstr "erro interno, tentou ecalloc(0)" + +#~ msgid "internal error, tried to erealloc(0)" +#~ msgstr "erro interno, tentou erealloc(0)" + +#~ msgid "internal error, tried to erealloc3(0)" +#~ msgstr "erro interno, tentou erealloc3(0)" + +#~ msgid "internal error, tried to erecalloc(0)" +#~ msgstr "erro interno, tentou erealloc(0)" + +#~ msgid "%s: %s: %s\n" +#~ msgstr "%s: %s: %s\n" + +#~ msgid "%s: %s\n" +#~ msgstr "%s: %s\n" + +#~ msgid "unable to set terminal to raw mode" +#~ msgstr "non foi posíbel estabelcer a terminal en modo directo" + +#~ msgid "load_interfaces: overflow detected" +#~ msgstr "load_interfaces: desbordamento detectado" + +#~ msgid "unable to open socket" +#~ msgstr "non foi posíbel abrir o socket" #~ msgid ": " #~ msgstr ": " @@ -800,9 +878,6 @@ #~ msgid "select failed" #~ msgstr "selección fallada" -#~ msgid "unknown user: %s" -#~ msgstr "usuario descoñecido: %s" - #~ msgid "list user's available commands\n" #~ msgstr "lista de ordes do usuario dispoñíbeis\n" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/po/hu.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/po/hu.mo differ diff -Nru sudo-1.8.12/po/hu.po sudo-1.8.16/po/hu.po --- sudo-1.8.12/po/hu.po 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.16/po/hu.po 2016-03-17 16:13:10.000000000 +0000 @@ -0,0 +1,856 @@ +# Hungarian translation of sudo +# Copyright (C) 2016. Free Software Foundation, Inc. +# This file is distributed under the same license as the sudo package. +# +# Gabor Kelemen , 2016. +msgid "" +msgstr "" +"Project-Id-Version: sudo 1.8.15rc3\n" +"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" +"POT-Creation-Date: 2015-10-24 06:26-0600\n" +"PO-Revision-Date: 2016-01-03 01:56+0100\n" +"Last-Translator: Gabor Kelemen \n" +"Language-Team: Hungarian \n" +"Language: hu\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-Launchpad-Export-Date: 2016-01-03 00:40+0000\n" +"X-Generator: Launchpad (build 17865)\n" + +#: lib/util/aix.c:85 lib/util/aix.c:155 +msgid "unable to open userdb" +msgstr "userdb megnyitása sikertelen" + +#: lib/util/aix.c:160 +#, c-format +msgid "unable to switch to registry \"%s\" for %s" +msgstr "" + +#: lib/util/aix.c:185 +msgid "unable to restore registry" +msgstr "a rendszerleíró visszaállítása sikertelen" + +#: lib/util/aix.c:204 lib/util/gidlist.c:64 lib/util/gidlist.c:74 +#: lib/util/sudo_conf.c:185 lib/util/sudo_conf.c:265 lib/util/sudo_conf.c:342 +#: lib/util/sudo_conf.c:544 src/conversation.c:75 src/exec.c:863 +#: src/exec_common.c:96 src/exec_common.c:108 src/exec_common.c:115 +#: src/exec_pty.c:684 src/exec_pty.c:692 src/load_plugins.c:52 +#: src/load_plugins.c:65 src/load_plugins.c:208 src/load_plugins.c:231 +#: src/load_plugins.c:296 src/load_plugins.c:311 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:414 src/sesh.c:102 +#: src/sudo.c:182 src/sudo.c:371 src/sudo.c:390 src/sudo.c:454 src/sudo.c:608 +#: src/sudo.c:627 src/sudo.c:654 src/sudo.c:663 src/sudo.c:672 src/sudo.c:689 +#: src/sudo.c:746 src/sudo.c:756 src/sudo.c:780 src/sudo.c:1160 +#: src/sudo.c:1162 src/sudo.c:1168 src/sudo.c:1176 src/sudo_edit.c:151 +#: src/sudo_edit.c:602 src/sudo_edit.c:699 src/sudo_edit.c:811 +#: src/sudo_edit.c:831 +#, c-format +msgid "%s: %s" +msgstr "%s: %s" + +#: lib/util/aix.c:204 lib/util/gidlist.c:64 lib/util/sudo_conf.c:185 +#: lib/util/sudo_conf.c:265 lib/util/sudo_conf.c:342 lib/util/sudo_conf.c:544 +#: src/conversation.c:76 src/exec.c:863 src/exec_common.c:96 +#: src/exec_common.c:108 src/exec_common.c:115 src/exec_pty.c:684 +#: src/exec_pty.c:692 src/load_plugins.c:208 src/load_plugins.c:231 +#: src/load_plugins.c:296 src/load_plugins.c:311 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:414 src/sesh.c:102 +#: src/sudo.c:182 src/sudo.c:371 src/sudo.c:390 src/sudo.c:454 src/sudo.c:780 +#: src/sudo.c:1160 src/sudo.c:1162 src/sudo.c:1168 src/sudo.c:1176 +#: src/sudo_edit.c:151 src/sudo_edit.c:602 src/sudo_edit.c:699 +#: src/sudo_edit.c:811 src/sudo_edit.c:831 +msgid "unable to allocate memory" +msgstr "a memóriafoglalás sikertelen" + +#: lib/util/strsignal.c:48 +msgid "Unknown signal" +msgstr "Ismeretlen szignál" + +#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:48 +#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 +msgid "invalid value" +msgstr "érvénytelen érték" + +#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:54 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 +msgid "value too large" +msgstr "túl magas érték" + +#: lib/util/strtoid.c:89 lib/util/strtomode.c:54 lib/util/strtonum.c:61 +#: lib/util/strtonum.c:182 +msgid "value too small" +msgstr "túl alacsony érték" + +#: lib/util/sudo_conf.c:198 +#, c-format +msgid "invalid Path value `%s' in %s, line %u" +msgstr "" + +#: lib/util/sudo_conf.c:364 lib/util/sudo_conf.c:417 +#, c-format +msgid "invalid value for %s `%s' in %s, line %u" +msgstr "" + +#: lib/util/sudo_conf.c:385 +#, c-format +msgid "unsupported group source `%s' in %s, line %u" +msgstr "" + +#: lib/util/sudo_conf.c:401 +#, c-format +msgid "invalid max groups `%s' in %s, line %u" +msgstr "" + +#: lib/util/sudo_conf.c:560 +#, c-format +msgid "unable to stat %s" +msgstr "%s nem érhető el" + +#: lib/util/sudo_conf.c:563 +#, c-format +msgid "%s is not a regular file" +msgstr "a(z) %s nem egy szabályos fájl" + +#: lib/util/sudo_conf.c:566 +#, c-format +msgid "%s is owned by uid %u, should be %u" +msgstr "" + +#: lib/util/sudo_conf.c:570 +#, c-format +msgid "%s is world writable" +msgstr "" + +#: lib/util/sudo_conf.c:573 +#, c-format +msgid "%s is group writable" +msgstr "" + +#: lib/util/sudo_conf.c:583 src/selinux.c:199 src/selinux.c:212 src/sudo.c:340 +#, c-format +msgid "unable to open %s" +msgstr "%s nem nyitható meg" + +#: src/exec.c:114 src/exec.c:116 src/exec.c:121 src/exec.c:409 src/exec.c:411 +#: src/exec.c:413 src/exec.c:415 src/exec.c:417 src/exec.c:419 src/exec.c:422 +#: src/exec.c:438 src/exec.c:440 src/exec.c:595 src/exec.c:790 +#: src/exec_pty.c:466 src/exec_pty.c:722 src/exec_pty.c:792 src/exec_pty.c:794 +#: src/exec_pty.c:806 src/exec_pty.c:808 src/exec_pty.c:1285 +#: src/exec_pty.c:1287 src/exec_pty.c:1292 src/exec_pty.c:1294 +#: src/exec_pty.c:1308 src/exec_pty.c:1319 src/exec_pty.c:1321 +#: src/exec_pty.c:1323 src/exec_pty.c:1325 src/exec_pty.c:1327 +#: src/exec_pty.c:1329 src/exec_pty.c:1331 src/signal.c:147 +#, c-format +msgid "unable to set handler for signal %d" +msgstr "%d szignál kezelőjének beállítása sikertelen" + +#: src/exec.c:126 src/exec_pty.c:838 src/exec_pty.c:1369 src/tgetpass.c:265 +msgid "unable to fork" +msgstr "" + +#: src/exec.c:304 src/exec.c:312 src/exec.c:868 src/exec_pty.c:604 +#: src/exec_pty.c:611 src/exec_pty.c:654 src/exec_pty.c:659 src/exec_pty.c:942 +#: src/exec_pty.c:952 src/exec_pty.c:997 src/exec_pty.c:1004 +#: src/exec_pty.c:1434 src/exec_pty.c:1441 src/exec_pty.c:1448 +msgid "unable to add event to queue" +msgstr "" + +#: src/exec.c:392 +msgid "unable to create sockets" +msgstr "" + +#: src/exec.c:447 +msgid "policy plugin failed session initialization" +msgstr "" + +#: src/exec.c:492 +msgid "error in event loop" +msgstr "" + +#: src/exec.c:510 +msgid "unable to restore tty label" +msgstr "" + +#: src/exec.c:603 src/exec_pty.c:498 src/signal.c:86 +#, c-format +msgid "unable to restore handler for signal %d" +msgstr "%d szignál kezelőjének visszaállítása sikertelen" + +#: src/exec.c:721 src/exec_pty.c:1176 +msgid "error reading from signal pipe" +msgstr "" + +#: src/exec_common.c:64 +msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" +msgstr "" + +#: src/exec_pty.c:188 +msgid "unable to allocate pty" +msgstr "pty allokálása sikertelen" + +#: src/exec_pty.c:766 src/exec_pty.c:775 src/exec_pty.c:783 +#: src/exec_pty.c:1277 src/exec_pty.c:1366 src/signal.c:128 src/tgetpass.c:261 +msgid "unable to create pipe" +msgstr "adatcsatorna létrehozása sikertelen" + +#: src/exec_pty.c:1209 +msgid "error reading from pipe" +msgstr "hiba az adatcsatornából olvasáskor" + +#: src/exec_pty.c:1234 +msgid "error reading from socketpair" +msgstr "" + +#: src/exec_pty.c:1243 +#, c-format +msgid "unexpected reply type on backchannel: %d" +msgstr "" + +#: src/exec_pty.c:1345 +msgid "unable to set controlling tty" +msgstr "" + +#: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:80 +#: src/load_plugins.c:110 src/load_plugins.c:116 src/load_plugins.c:122 +#: src/load_plugins.c:163 src/load_plugins.c:171 src/load_plugins.c:178 +#: src/load_plugins.c:184 +#, c-format +msgid "error in %s, line %d while loading plugin `%s'" +msgstr "hiba: %s, %d. sorában a(z) „%s” bővítmény betöltése közben" + +#: src/load_plugins.c:82 +#, c-format +msgid "%s%s: %s" +msgstr "%s%s: %s" + +#: src/load_plugins.c:118 +#, c-format +msgid "%s must be owned by uid %d" +msgstr "" + +#: src/load_plugins.c:124 +#, c-format +msgid "%s must be only be writable by owner" +msgstr "" + +#: src/load_plugins.c:165 +#, c-format +msgid "unable to load %s: %s" +msgstr "a(z) %s nem tölthető be: %s" + +#: src/load_plugins.c:173 +#, c-format +msgid "unable to find symbol `%s' in %s" +msgstr "" + +#: src/load_plugins.c:180 +#, c-format +msgid "unknown policy type %d found in %s" +msgstr "" + +#: src/load_plugins.c:186 +#, c-format +msgid "incompatible plugin major version %d (expected %d) found in %s" +msgstr "" + +#: src/load_plugins.c:195 +#, c-format +msgid "ignoring policy plugin `%s' in %s, line %d" +msgstr "" + +#: src/load_plugins.c:197 +msgid "only a single policy plugin may be specified" +msgstr "" + +#: src/load_plugins.c:200 +#, c-format +msgid "ignoring duplicate policy plugin `%s' in %s, line %d" +msgstr "" + +#: src/load_plugins.c:221 +#, c-format +msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" +msgstr "" + +#: src/load_plugins.c:324 +#, c-format +msgid "policy plugin %s does not include a check_policy method" +msgstr "" + +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:449 +#, c-format +msgid "internal error, %s overflow" +msgstr "belső hiba, %s túlcsordul" + +#: src/parse_args.c:239 +msgid "the argument to -C must be a number greater than or equal to 3" +msgstr "a -C kapcsoló argumentuma legyen 3, vagy ennél nagyobb szám" + +#: src/parse_args.c:406 +msgid "you may not specify both the `-i' and `-s' options" +msgstr "az „-i” és „-s” kapcsoló egyszerre nem használható" + +#: src/parse_args.c:410 +msgid "you may not specify both the `-i' and `-E' options" +msgstr "az „-i” és „-E” kapcsoló egyszerre nem használható" + +#: src/parse_args.c:420 +msgid "the `-E' option is not valid in edit mode" +msgstr "az „-E” kapcsoló nem használható szerkesztő módban" + +#: src/parse_args.c:422 +msgid "you may not specify environment variables in edit mode" +msgstr "nem használhat környezeti változókat szerkesztő módban" + +#: src/parse_args.c:430 +msgid "the `-U' option may only be used with the `-l' option" +msgstr "az „-U” kapcsoló csak a „-l” kapcsolóval együtt alkalmazható" + +#: src/parse_args.c:434 +msgid "the `-A' and `-S' options may not be used together" +msgstr "az „-A” és „-S” kapcsoló együtt nem használható" + +#: src/parse_args.c:504 +msgid "sudoedit is not supported on this platform" +msgstr "a „sudoedit” nem támogatott ezen a rendszeren" + +#: src/parse_args.c:577 +msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" +msgstr "Kizárólag az -e, -h, -i, -K, -l, -s, -v vagy -V kapcsolók egyike használható" + +#: src/parse_args.c:591 +#, c-format +msgid "" +"%s - edit files as another user\n" +"\n" +msgstr "" +"%s - fájlok szerkesztése más felhasználóként\n" +"\n" + +#: src/parse_args.c:593 +#, c-format +msgid "" +"%s - execute a command as another user\n" +"\n" +msgstr "" +"%s - parancs végrehajtása más felhasználóként\n" +"\n" + +#: src/parse_args.c:598 +#, c-format +msgid "" +"\n" +"Options:\n" +msgstr "" +"\n" +"Kapcsolók:\n" + +#: src/parse_args.c:600 +msgid "use a helper program for password prompting" +msgstr "segédprogram használata a jelszóbekérésre" + +#: src/parse_args.c:603 +msgid "use specified BSD authentication type" +msgstr "megadott BSD hitelesítési típus használata" + +#: src/parse_args.c:606 +msgid "run command in the background" +msgstr "parancs futtatása háttérben" + +#: src/parse_args.c:608 +msgid "close all file descriptors >= num" +msgstr "minden fájlleíró lezárása, ami >= num" + +#: src/parse_args.c:611 +msgid "run command with the specified BSD login class" +msgstr "parancs futtatása a megadott BSD bejelentkezési osztállyal" + +#: src/parse_args.c:614 +msgid "preserve user environment when running command" +msgstr "felhasználói környezet megőrzése parancsfuttatáskor" + +#: src/parse_args.c:616 +msgid "edit files instead of running a command" +msgstr "fájlok szerkesztése parancs futtatása helyett" + +#: src/parse_args.c:618 +msgid "run command as the specified group name or ID" +msgstr "parancs futtatása megadott csoportnévként vagy -azonosítóként" + +#: src/parse_args.c:620 +msgid "set HOME variable to target user's home dir" +msgstr "a HOME változó beállítása a cél felhasználó saját könyvtárára" + +#: src/parse_args.c:622 +msgid "display help message and exit" +msgstr "súgóüzenet megjelenítése és kilépés" + +#: src/parse_args.c:624 +msgid "run command on host (if supported by plugin)" +msgstr "parancs futtatása a hoszton (ha bővítmény támogatja)" + +#: src/parse_args.c:626 +msgid "run login shell as the target user; a command may also be specified" +msgstr "bejelentkezési parancsértelmező futtatása a cél felhasználóként; egy parancs is megadható" + +#: src/parse_args.c:628 +msgid "remove timestamp file completely" +msgstr "időbélyeg fájl teljes eltávolítása" + +#: src/parse_args.c:630 +msgid "invalidate timestamp file" +msgstr "időbélyeg fájl érvénytelenítése" + +#: src/parse_args.c:632 +msgid "list user's privileges or check a specific command; use twice for longer format" +msgstr "felhasználó privilégiumainak kiírása, vagy adott parancs ellenőrzése, kétszer megadva hosszabb formátumban" + +#: src/parse_args.c:634 +msgid "non-interactive mode, no prompts are used" +msgstr "nem interaktív mód, kérdések nélkül" + +#: src/parse_args.c:636 +msgid "preserve group vector instead of setting to target's" +msgstr "csoportvektor megőrzése a céléra beállítás helyett" + +#: src/parse_args.c:638 +msgid "use the specified password prompt" +msgstr "a megadott jelszóprompt használata" + +#: src/parse_args.c:641 +msgid "create SELinux security context with specified role" +msgstr "SELinux biztonsági kontextus létrehozása a megadott szereppel" + +#: src/parse_args.c:644 +msgid "read password from standard input" +msgstr "jelszó olvasása a szabványos bemenetről" + +#: src/parse_args.c:646 +msgid "run shell as the target user; a command may also be specified" +msgstr "parancsértelmező futtatása a cél felhasználóként; egy parancs is megadható" + +#: src/parse_args.c:649 +msgid "create SELinux security context with specified type" +msgstr "SELinux biztonsági kontextus létrehozása a megadott típussal" + +#: src/parse_args.c:652 +msgid "in list mode, display privileges for user" +msgstr "lista módban írja ki a felhasználó privilégumait" + +#: src/parse_args.c:654 +msgid "run command (or edit file) as specified user name or ID" +msgstr "parancs futtatása (vagy fájl szerkesztése) a megadott nevű vagy azonosítójú felhasználóként" + +#: src/parse_args.c:656 +msgid "display version information and exit" +msgstr "verzióinformáció kiírása és kilépés" + +#: src/parse_args.c:658 +msgid "update user's timestamp without running a command" +msgstr "felhasználó időbélyegének frissítése parancs futtatása nélkül" + +#: src/parse_args.c:660 +msgid "stop processing command line arguments" +msgstr "parancssori argumentumok feldolgozásának befejezése" + +#: src/selinux.c:78 +msgid "unable to open audit system" +msgstr "" + +#: src/selinux.c:88 +msgid "unable to send audit message" +msgstr "" + +#: src/selinux.c:116 +#, c-format +msgid "unable to fgetfilecon %s" +msgstr "" + +#: src/selinux.c:121 +#, c-format +msgid "%s changed labels" +msgstr "" + +#: src/selinux.c:126 +#, c-format +msgid "unable to restore context for %s" +msgstr "" + +#: src/selinux.c:166 +#, c-format +msgid "unable to open %s, not relabeling tty" +msgstr "" + +#: src/selinux.c:175 +msgid "unable to get current tty context, not relabeling tty" +msgstr "" + +#: src/selinux.c:182 +msgid "unable to get new tty context, not relabeling tty" +msgstr "" + +#: src/selinux.c:189 +msgid "unable to set new tty context" +msgstr "" + +#: src/selinux.c:255 +#, c-format +msgid "you must specify a role for type %s" +msgstr "" + +#: src/selinux.c:261 +#, c-format +msgid "unable to get default type for role %s" +msgstr "" + +#: src/selinux.c:279 +#, c-format +msgid "failed to set new role %s" +msgstr "%s új szerep beállítása meghiúsult" + +#: src/selinux.c:283 +#, c-format +msgid "failed to set new type %s" +msgstr "%s új típus beállítása meghiúsult" + +#: src/selinux.c:295 +#, c-format +msgid "%s is not a valid context" +msgstr "" + +#: src/selinux.c:330 +msgid "failed to get old_context" +msgstr "" + +#: src/selinux.c:336 +msgid "unable to determine enforcing mode." +msgstr "" + +#: src/selinux.c:353 +#, c-format +msgid "unable to set tty context to %s" +msgstr "" + +#: src/selinux.c:392 +#, c-format +msgid "unable to set exec context to %s" +msgstr "" + +#: src/selinux.c:399 +#, c-format +msgid "unable to set key creation context to %s" +msgstr "" + +#: src/sesh.c:77 +msgid "requires at least one argument" +msgstr "legalább egy argumentum szükséges" + +#: src/sesh.c:107 +#, c-format +msgid "unable to run %s as a login shell" +msgstr "%s futtatása bejelentkezési parancsértelmezőként sikertelen" + +#: src/sesh.c:112 src/sudo.c:1231 +#, c-format +msgid "unable to execute %s" +msgstr "%s nem hajtható végre" + +#: src/signal.c:68 +#, c-format +msgid "unable to save handler for signal %d" +msgstr "%d szignál kezelőjének mentése sikertelen" + +#: src/solaris.c:76 +msgid "resource control limit has been reached" +msgstr "" + +#: src/solaris.c:79 +#, c-format +msgid "user \"%s\" is not a member of project \"%s\"" +msgstr "„%s” felhasználó nem tagja ennek a projektnek: „%s”" + +#: src/solaris.c:83 +msgid "the invoking task is final" +msgstr "" + +#: src/solaris.c:86 +#, c-format +msgid "could not join project \"%s\"" +msgstr "„%s” projekthez való csatlakozás meghiúsult" + +#: src/solaris.c:91 +#, c-format +msgid "no resource pool accepting default bindings exists for project \"%s\"" +msgstr "" + +#: src/solaris.c:95 +#, c-format +msgid "specified resource pool does not exist for project \"%s\"" +msgstr "" + +#: src/solaris.c:99 +#, c-format +msgid "could not bind to default resource pool for project \"%s\"" +msgstr "" + +#: src/solaris.c:105 +#, c-format +msgid "setproject failed for project \"%s\"" +msgstr "" + +#: src/solaris.c:107 +#, c-format +msgid "warning, resource control assignment failed for project \"%s\"" +msgstr "" + +#: src/sudo.c:193 +#, c-format +msgid "Sudo version %s\n" +msgstr "Sudo %s verzió\n" + +#: src/sudo.c:195 +#, c-format +msgid "Configure options: %s\n" +msgstr "Configure kapcsolói: %s\n" + +#: src/sudo.c:203 +msgid "fatal error, unable to load plugins" +msgstr "végzetes hiba történt: bővítmények betöltése sikertelen" + +#: src/sudo.c:211 +msgid "unable to initialize policy plugin" +msgstr "" + +#: src/sudo.c:267 +#, c-format +msgid "error initializing I/O plugin %s" +msgstr "" + +#: src/sudo.c:293 +#, c-format +msgid "unexpected sudo mode 0x%x" +msgstr "" + +#: src/sudo.c:434 +msgid "unable to get group vector" +msgstr "" + +#: src/sudo.c:497 +#, c-format +msgid "unknown uid %u: who are you?" +msgstr "" + +#: src/sudo.c:829 +#, c-format +msgid "%s must be owned by uid %d and have the setuid bit set" +msgstr "" + +#: src/sudo.c:832 +#, 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:838 +#, c-format +msgid "effective uid is not %d, is sudo installed setuid root?" +msgstr "" + +#: src/sudo.c:969 +#, c-format +msgid "unknown login class %s" +msgstr "" + +#: src/sudo.c:982 +msgid "unable to set user context" +msgstr "" + +#: src/sudo.c:996 +msgid "unable to set supplementary group IDs" +msgstr "" + +#: src/sudo.c:1003 +#, c-format +msgid "unable to set effective gid to runas gid %u" +msgstr "" + +#: src/sudo.c:1009 +#, c-format +msgid "unable to set gid to runas gid %u" +msgstr "" + +#: src/sudo.c:1016 +msgid "unable to set process priority" +msgstr "folyamat prioritásának beállítása: sikertelen" + +#: src/sudo.c:1024 +#, c-format +msgid "unable to change root to %s" +msgstr "" + +#: src/sudo.c:1037 src/sudo.c:1043 src/sudo.c:1050 +#, c-format +msgid "unable to change to runas uid (%u, %u)" +msgstr "" + +#: src/sudo.c:1068 +#, c-format +msgid "unable to change directory to %s" +msgstr "%s mappába váltás sikertelen" + +#: src/sudo.c:1126 +#, c-format +msgid "unexpected child termination condition: %d" +msgstr "" + +#: src/sudo.c:1259 +#, c-format +msgid "policy plugin %s is missing the `check_policy' method" +msgstr "" + +#: src/sudo.c:1277 +#, c-format +msgid "policy plugin %s does not support listing privileges" +msgstr "" + +#: src/sudo.c:1294 +#, c-format +msgid "policy plugin %s does not support the -v option" +msgstr "" + +#: src/sudo.c:1309 +#, c-format +msgid "policy plugin %s does not support the -k/-K options" +msgstr "" + +#: src/sudo_edit.c:202 +msgid "unable to restore current working directory" +msgstr "az aktuális munkakönyvtár visszaállítása sikertelen" + +#: src/sudo_edit.c:412 src/sudo_edit.c:516 +#, c-format +msgid "%s: not a regular file" +msgstr "%s: nem normál fájl" + +#: src/sudo_edit.c:419 +#, c-format +msgid "%s: editing symbolic links is not permitted" +msgstr "" + +#: src/sudo_edit.c:422 +#, c-format +msgid "%s: editing files in a writable directory is not permitted" +msgstr "" + +#: src/sudo_edit.c:453 src/sudo_edit.c:555 +#, c-format +msgid "%s: short write" +msgstr "" + +#: src/sudo_edit.c:517 +#, c-format +msgid "%s left unmodified" +msgstr "" + +#: src/sudo_edit.c:530 src/sudo_edit.c:716 +#, c-format +msgid "%s unchanged" +msgstr "%s változatlan" + +#: src/sudo_edit.c:544 src/sudo_edit.c:566 +#, c-format +msgid "unable to write to %s" +msgstr "%s nem írható" + +#: src/sudo_edit.c:545 src/sudo_edit.c:564 src/sudo_edit.c:567 +#: src/sudo_edit.c:741 src/sudo_edit.c:745 +#, c-format +msgid "contents of edit session left in %s" +msgstr "" + +#: src/sudo_edit.c:563 +msgid "unable to read temporary file" +msgstr "az átmeneti fájl olvasása sikertelen" + +#: src/sudo_edit.c:646 +msgid "sesh: internal error: odd number of paths" +msgstr "" + +#: src/sudo_edit.c:648 +msgid "sesh: unable to create temporary files" +msgstr "sesh: nem sikerült ideiglenes fájlokat létrehozni" + +#: src/sudo_edit.c:650 src/sudo_edit.c:748 +#, c-format +msgid "sesh: unknown error %d" +msgstr "" + +#: src/sudo_edit.c:740 +msgid "unable to copy temporary files back to their original location" +msgstr "" + +#: src/sudo_edit.c:744 +msgid "unable to copy some of the temporary files back to their original location" +msgstr "" + +#: src/sudo_edit.c:787 +#, c-format +msgid "unable to change uid to root (%u)" +msgstr "" + +#: src/sudo_edit.c:804 +msgid "plugin error: missing file list for sudoedit" +msgstr "" + +#: src/sudo_edit.c:845 src/sudo_edit.c:858 +msgid "unable to read the clock" +msgstr "az óra olvasása sikertelen" + +#: src/tgetpass.c:107 +msgid "no tty present and no askpass program specified" +msgstr "" + +#: src/tgetpass.c:116 +msgid "no askpass program specified, try setting SUDO_ASKPASS" +msgstr "" + +#: src/tgetpass.c:276 +#, c-format +msgid "unable to set gid to %u" +msgstr "" + +#: src/tgetpass.c:280 +#, c-format +msgid "unable to set uid to %u" +msgstr "" + +#: src/tgetpass.c:285 +#, c-format +msgid "unable to run %s" +msgstr "%s futtatása sikertelen" + +#: src/utmp.c:266 +msgid "unable to save stdin" +msgstr "stdin mentése sikertelen" + +#: src/utmp.c:268 +msgid "unable to dup2 stdin" +msgstr "" + +#: src/utmp.c:271 +msgid "unable to restore stdin" +msgstr "stdin visszaállítása sikertelen" + +#~ msgid "%s: %s: %s\n" +#~ msgstr "%s: %s: %s\n" + +#~ msgid "%s: %s\n" +#~ msgstr "%s: %s\n" + +#~ msgid "unable to open socket" +#~ msgstr "a foglalatot nem lehet megnyitni" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/po/it.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/po/it.mo differ diff -Nru sudo-1.8.12/po/it.po sudo-1.8.16/po/it.po --- sudo-1.8.12/po/it.po 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/po/it.po 2016-03-17 16:13:10.000000000 +0000 @@ -1,13 +1,13 @@ # Italian translations for sudo package # This file is put in the public domain. -# Milo Casagrande , 2011, 2012, 2013, 2014. +# Milo Casagrande , 2011, 2012, 2013, 2014, 2015, 2016. # msgid "" msgstr "" -"Project-Id-Version: sudo-1.8.12b1\n" -"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-10-27 12:35-0600\n" -"PO-Revision-Date: 2014-11-09 17:00+0100\n" +"Project-Id-Version: sudo-1.8.16b1\n" +"Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" +"POT-Creation-Date: 2016-02-19 15:48-0700\n" +"PO-Revision-Date: 2016-02-28 16:32+0100\n" "Last-Translator: Milo Casagrande \n" "Language-Team: Italian \n" "Language: it\n" @@ -15,299 +15,314 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" -"X-Generator: Poedit 1.6.10\n" +"X-Generator: Poedit 1.8.7\n" -#: lib/util/aix.c:92 lib/util/aix.c:151 +#: lib/util/aix.c:85 lib/util/aix.c:164 msgid "unable to open userdb" msgstr "impossibile aprire lo userdb" -#: lib/util/aix.c:156 +#: lib/util/aix.c:219 #, c-format msgid "unable to switch to registry \"%s\" for %s" msgstr "impossibile passare al registro \"%s\" per %s" -#: lib/util/aix.c:175 +#: lib/util/aix.c:244 msgid "unable to restore registry" msgstr "impossibile ripristinare il registro" -#: lib/util/alloc.c:68 lib/util/alloc.c:85 lib/util/alloc.c:106 -#: lib/util/alloc.c:128 lib/util/alloc.c:147 lib/util/alloc.c:170 -msgid "internal error, tried allocate zero bytes" -msgstr "errore interno, tentativo di allocare 0 byte" - -#: lib/util/alloc.c:87 lib/util/alloc.c:109 lib/util/alloc.c:149 -#: lib/util/alloc.c:172 src/net_ifs.c:174 src/net_ifs.c:191 src/net_ifs.c:325 -#, c-format -msgid "internal error, %s overflow" -msgstr "errore interno, overflow di %s" - -#: lib/util/gidlist.c:78 src/load_plugins.c:61 src/load_plugins.c:74 -#: src/sudo.c:572 src/sudo.c:591 src/sudo.c:618 src/sudo.c:627 src/sudo.c:636 -#: src/sudo.c:653 src/sudo.c:700 src/sudo.c:710 +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/gidlist.c:74 +#: lib/util/sudo_conf.c:207 lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 +#: lib/util/sudo_conf.c:569 src/conversation.c:75 src/exec.c:863 +#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 +#: src/exec_pty.c:684 src/exec_pty.c:692 src/load_plugins.c:52 +#: src/load_plugins.c:65 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:655 src/sudo.c:665 src/sudo.c:685 src/sudo.c:704 src/sudo.c:713 +#: src/sudo.c:722 src/sudo.c:739 src/sudo.c:780 src/sudo.c:790 src/sudo.c:810 +#: src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 src/sudo.c:1492 +#: src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/util/strsignal.c:50 +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/sudo_conf.c:208 +#: lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 lib/util/sudo_conf.c:569 +#: src/conversation.c:76 src/exec.c:863 src/exec_common.c:107 +#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:684 +#: src/exec_pty.c:692 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:810 src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 +#: src/sudo.c:1492 src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 +msgid "unable to allocate memory" +msgstr "impossibile allocare memoria" + +#: lib/util/strsignal.c:48 msgid "Unknown signal" msgstr "Segnale sconosciuto" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:65 lib/util/strtonum.c:183 +#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:48 +#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "valore non valido" -#: lib/util/strtoid.c:90 lib/util/strtoid.c:118 lib/util/strtomode.c:61 -#: lib/util/strtonum.c:68 lib/util/strtonum.c:195 +#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:54 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "valore troppo grande" -#: lib/util/strtoid.c:96 lib/util/strtomode.c:61 lib/util/strtonum.c:68 -#: lib/util/strtonum.c:189 +#: lib/util/strtoid.c:89 lib/util/strtomode.c:54 lib/util/strtonum.c:61 +#: lib/util/strtonum.c:182 msgid "value too small" msgstr "valore troppo piccolo" -#: lib/util/sudo_conf.c:181 +#: lib/util/sudo_conf.c:223 #, c-format msgid "invalid Path value `%s' in %s, line %u" msgstr "valore percorso \"%s\" non valido in %s, riga %u" -#: lib/util/sudo_conf.c:335 lib/util/sudo_conf.c:388 +#: lib/util/sudo_conf.c:389 lib/util/sudo_conf.c:442 #, c-format msgid "invalid value for %s `%s' in %s, line %u" msgstr "valore %s \"%s\" non valido in %s, riga %u" -#: lib/util/sudo_conf.c:356 +#: lib/util/sudo_conf.c:410 #, c-format msgid "unsupported group source `%s' in %s, line %u" msgstr "gruppo sorgente \"%s\" non supportato in %s, riga %u" -#: lib/util/sudo_conf.c:372 +#: lib/util/sudo_conf.c:426 #, c-format msgid "invalid max groups `%s' in %s, line %u" msgstr "gruppi massimi \"%s\" non validi in %s, riga %u" -#: lib/util/sudo_conf.c:522 +#: lib/util/sudo_conf.c:585 #, c-format msgid "unable to stat %s" msgstr "impossibile eseguire stat su %s" -#: lib/util/sudo_conf.c:525 +#: lib/util/sudo_conf.c:588 #, c-format msgid "%s is not a regular file" msgstr "%s non è un file regolare" -#: lib/util/sudo_conf.c:528 +#: lib/util/sudo_conf.c:591 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s è di proprietà dello uid %u, dovrebbe essere di %u" -#: lib/util/sudo_conf.c:532 +#: lib/util/sudo_conf.c:595 #, c-format msgid "%s is world writable" msgstr "%s è scrivibile da tutti" -#: lib/util/sudo_conf.c:535 +#: lib/util/sudo_conf.c:598 #, c-format msgid "%s is group writable" msgstr "%s è scrivibile dal gruppo" -#: lib/util/sudo_conf.c:545 src/selinux.c:196 src/selinux.c:209 src/sudo.c:341 +#: lib/util/sudo_conf.c:608 src/selinux.c:199 src/selinux.c:212 src/sudo.c:367 #, c-format msgid "unable to open %s" msgstr "impossibile aprire %s" -#: src/exec.c:123 src/exec.c:128 src/exec.c:423 src/exec.c:425 src/exec.c:427 -#: src/exec.c:429 src/exec.c:431 src/exec.c:433 src/exec.c:436 src/exec.c:453 -#: src/exec.c:455 src/exec.c:457 src/exec.c:605 src/exec.c:800 -#: src/exec_pty.c:480 src/exec_pty.c:736 src/exec_pty.c:806 src/exec_pty.c:808 -#: src/exec_pty.c:820 src/exec_pty.c:1308 src/exec_pty.c:1310 -#: src/exec_pty.c:1315 src/exec_pty.c:1317 src/exec_pty.c:1331 -#: src/exec_pty.c:1342 src/exec_pty.c:1344 src/exec_pty.c:1346 -#: src/exec_pty.c:1348 src/exec_pty.c:1350 src/exec_pty.c:1352 -#: src/exec_pty.c:1354 src/signal.c:156 +#: src/exec.c:114 src/exec.c:116 src/exec.c:121 src/exec.c:409 src/exec.c:411 +#: src/exec.c:413 src/exec.c:415 src/exec.c:417 src/exec.c:419 src/exec.c:422 +#: src/exec.c:438 src/exec.c:440 src/exec.c:595 src/exec.c:790 +#: src/exec_pty.c:466 src/exec_pty.c:722 src/exec_pty.c:792 src/exec_pty.c:794 +#: src/exec_pty.c:806 src/exec_pty.c:808 src/exec_pty.c:1289 +#: src/exec_pty.c:1291 src/exec_pty.c:1296 src/exec_pty.c:1298 +#: src/exec_pty.c:1312 src/exec_pty.c:1323 src/exec_pty.c:1325 +#: src/exec_pty.c:1327 src/exec_pty.c:1329 src/exec_pty.c:1331 +#: src/exec_pty.c:1333 src/exec_pty.c:1335 src/signal.c:147 #, c-format msgid "unable to set handler for signal %d" msgstr "impossibile impostare il gestore per il segnale %d" -#: src/exec.c:135 src/exec_pty.c:845 -msgid "policy plugin failed session initialization" -msgstr "inizializzazione della sessione non riuscita da parte del plugin della politica" - -#: src/exec.c:140 src/exec_pty.c:861 src/exec_pty.c:1392 src/tgetpass.c:221 +#: src/exec.c:126 src/exec_pty.c:838 src/exec_pty.c:1373 src/tgetpass.c:265 msgid "unable to fork" msgstr "impossibile eseguire fork" -#: src/exec.c:318 src/exec.c:326 src/exec.c:877 src/exec_pty.c:604 -#: src/exec_pty.c:609 src/exec_pty.c:667 src/exec_pty.c:674 src/exec_pty.c:965 -#: src/exec_pty.c:975 src/exec_pty.c:1020 src/exec_pty.c:1027 -#: src/exec_pty.c:1457 src/exec_pty.c:1464 src/exec_pty.c:1471 +#: src/exec.c:304 src/exec.c:312 src/exec.c:868 src/exec_pty.c:604 +#: src/exec_pty.c:611 src/exec_pty.c:654 src/exec_pty.c:659 src/exec_pty.c:946 +#: src/exec_pty.c:956 src/exec_pty.c:1001 src/exec_pty.c:1008 +#: src/exec_pty.c:1438 src/exec_pty.c:1445 src/exec_pty.c:1452 msgid "unable to add event to queue" msgstr "impossibile aggiungere l'evento alla coda" -#: src/exec.c:406 +#: src/exec.c:392 msgid "unable to create sockets" msgstr "impossibile creare socket" -#: src/exec.c:502 +#: src/exec.c:447 +msgid "policy plugin failed session initialization" +msgstr "inizializzazione della sessione non riuscita da parte del plugin della politica" + +#: src/exec.c:492 msgid "error in event loop" msgstr "errore nel ciclo dell'evento" -#: src/exec.c:520 +#: src/exec.c:510 msgid "unable to restore tty label" msgstr "impossibile ripristinare l'etichetta tty" -#: src/exec.c:613 src/exec_pty.c:514 src/signal.c:95 +#: src/exec.c:603 src/exec_pty.c:498 src/signal.c:86 #, c-format msgid "unable to restore handler for signal %d" msgstr "impossibile ripristinare il gestore per il segnale %d" -#: src/exec.c:731 src/exec_pty.c:1199 +#: src/exec.c:721 src/exec_pty.c:1180 msgid "error reading from signal pipe" msgstr "errore nel leggere dalla pipe di segnale" -#: src/exec_common.c:73 +#: src/exec_common.c:166 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "impossibile rimuovere PRIV_PROC_EXEC da PRIV_LIMIT" -#: src/exec_pty.c:200 +#: src/exec_pty.c:188 msgid "unable to allocate pty" msgstr "impossibile allocare pty" -#: src/exec_pty.c:780 src/exec_pty.c:789 src/exec_pty.c:797 -#: src/exec_pty.c:1300 src/exec_pty.c:1389 src/signal.c:137 src/tgetpass.c:218 +#: src/exec_pty.c:766 src/exec_pty.c:775 src/exec_pty.c:783 +#: src/exec_pty.c:1281 src/exec_pty.c:1370 src/signal.c:128 src/tgetpass.c:261 msgid "unable to create pipe" msgstr "impossibile creare una pipe" -#: src/exec_pty.c:836 -msgid "unable to set terminal to raw mode" -msgstr "impossibile impostare il terminale in modalità raw" - -#: src/exec_pty.c:1232 +#: src/exec_pty.c:1213 msgid "error reading from pipe" msgstr "errore nel leggere dalla pipe" -#: src/exec_pty.c:1257 +#: src/exec_pty.c:1238 msgid "error reading from socketpair" msgstr "errore nel leggere dal socketpair" -#: src/exec_pty.c:1266 +#: src/exec_pty.c:1247 #, c-format msgid "unexpected reply type on backchannel: %d" msgstr "tipologia di risposta inattesa sul backchannel: %d" -#: src/exec_pty.c:1368 +#: src/exec_pty.c:1349 msgid "unable to set controlling tty" msgstr "impossibile impostare il tty di controllo" -#: src/load_plugins.c:59 src/load_plugins.c:72 src/load_plugins.c:89 -#: src/load_plugins.c:142 src/load_plugins.c:148 src/load_plugins.c:154 -#: src/load_plugins.c:195 src/load_plugins.c:202 src/load_plugins.c:209 -#: src/load_plugins.c:215 +#: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 +#: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 +#: src/load_plugins.c:170 src/load_plugins.c:178 src/load_plugins.c:185 +#: src/load_plugins.c:191 #, c-format msgid "error in %s, line %d while loading plugin `%s'" msgstr "errore in %s, riga %d, durante il caricamento del plugin \"%s\"" -#: src/load_plugins.c:91 +#: src/load_plugins.c:87 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" -#: src/load_plugins.c:150 +#: src/load_plugins.c:125 #, c-format msgid "%s must be owned by uid %d" msgstr "%s deve essere di proprietà dello uid %d" -#: src/load_plugins.c:156 +#: src/load_plugins.c:131 #, c-format msgid "%s must be only be writable by owner" msgstr "%s deve essere scrivibile solo dal proprietario" -#: src/load_plugins.c:197 +#: src/load_plugins.c:172 #, c-format msgid "unable to load %s: %s" msgstr "impossibile caricare %s: %s" -#: src/load_plugins.c:204 +#: src/load_plugins.c:180 #, c-format msgid "unable to find symbol `%s' in %s" msgstr "impossibile trovare il simbolo \"%s\" in %s" -#: src/load_plugins.c:211 +#: src/load_plugins.c:187 #, c-format msgid "unknown policy type %d found in %s" msgstr "politica di tipo %d sconosciuta trovata in %s" -#: src/load_plugins.c:217 +#: src/load_plugins.c:193 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "numero principale di versione del plugin %d non compatibile (atteso %d) trovato in %s" -#: src/load_plugins.c:226 +#: src/load_plugins.c:202 #, c-format msgid "ignoring policy plugin `%s' in %s, line %d" msgstr "viene ignorato il plugin di politica \"%s\" in %s, riga %d" -#: src/load_plugins.c:228 +#: src/load_plugins.c:204 msgid "only a single policy plugin may be specified" msgstr "solo un plugin di politica può essere specificato" -#: src/load_plugins.c:231 +#: src/load_plugins.c:207 #, c-format msgid "ignoring duplicate policy plugin `%s' in %s, line %d" msgstr "viene ignorato il plugin di politica duplicato \"%s\" in %s, riga %d" -#: src/load_plugins.c:249 +#: src/load_plugins.c:228 #, c-format msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" msgstr "viene ignorato il plugin di I/O duplicato \"%s\" in %s, riga %d" -#: src/load_plugins.c:338 +#: src/load_plugins.c:331 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "il plugin di politica %s non include un metodo check_policy" -#: src/net_ifs.c:236 -msgid "unable to open socket" -msgstr "impossibile aprire socket" +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:476 +#, c-format +msgid "internal error, %s overflow" +msgstr "errore interno, overflow di %s" -#: src/parse_args.c:241 +#: src/parse_args.c:239 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:403 +#: src/parse_args.c:406 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:407 +#: src/parse_args.c:410 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:417 +#: src/parse_args.c:420 msgid "the `-E' option is not valid in edit mode" msgstr "l'opzione \"-E\" non è valida in modalità di modifica" -#: src/parse_args.c:419 +#: src/parse_args.c:422 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:427 +#: src/parse_args.c:430 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:431 +#: src/parse_args.c:434 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:497 +#: src/parse_args.c:504 msgid "sudoedit is not supported on this platform" msgstr "sudoedit non è supportato su questa piattaforma" -#: src/parse_args.c:570 +#: src/parse_args.c:577 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Solo una delle opzioni -e, -h, -i, -K, -l, -s, -v o -V può essere specificata" -#: src/parse_args.c:584 +#: src/parse_args.c:591 #, c-format msgid "" "%s - edit files as another user\n" @@ -316,7 +331,7 @@ "%s - modifica file come un altro utente\n" "\n" -#: src/parse_args.c:586 +#: src/parse_args.c:593 #, c-format msgid "" "%s - execute a command as another user\n" @@ -325,7 +340,7 @@ "%s - esegue un comando come un altro utente\n" "\n" -#: src/parse_args.c:591 +#: src/parse_args.c:598 #, c-format msgid "" "\n" @@ -334,480 +349,507 @@ "\n" "Opzioni:\n" -#: src/parse_args.c:593 +#: src/parse_args.c:600 msgid "use a helper program for password prompting" msgstr "Utilizza un programma d'aiuto per richiedere la password" -#: src/parse_args.c:596 +#: src/parse_args.c:603 msgid "use specified BSD authentication type" msgstr "Utilizza la tipologia di autenticazione BSD specificata" -#: src/parse_args.c:599 +#: src/parse_args.c:606 msgid "run command in the background" msgstr "Esegue il comando in background" -#: src/parse_args.c:601 +#: src/parse_args.c:608 msgid "close all file descriptors >= num" msgstr "Chiude tutti i descrittori di file >= num" -#: src/parse_args.c:604 +#: src/parse_args.c:611 msgid "run command with the specified BSD login class" msgstr "Esegue il comando con la classe di accesso BSD specificata" -#: src/parse_args.c:607 +#: src/parse_args.c:614 msgid "preserve user environment when running command" msgstr "Mantiene l'ambiente dell'utente quando viene eseguito il comando" -#: src/parse_args.c:609 +#: src/parse_args.c:616 msgid "edit files instead of running a command" msgstr "Modifica i file invece di eseguire un comando" -#: src/parse_args.c:611 +#: src/parse_args.c:618 msgid "run command as the specified group name or ID" msgstr "Esegue il comando come il gruppo o l'ID specificato" -#: src/parse_args.c:613 +#: src/parse_args.c:620 msgid "set HOME variable to target user's home dir" msgstr "Imposta la variabile HOME alla directory dell'utente finale" -#: src/parse_args.c:615 +#: src/parse_args.c:622 msgid "display help message and exit" msgstr "Visualizza il messaggio di aiuto ed esce" -#: src/parse_args.c:617 +#: src/parse_args.c:624 msgid "run command on host (if supported by plugin)" msgstr "Esegue il comando sull'host (se supportato dal plugin)" -#: src/parse_args.c:619 +#: src/parse_args.c:626 msgid "run login shell as the target user; a command may also be specified" msgstr "Esegue una shell di login come l'utente finale; può essere specificato un comando" -#: src/parse_args.c:621 +#: src/parse_args.c:628 msgid "remove timestamp file completely" msgstr "Rimuove completamente il file temporale" -#: src/parse_args.c:623 +#: src/parse_args.c:630 msgid "invalidate timestamp file" msgstr "Invalida il file temporale" -#: src/parse_args.c:625 +#: src/parse_args.c:632 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "Elenca i privilegi dell'utente o verifica un comando specifico; usare due volte per il formato più lungo" -#: src/parse_args.c:627 +#: src/parse_args.c:634 msgid "non-interactive mode, no prompts are used" msgstr "Modalità non interattiva, non richiede nulla all'utente" -#: src/parse_args.c:629 +#: src/parse_args.c:636 msgid "preserve group vector instead of setting to target's" msgstr "Mantiene il vettore di gruppo invece di impostarlo a quello dell'obiettivo" -#: src/parse_args.c:631 +#: src/parse_args.c:638 msgid "use the specified password prompt" msgstr "Utilizza la richiesta della password specificata" -#: src/parse_args.c:634 +#: src/parse_args.c:641 msgid "create SELinux security context with specified role" msgstr "Crea il contesto di sicurezza SELinux con il ruolo specificato" -#: src/parse_args.c:637 +#: src/parse_args.c:644 msgid "read password from standard input" msgstr "Legge la password dallo standard input" -#: src/parse_args.c:639 +#: src/parse_args.c:646 msgid "run shell as the target user; a command may also be specified" msgstr "Esegue la shell come l'utente finale; può essere specificato un comando" -#: src/parse_args.c:642 +#: src/parse_args.c:649 msgid "create SELinux security context with specified type" msgstr "Crea il contesto di sicurezza SELinux con il tipo specificato" -#: src/parse_args.c:645 +#: src/parse_args.c:652 msgid "in list mode, display privileges for user" msgstr "In modalità elenco, visualizza i privilegi dell'utente" -#: src/parse_args.c:647 +#: src/parse_args.c:654 msgid "run command (or edit file) as specified user name or ID" msgstr "Esegue un comando (o modifica un file) come il nome utente o l'ID specificato" -#: src/parse_args.c:649 +#: src/parse_args.c:656 msgid "display version information and exit" msgstr "Visualizza le informazioni sulla versione ed esce" -#: src/parse_args.c:651 +#: src/parse_args.c:658 msgid "update user's timestamp without running a command" msgstr "Aggiorna il timestamp dell'utente senza eseguire un comando" -#: src/parse_args.c:653 +#: src/parse_args.c:660 msgid "stop processing command line arguments" msgstr "Ferma l'elaborazione degli argomenti a riga di comando" -#: src/selinux.c:77 +#: src/selinux.c:78 msgid "unable to open audit system" msgstr "impossibile aprire il sistema di audit" -#: src/selinux.c:85 +#: src/selinux.c:88 msgid "unable to send audit message" msgstr "impossibile inviare il messaggio di audit" -#: src/selinux.c:113 +#: src/selinux.c:116 #, c-format msgid "unable to fgetfilecon %s" msgstr "impossibile eseguire fgetfilecon %s" -#: src/selinux.c:118 +#: src/selinux.c:121 #, c-format msgid "%s changed labels" msgstr "%s ha modificato le etichette" -#: src/selinux.c:123 +#: src/selinux.c:126 #, c-format msgid "unable to restore context for %s" msgstr "impossibile ripristinare il contesto per %s" -#: src/selinux.c:163 +#: src/selinux.c:166 #, c-format msgid "unable to open %s, not relabeling tty" msgstr "impossibile aprire %s, tty non viene ri-etichettato" -#: src/selinux.c:172 +#: src/selinux.c:175 msgid "unable to get current tty context, not relabeling tty" msgstr "impossibile ottenere il contesto tty attuale, tty non viene ri-etichettato" -#: src/selinux.c:179 +#: src/selinux.c:182 msgid "unable to get new tty context, not relabeling tty" msgstr "impossibile ottenere il nuovo contesto tty, tty non viene ri-etichettato" -#: src/selinux.c:186 +#: src/selinux.c:189 msgid "unable to set new tty context" msgstr "impossibile impostare il nuovo contesto tty" -#: src/selinux.c:252 +#: src/selinux.c:255 #, c-format msgid "you must specify a role for type %s" msgstr "è necessario specificare un ruolo per la tipologia %s" -#: src/selinux.c:258 +#: src/selinux.c:261 #, c-format msgid "unable to get default type for role %s" msgstr "impossibile ottenere la tipologia predefinita per il ruolo %s" -#: src/selinux.c:276 +#: src/selinux.c:279 #, c-format msgid "failed to set new role %s" msgstr "impossibile impostare il nuovo ruolo %s" -#: src/selinux.c:280 +#: src/selinux.c:283 #, c-format msgid "failed to set new type %s" msgstr "impossibile impostare la nuova tipologia %s" -#: src/selinux.c:289 +#: src/selinux.c:295 #, c-format msgid "%s is not a valid context" msgstr "%s non è un contesto valido" -#: src/selinux.c:324 +#: src/selinux.c:330 msgid "failed to get old_context" msgstr "recupero del vecchio contesto non riuscito" -#: src/selinux.c:330 +#: src/selinux.c:336 msgid "unable to determine enforcing mode." msgstr "impossibile determinare la modalità di rispetto." -#: src/selinux.c:347 +#: src/selinux.c:353 #, c-format msgid "unable to set tty context to %s" msgstr "impossibile impostare il contesto tty a %s" -#: src/selinux.c:386 +#: src/selinux.c:392 #, c-format msgid "unable to set exec context to %s" msgstr "impossibile impostare il contesto exec a %s" -#: src/selinux.c:393 +#: src/selinux.c:399 #, c-format msgid "unable to set key creation context to %s" msgstr "impossibile impostare il contesto di creazione della chiave a %s" -#: src/sesh.c:80 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "richiede almeno un argomento" -#: src/sesh.c:109 +#: src/sesh.c:106 +#, c-format +msgid "invalid file descriptor number: %s" +msgstr "numero descrittore file non valido: %s" + +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "impossibile eseguire %s come shell di login" -#: src/sesh.c:114 src/sudo.c:1186 +#: src/sesh.c:125 src/sudo.c:1274 #, c-format msgid "unable to execute %s" msgstr "impossibile eseguire %s" -#: src/signal.c:77 +#: src/signal.c:68 #, c-format msgid "unable to save handler for signal %d" msgstr "impossibile salvare il gestore per il segnale %d" -#: src/solaris.c:88 +#: src/solaris.c:76 msgid "resource control limit has been reached" msgstr "raggiunto il limite di controllo delle risorse" -#: src/solaris.c:91 +#: src/solaris.c:79 #, c-format msgid "user \"%s\" is not a member of project \"%s\"" msgstr "l'utente \"%s\" non fa parte del progetto \"%s\"" -#: src/solaris.c:95 +#: src/solaris.c:83 msgid "the invoking task is final" msgstr "il task chiamante è definitivo" -#: src/solaris.c:98 +#: src/solaris.c:86 #, c-format msgid "could not join project \"%s\"" msgstr "impossibile unirsi al progetto \"%s\"" -#: src/solaris.c:103 +#: src/solaris.c:91 #, 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:107 +#: src/solaris.c:95 #, 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:111 +#: src/solaris.c:99 #, 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:117 +#: src/solaris.c:105 #, c-format msgid "setproject failed for project \"%s\"" msgstr "setproject per il progetto \"%s\" non riuscita" -#: src/solaris.c:119 +#: src/solaris.c:107 #, c-format msgid "warning, resource control assignment failed for project \"%s\"" msgstr "attenzione, assegnazione della risorsa di controllo per il progetto \"%s\" non riuscita" -#: src/sudo.c:209 +#: src/sudo.c:212 #, c-format msgid "Sudo version %s\n" msgstr "Versione di sudo: %s\n" -#: src/sudo.c:211 +#: src/sudo.c:214 #, c-format msgid "Configure options: %s\n" msgstr "Opzioni di configurazione: %s\n" -#: src/sudo.c:216 +#: src/sudo.c:222 msgid "fatal error, unable to load plugins" msgstr "errore irreversibile, impossibile caricare i plugin" -#: src/sudo.c:224 +#: src/sudo.c:230 msgid "unable to initialize policy plugin" msgstr "impossibile inizializzare il plugin delle politiche" -#: src/sudo.c:280 +#: src/sudo.c:276 +msgid "plugin did not return a command to execute" +msgstr "il plug-in non ha restituito un comando da eseguire" + +#: src/sudo.c:292 #, c-format msgid "error initializing I/O plugin %s" msgstr "errore nell'inizializzare il plugin di I/O %s" -#: src/sudo.c:306 +#: src/sudo.c:318 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "modalità 0x%x di sudo non attesa" -#: src/sudo.c:426 +#: src/sudo.c:461 msgid "unable to get group vector" msgstr "impossibile ottenere il vettore di gruppo" # (ndt) mah... andrebbe resa meglio... -#: src/sudo.c:478 +#: src/sudo.c:522 #, c-format msgid "unknown uid %u: who are you?" msgstr "uid %u sconosciuto: utente sconosciuto." -#: src/sudo.c:785 +#: src/sudo.c:859 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s deve essere di proprietà dello uid %d e avere il bit setuid impostato" -#: src/sudo.c:788 +#: src/sudo.c:862 #, 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 "lo uid effettivo non è %d. %s si trova su un file system con l'opzione \"nosuid\" impostata o su un file system NFS senza privilegi di root?" -#: src/sudo.c:794 +#: src/sudo.c:868 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "lo uid effettivo non è %d. Il programma sudo è installato con setuid root?" -#: src/sudo.c:923 +#: src/sudo.c:999 #, c-format msgid "unknown login class %s" msgstr "classe di accesso %s sconosciuta" -#: src/sudo.c:936 +#: src/sudo.c:1012 msgid "unable to set user context" msgstr "impossibile impostare il contesto utente" -#: src/sudo.c:950 +#: src/sudo.c:1026 msgid "unable to set supplementary group IDs" msgstr "impossibile impostare ID di gruppo supplementari" -#: src/sudo.c:957 +#: src/sudo.c:1033 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "impossibile impostare il gid effettivo per eseguire come %u" -#: src/sudo.c:963 +#: src/sudo.c:1039 #, c-format msgid "unable to set gid to runas gid %u" msgstr "impossibile impostare il gid per eseguire come gid %u" -#: src/sudo.c:970 +#: src/sudo.c:1046 msgid "unable to set process priority" msgstr "impossibile impostare la priorità del processo" -#: src/sudo.c:978 +#: src/sudo.c:1054 #, c-format msgid "unable to change root to %s" msgstr "impossibile modificare root a %s" -#: src/sudo.c:991 src/sudo.c:997 src/sudo.c:1003 +#: src/sudo.c:1067 src/sudo.c:1073 src/sudo.c:1080 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "impossibile passare a un diverso uid (%u, %u)" -#: src/sudo.c:1021 +#: src/sudo.c:1098 #, c-format msgid "unable to change directory to %s" msgstr "impossibile passare alla root %s" -#: src/sudo.c:1082 +#: src/sudo.c:1156 #, c-format msgid "unexpected child termination condition: %d" msgstr "condizione di uscita del figlio inattesa: %d" -#: src/sudo.c:1214 +#: src/sudo.c:1302 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "il plugin di politica %s non include un metodo \"check_policy\"" -#: src/sudo.c:1232 +#: src/sudo.c:1320 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "il plugin di politica %s non supporta l'elencazione dei privilegi" -#: src/sudo.c:1249 +#: src/sudo.c:1337 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "il plugin di politica %s non supporta l'opzione -v" -#: src/sudo.c:1264 +#: src/sudo.c:1352 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "il plugin di politica %s non supporta le opzioni -k/-K" -#: src/sudo_edit.c:203 src/sudo_edit.c:294 +#: src/sudo_edit.c:181 +msgid "unable to restore current working directory" +msgstr "impossibile ripristinare la directory di lavoro attuale" + +#: src/sudo_edit.c:526 src/sudo_edit.c:630 #, c-format msgid "%s: not a regular file" msgstr "%s: non è un file regolare" -#: src/sudo_edit.c:230 src/sudo_edit.c:332 +#: src/sudo_edit.c:533 +#, c-format +msgid "%s: editing symbolic links is not permitted" +msgstr "%s: la modifica di collegamenti simbolici non è consentita" + +#: src/sudo_edit.c:536 +#, c-format +msgid "%s: editing files in a writable directory is not permitted" +msgstr "%s: la modifica di file in una directory con accesso in scrittura non è consentita" + +#: src/sudo_edit.c:567 src/sudo_edit.c:669 #, c-format msgid "%s: short write" msgstr "%s: scrittura breve" -#: src/sudo_edit.c:295 +#: src/sudo_edit.c:631 #, c-format msgid "%s left unmodified" msgstr "%s lasciato non modificato" -#: src/sudo_edit.c:308 src/sudo_edit.c:483 +#: src/sudo_edit.c:644 src/sudo_edit.c:830 #, c-format msgid "%s unchanged" msgstr "%s non modificato" -#: src/sudo_edit.c:321 src/sudo_edit.c:343 +#: src/sudo_edit.c:658 src/sudo_edit.c:680 #, c-format msgid "unable to write to %s" msgstr "impossibile scrivere su %s" -#: src/sudo_edit.c:322 src/sudo_edit.c:341 src/sudo_edit.c:344 -#: src/sudo_edit.c:508 src/sudo_edit.c:512 +#: src/sudo_edit.c:659 src/sudo_edit.c:678 src/sudo_edit.c:681 +#: src/sudo_edit.c:855 src/sudo_edit.c:859 #, c-format msgid "contents of edit session left in %s" msgstr "contenuto della sessione di modifica lasciato in %s" -#: src/sudo_edit.c:340 +#: src/sudo_edit.c:677 msgid "unable to read temporary file" msgstr "impossibile leggere il file temporaneo" -#: src/sudo_edit.c:417 +#: src/sudo_edit.c:760 msgid "sesh: internal error: odd number of paths" msgstr "sesh: errore interno: strano numero numero di percorsi" -#: src/sudo_edit.c:419 +#: src/sudo_edit.c:762 msgid "sesh: unable to create temporary files" msgstr "sesh: impossibile creare file temporanei" -#: src/sudo_edit.c:421 src/sudo_edit.c:515 +#: src/sudo_edit.c:764 src/sudo_edit.c:862 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: errore %d sconosciuto" -#: src/sudo_edit.c:507 +#: src/sudo_edit.c:854 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:511 +#: src/sudo_edit.c:858 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:554 +#: src/sudo_edit.c:901 #, c-format msgid "unable to change uid to root (%u)" msgstr "impossibile modificare lo uid a root (%u)" -#: src/sudo_edit.c:571 +#: src/sudo_edit.c:918 msgid "plugin error: missing file list for sudoedit" msgstr "errore di plugin: elenco file mancante per sudoedit" -#: src/tgetpass.c:90 +#: src/sudo_edit.c:959 src/sudo_edit.c:972 +msgid "unable to read the clock" +msgstr "impossibile leggere l'orologio" + +#: src/tgetpass.c:107 msgid "no tty present and no askpass program specified" msgstr "nessun tty presente e nessun programma di richiesta password specificato" -#: src/tgetpass.c:99 +#: src/tgetpass.c:116 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "nessun programma di richiesta password specificato, impostare SUDO_ASKPASS" -#: src/tgetpass.c:232 +#: src/tgetpass.c:276 #, c-format msgid "unable to set gid to %u" msgstr "impossibile impostare il gid a %u" -#: src/tgetpass.c:236 +#: src/tgetpass.c:280 #, c-format msgid "unable to set uid to %u" msgstr "impossibile impostare lo uid a %u" -#: src/tgetpass.c:241 +#: src/tgetpass.c:285 #, c-format msgid "unable to run %s" msgstr "impossibile eseguire %s" -#: src/utmp.c:278 +#: src/utmp.c:266 msgid "unable to save stdin" msgstr "impossibile salvare lo stdin" -#: src/utmp.c:280 +#: src/utmp.c:268 msgid "unable to dup2 stdin" msgstr "impossibile eseguire dup2 sullo stdin" -#: src/utmp.c:283 +#: src/utmp.c:271 msgid "unable to restore stdin" msgstr "impossibile ripristinare lo stdin" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/po/ja.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/po/ja.mo differ diff -Nru sudo-1.8.12/po/ja.po sudo-1.8.16/po/ja.po --- sudo-1.8.12/po/ja.po 2015-02-09 18:40:09.000000000 +0000 +++ sudo-1.8.16/po/ja.po 2016-03-17 16:13:10.000000000 +0000 @@ -1,14 +1,14 @@ # Japanese messages for sudo # This file is put in the public domain. # Yasuaki Taniguchi , 2011. -# Takeshi Hamasaki , 2012 +# Takeshi Hamasaki , 2012, 2015, 2016. # msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.6b4\n" -"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2012-08-10 13:08-0400\n" -"PO-Revision-Date: 2012-08-18 19:20+0900\n" +"Project-Id-Version: sudo 1.8.16b1\n" +"Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" +"POT-Creation-Date: 2016-02-19 15:48-0700\n" +"PO-Revision-Date: 2016-03-03 19:48+0900\n" "Last-Translator: Takeshi Hamasaki \n" "Language-Team: Japanese \n" "Language: ja\n" @@ -16,280 +16,316 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Poedit 1.8.7\n" +"X-Poedit-Basepath: sudo-1.8.16b1\n" +"X-Poedit-SearchPath-0: .\n" -#: common/aix.c:150 -#, c-format +#: lib/util/aix.c:85 lib/util/aix.c:164 msgid "unable to open userdb" msgstr "ユーザーデータベースを開くことができません" -#: common/aix.c:153 +#: lib/util/aix.c:219 #, c-format msgid "unable to switch to registry \"%s\" for %s" msgstr "%s 用のレジストリー \"%s\" へ切り替えることができません" -#: common/aix.c:170 -#, c-format +#: lib/util/aix.c:244 msgid "unable to restore registry" msgstr "レジストリーを復元できません" -#: common/alloc.c:82 -msgid "internal error, tried to emalloc(0)" -msgstr "内部エラー、emalloc(0) を試みました" - -#: common/alloc.c:85 common/alloc.c:105 common/alloc.c:127 common/alloc.c:146 -#: common/alloc.c:168 common/alloc.c:192 common/alloc.c:256 common/alloc.c:270 -#: src/exec_common.c:111 src/parse_args.c:430 src/sudo.c:456 src/sudo.c:482 -#: src/sudo.c:489 src/sudo.c:500 src/sudo.c:759 +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/gidlist.c:74 +#: lib/util/sudo_conf.c:207 lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 +#: lib/util/sudo_conf.c:569 src/conversation.c:75 src/exec.c:863 +#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 +#: src/exec_pty.c:684 src/exec_pty.c:692 src/load_plugins.c:52 +#: src/load_plugins.c:65 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:655 src/sudo.c:665 src/sudo.c:685 src/sudo.c:704 src/sudo.c:713 +#: src/sudo.c:722 src/sudo.c:739 src/sudo.c:780 src/sudo.c:790 src/sudo.c:810 +#: src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 src/sudo.c:1492 +#: src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 #, c-format +msgid "%s: %s" +msgstr "%s: %s" + +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/sudo_conf.c:208 +#: lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 lib/util/sudo_conf.c:569 +#: src/conversation.c:76 src/exec.c:863 src/exec_common.c:107 +#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:684 +#: src/exec_pty.c:692 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:810 src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 +#: src/sudo.c:1492 src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 msgid "unable to allocate memory" msgstr "メモリ割り当てを行えませんでした" -#: common/alloc.c:99 -msgid "internal error, tried to emalloc2(0)" -msgstr "内部エラー、 emalloc2(0) を試みました" +#: lib/util/strsignal.c:48 +msgid "Unknown signal" +msgstr "不明なシグナルです" + +#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:48 +#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 +msgid "invalid value" +msgstr "無効な値" + +#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:54 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 +msgid "value too large" +msgstr "値が大き過ぎます" -#: common/alloc.c:101 common/alloc.c:123 common/alloc.c:163 common/alloc.c:187 +#: lib/util/strtoid.c:89 lib/util/strtomode.c:54 lib/util/strtonum.c:61 +#: lib/util/strtonum.c:182 +msgid "value too small" +msgstr "値が小さ過ぎます" + +#: lib/util/sudo_conf.c:223 #, c-format -msgid "internal error, %s overflow" -msgstr "内部エラー、 %s がオーバーフローしました" +msgid "invalid Path value `%s' in %s, line %u" +msgstr "無効な Path の値 `%s' が %s の %u 行目 にあります" + +#: lib/util/sudo_conf.c:389 lib/util/sudo_conf.c:442 +#, c-format +msgid "invalid value for %s `%s' in %s, line %u" +msgstr "無効な %s の値 `%s' が %s の %u 行目 にあります" -#: common/alloc.c:120 -msgid "internal error, tried to ecalloc(0)" -msgstr "内部エラー、ecalloc(0) を試みました" - -#: common/alloc.c:142 -msgid "internal error, tried to erealloc(0)" -msgstr "内部エラー、 erealloc(0) を試みました" - -#: common/alloc.c:161 -msgid "internal error, tried to erealloc3(0)" -msgstr "内部エラー、 erealloc3(0) を試みました" - -#: common/alloc.c:185 -msgid "internal error, tried to erecalloc(0)" -msgstr "内部エラー、 erecalloc(0) を試みました" +#: lib/util/sudo_conf.c:410 +#, c-format +msgid "unsupported group source `%s' in %s, line %u" +msgstr "サポートしていないグループソース `%s' が %s の %u 行目で指定されています" + +#: lib/util/sudo_conf.c:426 +#, c-format +msgid "invalid max groups `%s' in %s, line %u" +msgstr "無効な最大グループの値 `%s' が %s の %u 行目 にあります" -#: common/sudo_conf.c:305 +#: lib/util/sudo_conf.c:585 #, c-format msgid "unable to stat %s" msgstr "%s の状態取得 (stat) ができません" -#: common/sudo_conf.c:308 +#: lib/util/sudo_conf.c:588 #, c-format msgid "%s is not a regular file" msgstr "%s は通常ファイルではありません" -#: common/sudo_conf.c:311 +#: lib/util/sudo_conf.c:591 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s はユーザーID %u によって所有されています。これは %u であるべきです" -#: common/sudo_conf.c:315 +#: lib/util/sudo_conf.c:595 #, c-format msgid "%s is world writable" msgstr "%s は誰でも書き込み可能です" -#: common/sudo_conf.c:318 +#: lib/util/sudo_conf.c:598 #, c-format msgid "%s is group writable" msgstr "%s はグループのメンバーによる書き込みが可能です" -#: common/sudo_conf.c:327 src/selinux.c:196 src/selinux.c:209 src/sudo.c:331 +#: lib/util/sudo_conf.c:608 src/selinux.c:199 src/selinux.c:212 src/sudo.c:367 #, c-format msgid "unable to open %s" msgstr "%s を開けません" -#: compat/strsignal.c:47 -msgid "Unknown signal" -msgstr "不明なシグナルです" - -#: src/error.c:82 src/error.c:86 -msgid ": " -msgstr ": " - -#: src/exec.c:113 src/exec_pty.c:674 +#: src/exec.c:114 src/exec.c:116 src/exec.c:121 src/exec.c:409 src/exec.c:411 +#: src/exec.c:413 src/exec.c:415 src/exec.c:417 src/exec.c:419 src/exec.c:422 +#: src/exec.c:438 src/exec.c:440 src/exec.c:595 src/exec.c:790 +#: src/exec_pty.c:466 src/exec_pty.c:722 src/exec_pty.c:792 src/exec_pty.c:794 +#: src/exec_pty.c:806 src/exec_pty.c:808 src/exec_pty.c:1289 +#: src/exec_pty.c:1291 src/exec_pty.c:1296 src/exec_pty.c:1298 +#: src/exec_pty.c:1312 src/exec_pty.c:1323 src/exec_pty.c:1325 +#: src/exec_pty.c:1327 src/exec_pty.c:1329 src/exec_pty.c:1331 +#: src/exec_pty.c:1333 src/exec_pty.c:1335 src/signal.c:147 #, c-format -msgid "policy plugin failed session initialization" -msgstr "ポリシープラグインがセッションの初期化に失敗しました" +msgid "unable to set handler for signal %d" +msgstr "シグナル %d のハンドラを設定できません" -#: src/exec.c:118 src/exec_pty.c:690 src/exec_pty.c:1035 src/tgetpass.c:221 -#, c-format +#: src/exec.c:126 src/exec_pty.c:838 src/exec_pty.c:1373 src/tgetpass.c:265 msgid "unable to fork" msgstr "fork できません" -#: src/exec.c:268 -#, c-format +#: src/exec.c:304 src/exec.c:312 src/exec.c:868 src/exec_pty.c:604 +#: src/exec_pty.c:611 src/exec_pty.c:654 src/exec_pty.c:659 src/exec_pty.c:946 +#: src/exec_pty.c:956 src/exec_pty.c:1001 src/exec_pty.c:1008 +#: src/exec_pty.c:1438 src/exec_pty.c:1445 src/exec_pty.c:1452 +msgid "unable to add event to queue" +msgstr "キューにイベントを追加できません" + +#: src/exec.c:392 msgid "unable to create sockets" msgstr "ソケットを作成できません" -#: src/exec.c:275 src/exec_pty.c:613 src/exec_pty.c:622 src/exec_pty.c:630 -#: src/exec_pty.c:960 src/exec_pty.c:1032 src/tgetpass.c:218 -#, c-format -msgid "unable to create pipe" -msgstr "パイプを作成できません" +#: src/exec.c:447 +msgid "policy plugin failed session initialization" +msgstr "ポリシープラグインがセッションの初期化に失敗しました" -#: src/exec.c:365 src/exec_pty.c:1102 src/exec_pty.c:1240 -#, c-format -msgid "select failed" -msgstr "select に失敗しました" +#: src/exec.c:492 +msgid "error in event loop" +msgstr "イベントループでエラーが発生しました" -#: src/exec.c:467 -#, c-format +#: src/exec.c:510 msgid "unable to restore tty label" msgstr "tty ラベルを復旧できません" -#: src/exec_common.c:69 +#: src/exec.c:603 src/exec_pty.c:498 src/signal.c:86 #, c-format +msgid "unable to restore handler for signal %d" +msgstr "シグナル %d のハンドラを復元できません" + +#: src/exec.c:721 src/exec_pty.c:1180 +msgid "error reading from signal pipe" +msgstr "シグナルパイプからの読み込み中にエラーが発生しました" + +#: src/exec_common.c:166 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "PRIV_LIMIT から PRIV_PROC_EXEC を取り除くことができません" -#: src/exec_pty.c:183 -#, c-format +#: src/exec_pty.c:188 msgid "unable to allocate pty" msgstr "pty を割り当てられません" -#: src/exec_pty.c:665 -#, c-format -msgid "unable to set terminal to raw mode" -msgstr "端末を raw モードに設定できません" - -#: src/exec_pty.c:1013 -#, c-format -msgid "unable to set controlling tty" -msgstr "tty の制御設定ができません" - -#: src/exec_pty.c:1111 -#, c-format -msgid "error reading from signal pipe" -msgstr "シグナルパイプからの読み込み中にエラーが発生しました" +#: src/exec_pty.c:766 src/exec_pty.c:775 src/exec_pty.c:783 +#: src/exec_pty.c:1281 src/exec_pty.c:1370 src/signal.c:128 src/tgetpass.c:261 +msgid "unable to create pipe" +msgstr "パイプを作成できません" -#: src/exec_pty.c:1132 -#, c-format +#: src/exec_pty.c:1213 msgid "error reading from pipe" msgstr "パイプからの読み込み中にエラーが発生しました" -#: src/exec_pty.c:1148 -#, c-format +#: src/exec_pty.c:1238 msgid "error reading from socketpair" msgstr "ソケットペアからの読み込み中にエラーが発生しました" -#: src/exec_pty.c:1152 +#: src/exec_pty.c:1247 #, c-format msgid "unexpected reply type on backchannel: %d" msgstr "バックチャンネルに関する予期しないリプレイタイプです: %d" -#: src/load_plugins.c:74 +#: src/exec_pty.c:1349 +msgid "unable to set controlling tty" +msgstr "tty の制御設定ができません" + +#: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 +#: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 +#: src/load_plugins.c:170 src/load_plugins.c:178 src/load_plugins.c:185 +#: src/load_plugins.c:191 #, c-format -msgid "%s: %s" -msgstr "%s: %s" +msgid "error in %s, line %d while loading plugin `%s'" +msgstr "%s, %d 行目 プラグイン %s をロード中にエラーが発生しました" -#: src/load_plugins.c:80 +#: src/load_plugins.c:87 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" -#: src/load_plugins.c:90 +#: src/load_plugins.c:125 #, c-format msgid "%s must be owned by uid %d" msgstr "%s の所有者は uid %d でなければいけません" -#: src/load_plugins.c:94 +#: src/load_plugins.c:131 #, c-format msgid "%s must be only be writable by owner" msgstr "%s は所有者のみ書き込み可能で無ければいけません" -#: src/load_plugins.c:101 +#: src/load_plugins.c:172 #, c-format -msgid "unable to dlopen %s: %s" -msgstr "dlopen %s を行うことができません: %s" +msgid "unable to load %s: %s" +msgstr "%s をロードできません: %s" -#: src/load_plugins.c:106 +#: src/load_plugins.c:180 #, c-format -msgid "%s: unable to find symbol %s" -msgstr "%s: シンボル %s を見つけることができません" +msgid "unable to find symbol `%s' in %s" +msgstr "シンボル `%s' が %s に見つかりません" -#: src/load_plugins.c:112 +#: src/load_plugins.c:187 #, c-format -msgid "%s: unknown policy type %d" -msgstr "%s: 不明なポリシータイプ %d です" +msgid "unknown policy type %d found in %s" +msgstr "不明なポリシータイプ %d が %s で見つかりました" -#: src/load_plugins.c:116 +#: src/load_plugins.c:193 #, c-format -msgid "%s: incompatible policy major version %d, expected %d" -msgstr "%s: 互換性の無いポリシーメジャーバージョン %d です。予期されるのは %d です" +msgid "incompatible plugin major version %d (expected %d) found in %s" +msgstr "互換性の無いポリシーメジャーバージョン %d (予期されるのは %d)が %s で見つかりました" -#: src/load_plugins.c:123 +#: src/load_plugins.c:202 #, c-format -msgid "%s: only a single policy plugin may be loaded" -msgstr "%s: 一つのポリシープラグインのみロードされているようです" +msgid "ignoring policy plugin `%s' in %s, line %d" +msgstr "ポリシープラグイン %s を無視します。%s の %d 行目" + +#: src/load_plugins.c:204 +msgid "only a single policy plugin may be specified" +msgstr "1つのポリシープラグインのみ指定できます" -#: src/load_plugins.c:200 +#: src/load_plugins.c:207 #, c-format -msgid "policy plugin %s does not include a check_policy method" -msgstr "ポリシープラグイン %s には check_policy メソッドが含まれていません" +msgid "ignoring duplicate policy plugin `%s' in %s, line %d" +msgstr "重複しているポリシープラグイン %s を無視します。%s の %d 行目" -#: src/net_ifs.c:157 src/net_ifs.c:166 src/net_ifs.c:178 src/net_ifs.c:187 -#: src/net_ifs.c:298 src/net_ifs.c:322 +#: src/load_plugins.c:228 #, c-format -msgid "load_interfaces: overflow detected" -msgstr "load_interfaces: オーバーフローが検出されました" +msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" +msgstr "重複している I/O プラグイン %s を無視します。%s の %d 行目" -#: src/net_ifs.c:227 +#: src/load_plugins.c:331 #, c-format -msgid "unable to open socket" -msgstr "ソケットを開くことができません" +msgid "policy plugin %s does not include a check_policy method" +msgstr "ポリシープラグイン %s には check_policy メソッドが含まれていません" -#: src/parse_args.c:187 +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:476 #, c-format +msgid "internal error, %s overflow" +msgstr "内部エラー、 %s がオーバーフローしました" + +#: src/parse_args.c:239 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "-C の引数は 3 以上の数値でなければいけません" -#: src/parse_args.c:276 -#, c-format -msgid "unknown user: %s" -msgstr "不明なユーザーです: %s" - -#: src/parse_args.c:335 -#, c-format +#: src/parse_args.c:406 msgid "you may not specify both the `-i' and `-s' options" msgstr "`-i' と `-s' オプションを同時に指定することはできません" -#: src/parse_args.c:339 -#, c-format +#: src/parse_args.c:410 msgid "you may not specify both the `-i' and `-E' options" msgstr "`-i' と `-E' オプションを同時に指定することはできません" -#: src/parse_args.c:349 -#, c-format +#: src/parse_args.c:420 msgid "the `-E' option is not valid in edit mode" msgstr "`-E' オプションは編集モードでは無効です" -#: src/parse_args.c:351 -#, c-format +#: src/parse_args.c:422 msgid "you may not specify environment variables in edit mode" msgstr "編集モードでは環境変数を指定できません" -#: src/parse_args.c:359 -#, c-format +#: src/parse_args.c:430 msgid "the `-U' option may only be used with the `-l' option" msgstr "`-U' オプションは `-l' オプションのみと同時に指定できます" -#: src/parse_args.c:363 -#, c-format +#: src/parse_args.c:434 msgid "the `-A' and `-S' options may not be used together" msgstr "`-A' と `-S' オプションは同時に指定することはできません" -#: src/parse_args.c:443 -#, c-format +#: src/parse_args.c:504 msgid "sudoedit is not supported on this platform" msgstr "sudoedit はこのプラットフォームではサポートされていません" -#: src/parse_args.c:516 -#, c-format +#: src/parse_args.c:577 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:530 +#: src/parse_args.c:591 #, c-format msgid "" "%s - edit files as another user\n" @@ -298,7 +334,7 @@ "%s - 別のユーザーとしてファイルを編集します\n" "\n" -#: src/parse_args.c:532 +#: src/parse_args.c:593 #, c-format msgid "" "%s - execute a command as another user\n" @@ -307,7 +343,7 @@ "%s - 別のユーザーとしてコマンドを実行します\n" "\n" -#: src/parse_args.c:537 +#: src/parse_args.c:598 #, c-format msgid "" "\n" @@ -316,461 +352,552 @@ "\n" "オプション:\n" -#: src/parse_args.c:540 -msgid "use helper program for password prompting\n" -msgstr "パスワード要求のために補助プログラムを使用する\n" - -#: src/parse_args.c:543 -msgid "use specified BSD authentication type\n" -msgstr "指定した BSD 認証タイプを使用する\n" - -#: src/parse_args.c:545 -msgid "run command in the background\n" -msgstr "コマンドをバックグラウンドで実行する\n" - -#: src/parse_args.c:547 -msgid "close all file descriptors >= fd\n" -msgstr "fd 以上のすべてのファイル記述子を閉じる\n" - -#: src/parse_args.c:550 -msgid "run command with specified login class\n" -msgstr "指定したログインクラスでコマンドを実行する\n" - -#: src/parse_args.c:553 -msgid "preserve user environment when executing command\n" -msgstr "コマンドを実行する時にユーザーの環境変数を保護する\n" - -#: src/parse_args.c:555 -msgid "edit files instead of running a command\n" -msgstr "コマンドを実行する代わりにファイルを編集する\n" - -#: src/parse_args.c:557 -msgid "execute command as the specified group\n" -msgstr "指定したグループでコマンドを実行する\n" - -#: src/parse_args.c:559 -msgid "set HOME variable to target user's home dir.\n" -msgstr "HOME 変数を変更先となるユーザーのホームディレクトリに設定する\n" - -#: src/parse_args.c:561 -msgid "display help message and exit\n" -msgstr "ヘルプメッセージを表示して終了する\n" - -#: src/parse_args.c:563 -msgid "run a login shell as target user\n" -msgstr "変更先のユーザーとしてログインシェルを実行する\n" - -#: src/parse_args.c:565 -msgid "remove timestamp file completely\n" -msgstr "タイムスタンプファイルを完全に削除する\n" - -#: src/parse_args.c:567 -msgid "invalidate timestamp file\n" -msgstr "タイムスタンプファイルを無効にする\n" - -#: src/parse_args.c:569 -msgid "list user's available commands\n" -msgstr "ユーザーが使用可能なコマンドを一覧表示する\n" - -#: src/parse_args.c:571 -msgid "non-interactive mode, will not prompt user\n" -msgstr "非対話モードで実行し、ユーザーに入力を求めない\n" - -#: src/parse_args.c:573 -msgid "preserve group vector instead of setting to target's\n" -msgstr "グループベクトルを保護する (変更先のユーザーのものに設定しない)\n" - -#: src/parse_args.c:575 -msgid "use specified password prompt\n" -msgstr "指定したパスワードプロンプトを使用する\n" - -#: src/parse_args.c:578 src/parse_args.c:586 -msgid "create SELinux security context with specified role\n" -msgstr "指定した役割で SELinux セキュリティーコンテキストを作成する\n" - -#: src/parse_args.c:581 -msgid "read password from standard input\n" -msgstr "標準入力からパスワードを読み込む\n" - -#: src/parse_args.c:583 -msgid "run a shell as target user\n" -msgstr "変更先のユーザーとしてシェルを実行する\n" - -#: src/parse_args.c:589 -msgid "when listing, list specified user's privileges\n" -msgstr "一覧表示する時に、指定したユーザーの権限を一覧表示する\n" +#: src/parse_args.c:600 +msgid "use a helper program for password prompting" +msgstr "パスワード要求のために補助プログラムを使用する" + +#: src/parse_args.c:603 +msgid "use specified BSD authentication type" +msgstr "指定した BSD 認証タイプを使用する" + +#: src/parse_args.c:606 +msgid "run command in the background" +msgstr "コマンドをバックグラウンドで実行する" + +#: src/parse_args.c:608 +msgid "close all file descriptors >= num" +msgstr "num 以上のすべてのファイル記述子を閉じる" + +#: src/parse_args.c:611 +msgid "run command with the specified BSD login class" +msgstr "指定した BSD ログインクラスでコマンドを実行する" + +#: src/parse_args.c:614 +msgid "preserve user environment when running command" +msgstr "コマンドを実行する時にユーザーの環境変数を維持する" + +#: src/parse_args.c:616 +msgid "edit files instead of running a command" +msgstr "コマンドを実行するのではなくファイルを編集する" + +#: src/parse_args.c:618 +msgid "run command as the specified group name or ID" +msgstr "指定したグループ名またはグループIDでコマンドを実行する" + +#: src/parse_args.c:620 +msgid "set HOME variable to target user's home dir" +msgstr "HOME 変数を変更先となるユーザーのホームディレクトリに設定する" + +#: src/parse_args.c:622 +msgid "display help message and exit" +msgstr "このヘルプを表示して終了する" + +#: src/parse_args.c:624 +msgid "run command on host (if supported by plugin)" +msgstr "host でコマンドを実行する(プラグインがサポートしている場合)" + +#: src/parse_args.c:626 +msgid "run login shell as the target user; a command may also be specified" +msgstr "変更先のユーザーとしてログインシェルを実行する; コマンドを指定することもできます" + +#: src/parse_args.c:628 +msgid "remove timestamp file completely" +msgstr "タイムスタンプファイルを完全に削除する" + +#: src/parse_args.c:630 +msgid "invalidate timestamp file" +msgstr "無効なタイムスタンプファイルです" + +#: src/parse_args.c:632 +msgid "list user's privileges or check a specific command; use twice for longer format" +msgstr "ユーザーの権限を一覧表示するまたは指定したコマンドについて確認する ;長い表示にするには2回指定すること" + +#: src/parse_args.c:634 +msgid "non-interactive mode, no prompts are used" +msgstr "非対話モードで実行し、ユーザーに入力を求めない" + +#: src/parse_args.c:636 +msgid "preserve group vector instead of setting to target's" +msgstr "グループベクトルを保護する (変更先のユーザーのものに設定しない)" + +#: src/parse_args.c:638 +msgid "use the specified password prompt" +msgstr "指定したパスワードプロンプトを使用する" + +#: src/parse_args.c:641 +msgid "create SELinux security context with specified role" +msgstr "指定した役割で SELinux セキュリティーコンテキストを作成する" + +#: src/parse_args.c:644 +msgid "read password from standard input" +msgstr "標準入力からパスワードを読み込む" + +#: src/parse_args.c:646 +msgid "run shell as the target user; a command may also be specified" +msgstr "変更先のユーザーとしてシェルを実行する; コマンドを指定することもできます" + +#: src/parse_args.c:649 +msgid "create SELinux security context with specified type" +msgstr "指定したタイプで SELinux セキュリティーコンテキストを作成する" + +#: src/parse_args.c:652 +msgid "in list mode, display privileges for user" +msgstr "リストモードで、ユーザーの権限を表示する" + +#: src/parse_args.c:654 +msgid "run command (or edit file) as specified user name or ID" +msgstr "指定したユーザー名またはユーザーIDでコマンドを実行する (またはファイルを編集する)" + +#: src/parse_args.c:656 +msgid "display version information and exit" +msgstr "バージョン情報を表示して終了する" + +#: src/parse_args.c:658 +msgid "update user's timestamp without running a command" +msgstr "コマンドを実行せずにユーザーのタイムスタンプを更新する" + +#: src/parse_args.c:660 +msgid "stop processing command line arguments" +msgstr "コマンドライン引数の処理を終了する" -#: src/parse_args.c:591 -msgid "run command (or edit file) as specified user\n" -msgstr "指定したユーザーでコマンドを実行する (またはファイルを編集する)\n" - -#: src/parse_args.c:593 -msgid "display version information and exit\n" -msgstr "バージョン情報を表示して終了する\n" - -#: src/parse_args.c:595 -msgid "update user's timestamp without running a command\n" -msgstr "コマンドを実行せずにユーザーのタイムスタンプを更新する\n" - -#: src/parse_args.c:597 -msgid "stop processing command line arguments\n" -msgstr "コマンドライン引数の処理を終了する\n" - -#: src/selinux.c:77 -#, c-format +#: src/selinux.c:78 msgid "unable to open audit system" msgstr "監査システムを開くことができません" -#: src/selinux.c:85 -#, c-format +#: src/selinux.c:88 msgid "unable to send audit message" msgstr "監査メッセージを送ることができません" -#: src/selinux.c:113 +#: src/selinux.c:116 #, c-format msgid "unable to fgetfilecon %s" msgstr "fgetfilecon %s を行うことができません" -#: src/selinux.c:118 +#: src/selinux.c:121 #, c-format msgid "%s changed labels" msgstr "%s はラベルを変更しました" -#: src/selinux.c:123 +#: src/selinux.c:126 #, c-format msgid "unable to restore context for %s" msgstr "%s 用のコンテキストを復元することができません" -#: src/selinux.c:163 +#: src/selinux.c:166 #, c-format msgid "unable to open %s, not relabeling tty" msgstr "%s を開くことができません。tty の再ラベル付けを行いません" -#: src/selinux.c:172 -#, c-format +#: src/selinux.c:175 msgid "unable to get current tty context, not relabeling tty" msgstr "現在の tty コンテキストを取得できません。 tty の再ラベル付けを行いません" -#: src/selinux.c:179 -#, c-format +#: src/selinux.c:182 msgid "unable to get new tty context, not relabeling tty" msgstr "新しい tty コンテキストを取得できません。 tty の再ラベル付けを行いません" -#: src/selinux.c:186 -#, c-format +#: src/selinux.c:189 msgid "unable to set new tty context" msgstr "新しい tty コンテキストを設定できません" -#: src/selinux.c:252 +#: src/selinux.c:255 #, c-format msgid "you must specify a role for type %s" msgstr "タイプ %s 用の役割を指定しなければいけません" -#: src/selinux.c:258 +#: src/selinux.c:261 #, c-format msgid "unable to get default type for role %s" msgstr "役割 %s 用のデフォルトのタイプを取得できません" -#: src/selinux.c:276 +#: src/selinux.c:279 #, c-format msgid "failed to set new role %s" msgstr "新しい役割 %s の設定に失敗しました" -#: src/selinux.c:280 +#: src/selinux.c:283 #, c-format msgid "failed to set new type %s" msgstr "新しいタイプ %s の設定に失敗しました" -#: src/selinux.c:289 +#: src/selinux.c:295 #, c-format msgid "%s is not a valid context" msgstr "%s は有効なコンテキストではありません" -#: src/selinux.c:324 -#, c-format +#: src/selinux.c:330 msgid "failed to get old_context" msgstr "古いコンテキスト (old_context) の取得に失敗しました" -#: src/selinux.c:330 -#, c-format +#: src/selinux.c:336 msgid "unable to determine enforcing mode." msgstr "強制モードを決定することができません。" -#: src/selinux.c:342 +#: src/selinux.c:353 #, c-format -msgid "unable to setup tty context for %s" -msgstr "%s 用の tty コンテキストをセットアップできません" +msgid "unable to set tty context to %s" +msgstr "新しい tty コンテキストを %s に設定できません" -#: src/selinux.c:373 +#: src/selinux.c:392 #, c-format msgid "unable to set exec context to %s" msgstr "実行コンテキストを %s に設定できません" -#: src/selinux.c:380 +#: src/selinux.c:399 #, c-format msgid "unable to set key creation context to %s" msgstr "キー作成コンテキストを %s へ設定できません" -#: src/sesh.c:70 -#, c-format +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "最低でも一つ以上おの引数が必要です" -#: src/sesh.c:91 +#: src/sesh.c:106 +#, c-format +msgid "invalid file descriptor number: %s" +msgstr "無効なファイル記述子の番号: %s" + +#: src/sesh.c:120 +#, c-format +msgid "unable to run %s as a login shell" +msgstr "%s をログインシェルとして実行できません" + +#: src/sesh.c:125 src/sudo.c:1274 #, c-format msgid "unable to execute %s" msgstr "%s を実行できません" -#: src/sudo.c:211 +#: src/signal.c:68 +#, c-format +msgid "unable to save handler for signal %d" +msgstr "シグナル %d のハンドラを保存できません" + +#: src/solaris.c:76 +msgid "resource control limit has been reached" +msgstr "資源制御の制限の最大値に達しました" + +#: src/solaris.c:79 +#, c-format +msgid "user \"%s\" is not a member of project \"%s\"" +msgstr "ユーザー \"%s\" はプロジェクト \"%s\" のメンバーではありません" + +#: src/solaris.c:83 +msgid "the invoking task is final" +msgstr "起動しているタスクは最後 (final) です" + +#: src/solaris.c:86 +#, c-format +msgid "could not join project \"%s\"" +msgstr "プロジェクト \"%s\" に参加できません" + +#: src/solaris.c:91 +#, c-format +msgid "no resource pool accepting default bindings exists for project \"%s\"" +msgstr "プロジェクト \"%s\" 用にはデフォルト割り当てとして受け付けられる資源プールがありません" + +#: src/solaris.c:95 +#, c-format +msgid "specified resource pool does not exist for project \"%s\"" +msgstr "プロジェクト \"%s\" 用として指定した資源プールは存在しません" + +#: src/solaris.c:99 +#, c-format +msgid "could not bind to default resource pool for project \"%s\"" +msgstr "プロジェクト \"%s\" 用にデフォルト資源プールを割り当てられませんでした" + +#: src/solaris.c:105 +#, c-format +msgid "setproject failed for project \"%s\"" +msgstr "プロジェクト\"%s\" への setproject に失敗しました" + +#: src/solaris.c:107 +#, c-format +msgid "warning, resource control assignment failed for project \"%s\"" +msgstr "警告、プロジェクト \"%s\" への資源制御割り当てに失敗しました" + +#: src/sudo.c:212 #, c-format msgid "Sudo version %s\n" msgstr "Sudo バージョン %s\n" -#: src/sudo.c:213 +#: src/sudo.c:214 #, c-format msgid "Configure options: %s\n" msgstr "configure オプション: %s\n" -#: src/sudo.c:218 -#, c-format +#: src/sudo.c:222 msgid "fatal error, unable to load plugins" msgstr "致命的エラー、プラグインをロードできません" -#: src/sudo.c:226 -#, c-format +#: src/sudo.c:230 msgid "unable to initialize policy plugin" msgstr "ポリシープラグインを初期化できません" -#: src/sudo.c:281 +#: src/sudo.c:276 +msgid "plugin did not return a command to execute" +msgstr "プラグインが実行するべきコマンドを返しませんでした" + +#: src/sudo.c:292 #, c-format msgid "error initializing I/O plugin %s" msgstr "I/O プラグイン %s を初期化中にエラーが発生しました" -#: src/sudo.c:306 +#: src/sudo.c:318 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "予期しない sudo のモード 0x%x です" -#: src/sudo.c:400 -#, c-format +#: src/sudo.c:461 msgid "unable to get group vector" msgstr "グループベクトルを取得できません" -#: src/sudo.c:452 +#: src/sudo.c:522 #, c-format msgid "unknown uid %u: who are you?" msgstr "不明なユーザーID %u です: 誰ですか?" -#: src/sudo.c:782 +#: src/sudo.c:859 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s は所有者が uid %d である必要があり、かつ setuid が設定されている必要があります" -#: src/sudo.c:785 +#: src/sudo.c:862 #, 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:791 +#: src/sudo.c:868 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "実効 uid が %d ではありません、sudo は setuid root を設定してインストールされていますか?" -#: src/sudo.c:860 -#, c-format -msgid "resource control limit has been reached" -msgstr "資源制御の制限の最大値に達しました" - -#: src/sudo.c:863 -#, c-format -msgid "user \"%s\" is not a member of project \"%s\"" -msgstr "ユーザー \"%s\" はプロジェクト \"%s\" のメンバーではありません" - -#: src/sudo.c:867 -#, c-format -msgid "the invoking task is final" -msgstr "起動しているタスクは最後 (final) です" - -#: src/sudo.c:870 -#, c-format -msgid "could not join project \"%s\"" -msgstr "プロジェクト \"%s\" に参加できません" - -#: src/sudo.c:875 -#, c-format -msgid "no resource pool accepting default bindings exists for project \"%s\"" -msgstr "プロジェクト \"%s\" 用にはデフォルト割り当てとして受け付けられる資源プールがありません" - -#: src/sudo.c:879 -#, c-format -msgid "specified resource pool does not exist for project \"%s\"" -msgstr "プロジェクト \"%s\" 用として指定した資源プールは存在しません" - -#: src/sudo.c:883 -#, c-format -msgid "could not bind to default resource pool for project \"%s\"" -msgstr "プロジェクト \"%s\" 用にデフォルト資源プールを割り当てられませんでした" - -#: src/sudo.c:889 -#, c-format -msgid "setproject failed for project \"%s\"" -msgstr "プロジェクト\"%s\" への setproject に失敗しました" - -#: src/sudo.c:891 -#, c-format -msgid "warning, resource control assignment failed for project \"%s\"" -msgstr "警告、プロジェクト \"%s\" への資源制御割り当てに失敗しました" - -#: src/sudo.c:959 +#: src/sudo.c:999 #, c-format msgid "unknown login class %s" msgstr "不明なログインクラス %s です" -#: src/sudo.c:973 src/sudo.c:976 -#, c-format +#: src/sudo.c:1012 msgid "unable to set user context" msgstr "ユーザーコンテキストを設定できません" -#: src/sudo.c:988 -#, c-format +#: src/sudo.c:1026 msgid "unable to set supplementary group IDs" msgstr "追加のグループIDを設定できません" -#: src/sudo.c:995 +#: src/sudo.c:1033 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "実行時のグループID (gid) %u を実効グループIDに設定できません" -#: src/sudo.c:1001 +#: src/sudo.c:1039 #, c-format msgid "unable to set gid to runas gid %u" msgstr "実行時のグループID (gid) %u をグループIDに設定できません" -#: src/sudo.c:1008 -#, c-format +#: src/sudo.c:1046 msgid "unable to set process priority" msgstr "プロセス優先度を設定できません" -#: src/sudo.c:1016 +#: src/sudo.c:1054 #, c-format msgid "unable to change root to %s" msgstr "root を %s へ変更できません" -#: src/sudo.c:1023 src/sudo.c:1029 src/sudo.c:1035 +#: src/sudo.c:1067 src/sudo.c:1073 src/sudo.c:1080 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "実行時のユーザーID (uid) (%u, %u) へ変更できません" -#: src/sudo.c:1049 +#: src/sudo.c:1098 #, c-format msgid "unable to change directory to %s" msgstr "ディレクトリーを %s に変更できません" -#: src/sudo.c:1133 +#: src/sudo.c:1156 #, c-format msgid "unexpected child termination condition: %d" msgstr "予期しない子プロセスの終了コードです: %d" -#: src/sudo.c:1194 +#: src/sudo.c:1302 +#, c-format +msgid "policy plugin %s is missing the `check_policy' method" +msgstr "ポリシープラグイン %s には check_policy メソッドが含まれていません" + +#: src/sudo.c:1320 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "ポリシープラグイン %s は権限の一覧表示をサポートしていません" -#: src/sudo.c:1206 +#: src/sudo.c:1337 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "ポリシープラグイン %s は -v オプションをサポートしません" -#: src/sudo.c:1218 +#: src/sudo.c:1352 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "ポリシープラグイン %s は -k/-K オプションをサポートしません" -#: src/sudo_edit.c:111 +#: src/sudo_edit.c:181 +msgid "unable to restore current working directory" +msgstr "カレントディレクトリを復元できません" + +#: src/sudo_edit.c:526 src/sudo_edit.c:630 #, c-format -msgid "unable to change uid to root (%u)" -msgstr "ユーザーID (uid) を root (%u) に変更できません" +msgid "%s: not a regular file" +msgstr "%s: 通常ファイルではありません" -#: src/sudo_edit.c:143 +#: src/sudo_edit.c:533 #, c-format -msgid "plugin error: missing file list for sudoedit" -msgstr "プラグインエラー: sudoedit 用のファイル一覧がありません" +msgid "%s: editing symbolic links is not permitted" +msgstr "%s: シンボリックリンクの編集は許可されていません" -#: src/sudo_edit.c:171 src/sudo_edit.c:271 +#: src/sudo_edit.c:536 #, c-format -msgid "%s: not a regular file" -msgstr "%s: 通常ファイルではありません" +msgid "%s: editing files in a writable directory is not permitted" +msgstr "%s: 書き込み可能なディレクトリ内のファイルの編集は許可されていません" -#: src/sudo_edit.c:205 src/sudo_edit.c:307 +#: src/sudo_edit.c:567 src/sudo_edit.c:669 #, c-format msgid "%s: short write" msgstr "%s: 短い書き込みです" -#: src/sudo_edit.c:272 +#: src/sudo_edit.c:631 #, c-format msgid "%s left unmodified" msgstr "%s を修正しないままにします" -#: src/sudo_edit.c:285 +#: src/sudo_edit.c:644 src/sudo_edit.c:830 #, c-format msgid "%s unchanged" msgstr "%s を変更しません" -#: src/sudo_edit.c:297 src/sudo_edit.c:318 +#: src/sudo_edit.c:658 src/sudo_edit.c:680 #, c-format msgid "unable to write to %s" msgstr "%s へ書き込むことができません" -#: src/sudo_edit.c:298 src/sudo_edit.c:316 src/sudo_edit.c:319 +#: src/sudo_edit.c:659 src/sudo_edit.c:678 src/sudo_edit.c:681 +#: src/sudo_edit.c:855 src/sudo_edit.c:859 #, c-format msgid "contents of edit session left in %s" msgstr "編集セッションの内容が %s 内に残っています" -#: src/sudo_edit.c:315 -#, c-format +#: src/sudo_edit.c:677 msgid "unable to read temporary file" msgstr "一時ファイルを読み込むことができません" -#: src/tgetpass.c:90 +#: src/sudo_edit.c:760 +msgid "sesh: internal error: odd number of paths" +msgstr "sesh: 内部エラー: パスの数がおかしいです" + +#: src/sudo_edit.c:762 +msgid "sesh: unable to create temporary files" +msgstr "sesh: 一時ファイルを作成することができません" + +#: src/sudo_edit.c:764 src/sudo_edit.c:862 +#, c-format +msgid "sesh: unknown error %d" +msgstr "sesh: 不明なエラー %d" + +#: src/sudo_edit.c:854 +msgid "unable to copy temporary files back to their original location" +msgstr "一時ファイルを元の場所に戻すことができません" + +#: src/sudo_edit.c:858 +msgid "unable to copy some of the temporary files back to their original location" +msgstr "一時ファイルのいくつかを元の場所に戻すことができません" + +#: src/sudo_edit.c:901 #, c-format +msgid "unable to change uid to root (%u)" +msgstr "ユーザーID (uid) を root (%u) に変更できません" + +#: src/sudo_edit.c:918 +msgid "plugin error: missing file list for sudoedit" +msgstr "プラグインエラー: sudoedit 用のファイル一覧がありません" + +#: src/sudo_edit.c:959 src/sudo_edit.c:972 +msgid "unable to read the clock" +msgstr "時刻を読み込むことができません" + +#: src/tgetpass.c:107 msgid "no tty present and no askpass program specified" msgstr "端末 (tty) が存在せず、パスワードを尋ねる (askpass) プログラムが指定されていません" -#: src/tgetpass.c:99 -#, c-format +#: src/tgetpass.c:116 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "パスワードを尋ねる (askpass) プログラムが指定されていません。 SUDO_ASKPASS の設定を試みます" -#: src/tgetpass.c:231 +#: src/tgetpass.c:276 #, c-format msgid "unable to set gid to %u" msgstr "グループIDを %u に設定できません" -#: src/tgetpass.c:235 +#: src/tgetpass.c:280 #, c-format msgid "unable to set uid to %u" msgstr "ユーザーIDを %u に設定できません" -#: src/tgetpass.c:240 +#: src/tgetpass.c:285 #, c-format msgid "unable to run %s" msgstr "%s を実行できません" -#: src/utmp.c:278 -#, c-format +#: src/utmp.c:266 msgid "unable to save stdin" msgstr "標準入力を保存できません" -#: src/utmp.c:280 -#, c-format +#: src/utmp.c:268 msgid "unable to dup2 stdin" msgstr "標準入力へ dup2 を実行できません" -#: src/utmp.c:283 -#, c-format +#: src/utmp.c:271 msgid "unable to restore stdin" msgstr "標準入力を復元できません" +#~ msgid "internal error, tried allocate zero bytes" +#~ msgstr "内部エラー、0バイトの確保を試みました" + +#~ msgid "unable to set terminal to raw mode" +#~ msgstr "端末を raw モードに設定できません" + +#~ msgid "unable to open socket" +#~ msgstr "ソケットを開くことができません" + +#~ msgid "internal error, tried to emalloc2(0)" +#~ msgstr "内部エラー、 emalloc2(0) を試みました" + +#~ msgid "internal error, tried to ecalloc(0)" +#~ msgstr "内部エラー、ecalloc(0) を試みました" + +#~ msgid "internal error, tried to erealloc(0)" +#~ msgstr "内部エラー、 erealloc(0) を試みました" + +#~ msgid "internal error, tried to erealloc3(0)" +#~ msgstr "内部エラー、 erealloc3(0) を試みました" + +#~ msgid "internal error, tried to erecalloc(0)" +#~ msgstr "内部エラー、 erecalloc(0) を試みました" + +#~ msgid ": " +#~ msgstr ": " + +#~ msgid "select failed" +#~ msgstr "select に失敗しました" + +#~ msgid "load_interfaces: overflow detected" +#~ msgstr "load_interfaces: オーバーフローが検出されました" + +#~ msgid "list user's available commands\n" +#~ msgstr "ユーザーが使用可能なコマンドを一覧表示する\n" + +#~ msgid "run a shell as target user\n" +#~ msgstr "変更先のユーザーとしてシェルを実行する\n" + +#~ msgid "when listing, list specified user's privileges\n" +#~ msgstr "一覧表示する時に、指定したユーザーの権限を一覧表示する\n" + #~ msgid "internal error, emalloc2() overflow" #~ msgstr "内部エラー、 emalloc2() がオーバーフローしました" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/po/nb.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/po/nb.mo differ diff -Nru sudo-1.8.12/po/nb.po sudo-1.8.16/po/nb.po --- sudo-1.8.12/po/nb.po 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/po/nb.po 2016-03-17 16:13:10.000000000 +0000 @@ -1,14 +1,15 @@ -# Portable object template file for sudo -# This file is put in the public domain. -# Todd C. Miller , 2011-2013 -# Åka Sikrom , 2014. +# Norwegian bokmål translation of sudo. +# This file is distributed under the same license as the sudo package. +# Copyright (C) 2014 Free Software Foundation, Inc. +# Todd C. Miller , 2011-2013. +# Åka Sikrom , 2014-2016. # msgid "" msgstr "" -"Project-Id-Version: sudo-1.8.12b1\n" -"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-10-27 12:35-0600\n" -"PO-Revision-Date: 2014-11-11 08:41+0100\n" +"Project-Id-Version: sudo-1.8.16b1\n" +"Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" +"POT-Creation-Date: 2016-02-19 15:48-0700\n" +"PO-Revision-Date: 2016-02-26 20:06+0100\n" "Last-Translator: Åka Sikrom \n" "Language-Team: Norwegian Bokmaal \n" "Language: Norwegian Bokmål\n" @@ -17,299 +18,313 @@ "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.5.4\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Poedit-Language: Norwegian Bokmål\n" -#: lib/util/aix.c:92 lib/util/aix.c:151 +#: lib/util/aix.c:85 lib/util/aix.c:164 msgid "unable to open userdb" -msgstr "klarte ikke å åpne brukerdatabasen" +msgstr "klarte ikke å åpne brukerdatabase" -#: lib/util/aix.c:156 +#: lib/util/aix.c:219 #, c-format msgid "unable to switch to registry \"%s\" for %s" msgstr "klarte ikke å skifte til registeret «%s» for %s" -#: lib/util/aix.c:175 +#: lib/util/aix.c:244 msgid "unable to restore registry" -msgstr "klarte ikke å gjenopprette registeret" +msgstr "klarte ikke å gjenopprette register" -#: lib/util/alloc.c:68 lib/util/alloc.c:85 lib/util/alloc.c:106 -#: lib/util/alloc.c:128 lib/util/alloc.c:147 lib/util/alloc.c:170 -msgid "internal error, tried allocate zero bytes" -msgstr "intern feil: prøvde å tildele tomme byte" - -#: lib/util/alloc.c:87 lib/util/alloc.c:109 lib/util/alloc.c:149 -#: lib/util/alloc.c:172 src/net_ifs.c:174 src/net_ifs.c:191 src/net_ifs.c:325 -#, c-format -msgid "internal error, %s overflow" -msgstr "intern feil: %s er full" - -#: lib/util/gidlist.c:78 src/load_plugins.c:61 src/load_plugins.c:74 -#: src/sudo.c:572 src/sudo.c:591 src/sudo.c:618 src/sudo.c:627 src/sudo.c:636 -#: src/sudo.c:653 src/sudo.c:700 src/sudo.c:710 +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/gidlist.c:74 +#: lib/util/sudo_conf.c:207 lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 +#: lib/util/sudo_conf.c:569 src/conversation.c:75 src/exec.c:863 +#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 +#: src/exec_pty.c:684 src/exec_pty.c:692 src/load_plugins.c:52 +#: src/load_plugins.c:65 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:655 src/sudo.c:665 src/sudo.c:685 src/sudo.c:704 src/sudo.c:713 +#: src/sudo.c:722 src/sudo.c:739 src/sudo.c:780 src/sudo.c:790 src/sudo.c:810 +#: src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 src/sudo.c:1492 +#: src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/util/strsignal.c:50 +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/sudo_conf.c:208 +#: lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 lib/util/sudo_conf.c:569 +#: src/conversation.c:76 src/exec.c:863 src/exec_common.c:107 +#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:684 +#: src/exec_pty.c:692 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:810 src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 +#: src/sudo.c:1492 src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 +msgid "unable to allocate memory" +msgstr "klarte ikke å tildele minne" + +#: lib/util/strsignal.c:48 msgid "Unknown signal" msgstr "Ukjent signal" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:65 lib/util/strtonum.c:183 +#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:48 +#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "ugyldig verdi" -#: lib/util/strtoid.c:90 lib/util/strtoid.c:118 lib/util/strtomode.c:61 -#: lib/util/strtonum.c:68 lib/util/strtonum.c:195 +#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:54 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "verdien er for stor" -#: lib/util/strtoid.c:96 lib/util/strtomode.c:61 lib/util/strtonum.c:68 -#: lib/util/strtonum.c:189 +#: lib/util/strtoid.c:89 lib/util/strtomode.c:54 lib/util/strtonum.c:61 +#: lib/util/strtonum.c:182 msgid "value too small" msgstr "verdien er for liten" -#: lib/util/sudo_conf.c:181 +#: lib/util/sudo_conf.c:223 #, c-format msgid "invalid Path value `%s' in %s, line %u" msgstr "«%s» er en ugyldig Path-verdi i %s, linje %u" -#: lib/util/sudo_conf.c:335 lib/util/sudo_conf.c:388 +#: lib/util/sudo_conf.c:389 lib/util/sudo_conf.c:442 #, c-format msgid "invalid value for %s `%s' in %s, line %u" msgstr "«%2$s» er en ugyldig verdi for %1$s i %3$s, linje %4$u" -#: lib/util/sudo_conf.c:356 +#: lib/util/sudo_conf.c:410 #, c-format msgid "unsupported group source `%s' in %s, line %u" msgstr "gruppekilden «%s» (i %s, linje %u) støttes ikke" -#: lib/util/sudo_conf.c:372 +#: lib/util/sudo_conf.c:426 #, c-format msgid "invalid max groups `%s' in %s, line %u" msgstr "«%s» er et ugyldig maskimalt antall grupper i %s, linje %u" -#: lib/util/sudo_conf.c:522 +#: lib/util/sudo_conf.c:585 #, c-format msgid "unable to stat %s" msgstr "klarte ikke å lage statistikk av %s" -#: lib/util/sudo_conf.c:525 +#: lib/util/sudo_conf.c:588 #, c-format msgid "%s is not a regular file" msgstr "«%s» er ikke en vanlig fil" -#: lib/util/sudo_conf.c:528 +#: lib/util/sudo_conf.c:591 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "«%s» eies av uid %u, som skulle vært %u" -#: lib/util/sudo_conf.c:532 +#: lib/util/sudo_conf.c:595 #, c-format msgid "%s is world writable" msgstr "«%s» kan overskrives av alle" -#: lib/util/sudo_conf.c:535 +#: lib/util/sudo_conf.c:598 #, c-format msgid "%s is group writable" msgstr "«%s» kan overskrives av eiergruppa" -#: lib/util/sudo_conf.c:545 src/selinux.c:196 src/selinux.c:209 src/sudo.c:341 +#: lib/util/sudo_conf.c:608 src/selinux.c:199 src/selinux.c:212 src/sudo.c:367 #, c-format msgid "unable to open %s" msgstr "klarte ikke å åpne %s" -#: src/exec.c:123 src/exec.c:128 src/exec.c:423 src/exec.c:425 src/exec.c:427 -#: src/exec.c:429 src/exec.c:431 src/exec.c:433 src/exec.c:436 src/exec.c:453 -#: src/exec.c:455 src/exec.c:457 src/exec.c:605 src/exec.c:800 -#: src/exec_pty.c:480 src/exec_pty.c:736 src/exec_pty.c:806 src/exec_pty.c:808 -#: src/exec_pty.c:820 src/exec_pty.c:1308 src/exec_pty.c:1310 -#: src/exec_pty.c:1315 src/exec_pty.c:1317 src/exec_pty.c:1331 -#: src/exec_pty.c:1342 src/exec_pty.c:1344 src/exec_pty.c:1346 -#: src/exec_pty.c:1348 src/exec_pty.c:1350 src/exec_pty.c:1352 -#: src/exec_pty.c:1354 src/signal.c:156 +#: src/exec.c:114 src/exec.c:116 src/exec.c:121 src/exec.c:409 src/exec.c:411 +#: src/exec.c:413 src/exec.c:415 src/exec.c:417 src/exec.c:419 src/exec.c:422 +#: src/exec.c:438 src/exec.c:440 src/exec.c:595 src/exec.c:790 +#: src/exec_pty.c:466 src/exec_pty.c:722 src/exec_pty.c:792 src/exec_pty.c:794 +#: src/exec_pty.c:806 src/exec_pty.c:808 src/exec_pty.c:1289 +#: src/exec_pty.c:1291 src/exec_pty.c:1296 src/exec_pty.c:1298 +#: src/exec_pty.c:1312 src/exec_pty.c:1323 src/exec_pty.c:1325 +#: src/exec_pty.c:1327 src/exec_pty.c:1329 src/exec_pty.c:1331 +#: src/exec_pty.c:1333 src/exec_pty.c:1335 src/signal.c:147 #, c-format msgid "unable to set handler for signal %d" msgstr "klarte ikke å velge håndtering av signal %d" -#: src/exec.c:135 src/exec_pty.c:845 -msgid "policy plugin failed session initialization" -msgstr "regeltillegg klarte ikke å gjøre klar økta" - -#: src/exec.c:140 src/exec_pty.c:861 src/exec_pty.c:1392 src/tgetpass.c:221 +#: src/exec.c:126 src/exec_pty.c:838 src/exec_pty.c:1373 src/tgetpass.c:265 msgid "unable to fork" -msgstr "klarte ikke å lage en kopi av prosessen" +msgstr "klarte ikke å lage kopi av prosess" -#: src/exec.c:318 src/exec.c:326 src/exec.c:877 src/exec_pty.c:604 -#: src/exec_pty.c:609 src/exec_pty.c:667 src/exec_pty.c:674 src/exec_pty.c:965 -#: src/exec_pty.c:975 src/exec_pty.c:1020 src/exec_pty.c:1027 -#: src/exec_pty.c:1457 src/exec_pty.c:1464 src/exec_pty.c:1471 +#: src/exec.c:304 src/exec.c:312 src/exec.c:868 src/exec_pty.c:604 +#: src/exec_pty.c:611 src/exec_pty.c:654 src/exec_pty.c:659 src/exec_pty.c:946 +#: src/exec_pty.c:956 src/exec_pty.c:1001 src/exec_pty.c:1008 +#: src/exec_pty.c:1438 src/exec_pty.c:1445 src/exec_pty.c:1452 msgid "unable to add event to queue" -msgstr "klarte ikke å sette hendelsen i kø" +msgstr "klarte ikke å legge hendelse i kø" -#: src/exec.c:406 +#: src/exec.c:392 msgid "unable to create sockets" msgstr "klarte ikke å lage sokkel" -#: src/exec.c:502 +#: src/exec.c:447 +msgid "policy plugin failed session initialization" +msgstr "regeltillegg klarte ikke å starte økt" + +#: src/exec.c:492 msgid "error in event loop" msgstr "feil i hendelsesløkke" -#: src/exec.c:520 +#: src/exec.c:510 msgid "unable to restore tty label" -msgstr "klarte ikke å gjenopprette tty-merkelapp" +msgstr "klarte ikke å gjenopprette tty-etikett" -#: src/exec.c:613 src/exec_pty.c:514 src/signal.c:95 +#: src/exec.c:603 src/exec_pty.c:498 src/signal.c:86 #, c-format msgid "unable to restore handler for signal %d" msgstr "klarte ikke å gjenopprette håndtering av signal %d" -#: src/exec.c:731 src/exec_pty.c:1199 +#: src/exec.c:721 src/exec_pty.c:1180 msgid "error reading from signal pipe" -msgstr "feil ved lesing fra signalrør" +msgstr "feil under lesing fra signalrør" -#: src/exec_common.c:73 +#: src/exec_common.c:166 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "klarte ikke å fjerne PRIV_PROC_EXEC fra PRIV_LIMIT" -#: src/exec_pty.c:200 +#: src/exec_pty.c:188 msgid "unable to allocate pty" msgstr "klarte ikke å tildele pty" -#: src/exec_pty.c:780 src/exec_pty.c:789 src/exec_pty.c:797 -#: src/exec_pty.c:1300 src/exec_pty.c:1389 src/signal.c:137 src/tgetpass.c:218 +#: src/exec_pty.c:766 src/exec_pty.c:775 src/exec_pty.c:783 +#: src/exec_pty.c:1281 src/exec_pty.c:1370 src/signal.c:128 src/tgetpass.c:261 msgid "unable to create pipe" msgstr "klarte ikke å lage datarør" -#: src/exec_pty.c:836 -msgid "unable to set terminal to raw mode" -msgstr "klarte ikke å velge råmodus for terminalen" - -#: src/exec_pty.c:1232 +#: src/exec_pty.c:1213 msgid "error reading from pipe" -msgstr "feil ved lesing fra datarør" +msgstr "feil under lesing fra datarør" -#: src/exec_pty.c:1257 +#: src/exec_pty.c:1238 msgid "error reading from socketpair" -msgstr "feil ved lesing fra sokkelpar" +msgstr "feil under lesing fra sokkelpar" -#: src/exec_pty.c:1266 +#: src/exec_pty.c:1247 #, c-format msgid "unexpected reply type on backchannel: %d" -msgstr "uforventet respondstype i bak-kanalen: %d" +msgstr "uforventet responstype i bak-kanalen: %d" -#: src/exec_pty.c:1368 +#: src/exec_pty.c:1349 msgid "unable to set controlling tty" msgstr "klarte ikke å velge styrende tty" -#: src/load_plugins.c:59 src/load_plugins.c:72 src/load_plugins.c:89 -#: src/load_plugins.c:142 src/load_plugins.c:148 src/load_plugins.c:154 -#: src/load_plugins.c:195 src/load_plugins.c:202 src/load_plugins.c:209 -#: src/load_plugins.c:215 +#: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 +#: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 +#: src/load_plugins.c:170 src/load_plugins.c:178 src/load_plugins.c:185 +#: src/load_plugins.c:191 #, c-format msgid "error in %s, line %d while loading plugin `%s'" msgstr "feil i «%s» line %d ved innlasting av tillegget «%s»" -#: src/load_plugins.c:91 +#: src/load_plugins.c:87 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" -#: src/load_plugins.c:150 +#: src/load_plugins.c:125 #, c-format msgid "%s must be owned by uid %d" msgstr "«%s» må eies av uid %d" -#: src/load_plugins.c:156 +#: src/load_plugins.c:131 #, c-format msgid "%s must be only be writable by owner" -msgstr "«%s» kan ikke være overskrivbar for andre enn eieren" +msgstr "«%s» kan ikke være overskrivbar for andre enn eier" -#: src/load_plugins.c:197 +#: src/load_plugins.c:172 #, c-format msgid "unable to load %s: %s" msgstr "klarte ikke å laste inn «%s». %s" -#: src/load_plugins.c:204 +#: src/load_plugins.c:180 #, c-format msgid "unable to find symbol `%s' in %s" msgstr "fant ikke symbolet «%s» i %s" -#: src/load_plugins.c:211 +#: src/load_plugins.c:187 #, c-format msgid "unknown policy type %d found in %s" msgstr "regeltypen «%d», som ble funnet i «%s», er ukjent" -#: src/load_plugins.c:217 +#: src/load_plugins.c:193 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "ukompatibel versjon av programtillegg %d (forventet %d) ble funnet i «%s»" -#: src/load_plugins.c:226 +#: src/load_plugins.c:202 #, c-format msgid "ignoring policy plugin `%s' in %s, line %d" -msgstr "regeltillegget «%s» i «%s» linje %d blir ignorert" +msgstr "regeltillegg «%s» i «%s» linje %d blir ignorert" -#: src/load_plugins.c:228 +#: src/load_plugins.c:204 msgid "only a single policy plugin may be specified" msgstr "du kan bare velge ett regeltillegg" -#: src/load_plugins.c:231 +#: src/load_plugins.c:207 #, c-format msgid "ignoring duplicate policy plugin `%s' in %s, line %d" msgstr "duplikattillegget «%s» i «%s» linje %d blir ignorert" -#: src/load_plugins.c:249 +#: src/load_plugins.c:228 #, c-format msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" msgstr "duplikattillegget «%s» for inn- og utdata i «%s» line %d blir ignorert" -#: src/load_plugins.c:338 +#: src/load_plugins.c:331 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "regeltillegget «%s» inneholder ikke en «check_policy»-metode" -#: src/net_ifs.c:236 -msgid "unable to open socket" -msgstr "klarte ikke å åpne sokkelen" +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:476 +#, c-format +msgid "internal error, %s overflow" +msgstr "intern feil: %s er full" -#: src/parse_args.c:241 +#: src/parse_args.c:239 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "«-C» må brukes med et tallargument med en verdi på minst 3" -#: src/parse_args.c:403 +#: src/parse_args.c:406 msgid "you may not specify both the `-i' and `-s' options" msgstr "du kan ikke velge både «-i» og «-s»" -#: src/parse_args.c:407 +#: src/parse_args.c:410 msgid "you may not specify both the `-i' and `-E' options" msgstr "du kan ikke velge både «-i» og «-E»" -#: src/parse_args.c:417 +#: src/parse_args.c:420 msgid "the `-E' option is not valid in edit mode" msgstr "valget «-E» er ugyldig i redigeringsmodus" -#: src/parse_args.c:419 +#: src/parse_args.c:422 msgid "you may not specify environment variables in edit mode" msgstr "du kan ikke velge miljøvariabler i redigeringsmodus" -#: src/parse_args.c:427 +#: src/parse_args.c:430 msgid "the `-U' option may only be used with the `-l' option" msgstr "valget «-U» kan ikke brukes uten «-l»" -#: src/parse_args.c:431 +#: src/parse_args.c:434 msgid "the `-A' and `-S' options may not be used together" msgstr "valgene «-A» og «-S» kan ikke brukes samtidig" -#: src/parse_args.c:497 +#: src/parse_args.c:504 msgid "sudoedit is not supported on this platform" msgstr "sudoedit støttes ikke på denne plattformen" -#: src/parse_args.c:570 +#: src/parse_args.c:577 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Du kan bare velge ett av valgene -e, -h, -i, -K, -l, -s, -v eller -V" -#: src/parse_args.c:584 +#: src/parse_args.c:591 #, c-format msgid "" "%s - edit files as another user\n" @@ -318,7 +333,7 @@ "%s - rediger filer som om du var en annen bruker\n" "\n" -#: src/parse_args.c:586 +#: src/parse_args.c:593 #, c-format msgid "" "%s - execute a command as another user\n" @@ -327,7 +342,7 @@ "%s - kjør en kommando som om du var en annen bruker\n" "\n" -#: src/parse_args.c:591 +#: src/parse_args.c:598 #, c-format msgid "" "\n" @@ -336,483 +351,519 @@ "\n" "Valg:\n" -#: src/parse_args.c:593 +#: src/parse_args.c:600 msgid "use a helper program for password prompting" msgstr "bruk et hjelpeprogram for å oppgi passord" -#: src/parse_args.c:596 +#: src/parse_args.c:603 msgid "use specified BSD authentication type" msgstr "bruk valgt BSD-autentiseringsmetode" -#: src/parse_args.c:599 +#: src/parse_args.c:606 msgid "run command in the background" msgstr "kjør kommando i bakgrunnen" -#: src/parse_args.c:601 +#: src/parse_args.c:608 msgid "close all file descriptors >= num" msgstr "lukk alle fildeskriptorer >= num" -#: src/parse_args.c:604 +#: src/parse_args.c:611 msgid "run command with the specified BSD login class" msgstr "kjør kommando med valgt BSD-innloggingsklasse" -#: src/parse_args.c:607 +#: src/parse_args.c:614 msgid "preserve user environment when running command" msgstr "behold gjeldende brukermiljø når kommandoen kjøres" -#: src/parse_args.c:609 +#: src/parse_args.c:616 msgid "edit files instead of running a command" msgstr "rediger filer i stedet for å kjøre en kommando" -#: src/parse_args.c:611 +#: src/parse_args.c:618 msgid "run command as the specified group name or ID" msgstr "kjør kommando som om du var en del av valgt gruppe (-navn eller -ID)" -#: src/parse_args.c:613 +#: src/parse_args.c:620 msgid "set HOME variable to target user's home dir" msgstr "bruk valgt brukers hjemmemappe som HOME-miljøvariabel" -#: src/parse_args.c:615 +#: src/parse_args.c:622 msgid "display help message and exit" msgstr "vis hjelpetekst og avslutt" -#: src/parse_args.c:617 +#: src/parse_args.c:624 msgid "run command on host (if supported by plugin)" msgstr "kjør kommando på verten (hvis programtillegget støtter det)" -#: src/parse_args.c:619 +#: src/parse_args.c:626 msgid "run login shell as the target user; a command may also be specified" msgstr "kjør innloggingsskall som om du var den valgte brukeren (du kan også oppgi en kommando her)" -#: src/parse_args.c:621 +#: src/parse_args.c:628 msgid "remove timestamp file completely" msgstr "fjern tidsstempel-fil skikkelig" -#: src/parse_args.c:623 +#: src/parse_args.c:630 msgid "invalidate timestamp file" msgstr "gjør tidsstempel-fil ugyldig" -#: src/parse_args.c:625 +#: src/parse_args.c:632 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "vis brukerens privilegier, eller sjekk om det fungerer å kjøre en bestemt kommando (bruk to ganger for å se et lengre format)" -#: src/parse_args.c:627 +#: src/parse_args.c:634 msgid "non-interactive mode, no prompts are used" msgstr "stillemodus (ingen ledetekst vises)" -#: src/parse_args.c:629 +#: src/parse_args.c:636 msgid "preserve group vector instead of setting to target's" msgstr "behold gruppevektor, i stedet for å bruke den som gjelder for målet" -#: src/parse_args.c:631 +#: src/parse_args.c:638 msgid "use the specified password prompt" msgstr "bruk valgt passord-ledetekst" -#: src/parse_args.c:634 +#: src/parse_args.c:641 msgid "create SELinux security context with specified role" msgstr "lag SELinux-sikkerhetskontekst med valgt rolle" -#: src/parse_args.c:637 +#: src/parse_args.c:644 msgid "read password from standard input" msgstr "les passord fra standard inndata" -#: src/parse_args.c:639 +#: src/parse_args.c:646 msgid "run shell as the target user; a command may also be specified" msgstr "kjør skall som valgt bruker (du kan også oppgi en kommando her)" -#: src/parse_args.c:642 +#: src/parse_args.c:649 msgid "create SELinux security context with specified type" msgstr "lag SELinux-sikkerhetskontekst med valgt type" -#: src/parse_args.c:645 +#: src/parse_args.c:652 msgid "in list mode, display privileges for user" msgstr "vis brukerprivilegier (i listemodus)" -#: src/parse_args.c:647 +#: src/parse_args.c:654 msgid "run command (or edit file) as specified user name or ID" msgstr "kjør kommando (eller rediger fil) som valgt brukernavn eller bruker-ID" -#: src/parse_args.c:649 +#: src/parse_args.c:656 msgid "display version information and exit" msgstr "vis programversjon og avslutt" -#: src/parse_args.c:651 +#: src/parse_args.c:658 msgid "update user's timestamp without running a command" msgstr "oppdater brukerens tidsstempel uten å kjøre en kommando" -#: src/parse_args.c:653 +#: src/parse_args.c:660 msgid "stop processing command line arguments" msgstr "slutt å behandle kommandolinje-argumenter" -#: src/selinux.c:77 +#: src/selinux.c:78 msgid "unable to open audit system" msgstr "klarte ikke å åpne revisjonssystemet" -#: src/selinux.c:85 +#: src/selinux.c:88 msgid "unable to send audit message" msgstr "klarte ikke å sende revisjonsmelding" -#: src/selinux.c:113 +#: src/selinux.c:116 #, c-format msgid "unable to fgetfilecon %s" msgstr "klarte ikke å utføre fgetfilecon %s" -#: src/selinux.c:118 +#: src/selinux.c:121 #, c-format msgid "%s changed labels" msgstr "%s endret etiketter" -#: src/selinux.c:123 +#: src/selinux.c:126 #, c-format msgid "unable to restore context for %s" msgstr "klarte ikke å gjenopprette kontekst for «%s»" -#: src/selinux.c:163 +#: src/selinux.c:166 #, c-format msgid "unable to open %s, not relabeling tty" msgstr "klarte ikke å åpne «%s». tty får ikke ny etikett" -#: src/selinux.c:172 +#: src/selinux.c:175 msgid "unable to get current tty context, not relabeling tty" msgstr "klarte ikke å hente gjeldende tty-kontekst. tty får ikke ny etikett" -#: src/selinux.c:179 +#: src/selinux.c:182 msgid "unable to get new tty context, not relabeling tty" msgstr "klrate ikke å hente ny tty-kontekst. tty får ikke ny etikett" -#: src/selinux.c:186 +#: src/selinux.c:189 msgid "unable to set new tty context" msgstr "klarte ikke å velge ny tty-kontekst" -#: src/selinux.c:252 +#: src/selinux.c:255 #, c-format msgid "you must specify a role for type %s" msgstr "du må velge en rolle for typen «%s»" -#: src/selinux.c:258 +#: src/selinux.c:261 #, c-format msgid "unable to get default type for role %s" msgstr "klarte ikke å hente standardtype for rollen «%s»" -#: src/selinux.c:276 +#: src/selinux.c:279 #, c-format msgid "failed to set new role %s" msgstr "klarte ikke å velge den nye rollen «%s»" -#: src/selinux.c:280 +#: src/selinux.c:283 #, c-format msgid "failed to set new type %s" msgstr "klarte ikke å velge den nye typen «%s»" -#: src/selinux.c:289 +#: src/selinux.c:295 #, c-format msgid "%s is not a valid context" msgstr "«%s» er en ugyldig kontekst" -#: src/selinux.c:324 +#: src/selinux.c:330 msgid "failed to get old_context" msgstr "klarte ikke å hente «old_context»" -#: src/selinux.c:330 +#: src/selinux.c:336 msgid "unable to determine enforcing mode." msgstr "klarte ikke å finne håndhevelsesmodus." -#: src/selinux.c:347 +#: src/selinux.c:353 #, c-format msgid "unable to set tty context to %s" msgstr "klarte ikke å velge «%s» som tty-kontekst" -#: src/selinux.c:386 +#: src/selinux.c:392 #, c-format msgid "unable to set exec context to %s" msgstr "klarte ikke å velge «%s» som kjørekontekst" -#: src/selinux.c:393 +#: src/selinux.c:399 #, c-format msgid "unable to set key creation context to %s" msgstr "klarte ikke å velge «%s» som nøkkelkontekst" -#: src/sesh.c:80 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "krever at du bruker minst ett argument" -#: src/sesh.c:109 +#: src/sesh.c:106 +#, c-format +msgid "invalid file descriptor number: %s" +msgstr "ugyldig fildeskriptor-tall: %s" + +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "klarte ikke å kjøre %s som et innloggingsskall" -#: src/sesh.c:114 src/sudo.c:1186 +#: src/sesh.c:125 src/sudo.c:1274 #, c-format msgid "unable to execute %s" msgstr "klarte ikke å kjøre «%s»" -#: src/signal.c:77 +#: src/signal.c:68 #, c-format msgid "unable to save handler for signal %d" msgstr "klarte ikke å lagre håndtering av signal %d" -#: src/solaris.c:88 +#: src/solaris.c:76 msgid "resource control limit has been reached" msgstr "kontrollgrensen for ressurser er nådd" -#: src/solaris.c:91 +#: src/solaris.c:79 #, c-format msgid "user \"%s\" is not a member of project \"%s\"" msgstr "brukeren «%s» er ikke medlem av prosjektet «%s»" -#: src/solaris.c:95 +#: src/solaris.c:83 msgid "the invoking task is final" msgstr "den kallende oppgaven er endelig" -#: src/solaris.c:98 +#: src/solaris.c:86 #, c-format msgid "could not join project \"%s\"" msgstr "klarte ikke å bli med i prosjektet «%s»" -#: src/solaris.c:103 +#: src/solaris.c:91 #, c-format msgid "no resource pool accepting default bindings exists for project \"%s\"" msgstr "det er ingen ressursgrunnlag som godtar standardtildelinger for prosjektet «%s»" -#: src/solaris.c:107 +#: src/solaris.c:95 #, c-format msgid "specified resource pool does not exist for project \"%s\"" msgstr "fant ikke valgt ressursgrunnlag for prosjetet «%s»" -#: src/solaris.c:111 +#: src/solaris.c:99 #, c-format msgid "could not bind to default resource pool for project \"%s\"" msgstr "klarte ikke å tildele standard ressursgrunnlag for prosjektet «%s»" -#: src/solaris.c:117 +#: src/solaris.c:105 #, c-format msgid "setproject failed for project \"%s\"" -msgstr "klarte ikke å utføre «setproject» på prosjektet «%s»" +msgstr "klarte ikke å utføre «setproject» på «%s»" -#: src/solaris.c:119 +#: src/solaris.c:107 #, c-format msgid "warning, resource control assignment failed for project \"%s\"" msgstr "advarsel: noe gikk galt ved tildeling av ressurskontroll for prosjektet «%s»" -#: src/sudo.c:209 +#: src/sudo.c:212 #, c-format msgid "Sudo version %s\n" msgstr "Sudo versjon %s\n" -#: src/sudo.c:211 +#: src/sudo.c:214 #, c-format msgid "Configure options: %s\n" msgstr "Velg innstillinger: %s\n" -#: src/sudo.c:216 +#: src/sudo.c:222 msgid "fatal error, unable to load plugins" msgstr "kritisk feil: klarte ikke å laste inn tilleggsprogrammer" -#: src/sudo.c:224 +#: src/sudo.c:230 msgid "unable to initialize policy plugin" msgstr "klarte ikke å starte opp regeltillegg" -#: src/sudo.c:280 +#: src/sudo.c:276 +msgid "plugin did not return a command to execute" +msgstr "tillegget sendte ikke en kjørbar kommando" + +#: src/sudo.c:292 #, c-format msgid "error initializing I/O plugin %s" -msgstr "feil ved klargjøring av inn-/utdatatillegget «%s»" +msgstr "feil under klargjøring av inn-/utdatatillegget «%s»" -#: src/sudo.c:306 +#: src/sudo.c:318 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "uforventet sudo-modus 0x%x" -#: src/sudo.c:426 +#: src/sudo.c:461 msgid "unable to get group vector" msgstr "klarte ikke å hente gruppevektor" -#: src/sudo.c:478 +#: src/sudo.c:522 #, c-format msgid "unknown uid %u: who are you?" -msgstr "uid %u er ukjent. Hvem er du?" +msgstr "UID %u er ukjent. Hvem er du?" -#: src/sudo.c:785 +#: src/sudo.c:859 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "«%s» må eies av uid %d, og setuid-biten må være valgt" -#: src/sudo.c:788 +#: src/sudo.c:862 #, 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 "effektiv uid er ikke %d. Er «%s» på et filsystem hvor «nosuid» er valgt, eller på et NFS-filsystem uten rot-rettigheter?" -#: src/sudo.c:794 +#: src/sudo.c:868 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "effektiv uid er ikke %d. Er sudo installert med «setuid root»?" -#: src/sudo.c:923 +#: src/sudo.c:999 #, c-format msgid "unknown login class %s" msgstr "innloggingsklassen «%s» er ukjent" -#: src/sudo.c:936 +#: src/sudo.c:1012 msgid "unable to set user context" msgstr "klarte ikke å velge brukerkontekst" -#: src/sudo.c:950 +#: src/sudo.c:1026 msgid "unable to set supplementary group IDs" msgstr "klarte ikke å velge ekstra grruppe-id-er" -#: src/sudo.c:957 +#: src/sudo.c:1033 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "klarte ikke å velge «runas gid %u» som effektiv gid" -#: src/sudo.c:963 +#: src/sudo.c:1039 #, c-format msgid "unable to set gid to runas gid %u" msgstr "klarte ikke å velge «runas gid %u» som gid" -#: src/sudo.c:970 +#: src/sudo.c:1046 msgid "unable to set process priority" msgstr "klarte ikke å velge prosessprioritet" -#: src/sudo.c:978 +#: src/sudo.c:1054 #, c-format msgid "unable to change root to %s" msgstr "klarte ikke å endre rot til «%s»" -#: src/sudo.c:991 src/sudo.c:997 src/sudo.c:1003 +#: src/sudo.c:1067 src/sudo.c:1073 src/sudo.c:1080 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "klarte ikke å endre til runas uid (%u, %u)" -#: src/sudo.c:1021 +#: src/sudo.c:1098 #, c-format msgid "unable to change directory to %s" msgstr "klarte ikke å endre mappe til «%s»" -#: src/sudo.c:1082 +#: src/sudo.c:1156 #, c-format msgid "unexpected child termination condition: %d" msgstr "uforventet årsak for avslutning av underprosess: %d" -#: src/sudo.c:1214 +#: src/sudo.c:1302 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "regeltillegget «%s» mangler «check_policy»-metoden" -#: src/sudo.c:1232 +#: src/sudo.c:1320 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "regeltillegget «%s» støtter ikke listetillatelser" -#: src/sudo.c:1249 +#: src/sudo.c:1337 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "regeltillegget «%s» støtter ikke valget «-v»" -#: src/sudo.c:1264 +#: src/sudo.c:1352 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "regeltillegget «%s» støtter ikke valgene «-k» og «-K»" -#: src/sudo_edit.c:203 src/sudo_edit.c:294 +#: src/sudo_edit.c:181 +msgid "unable to restore current working directory" +msgstr "klarte ikke å gjenopprette gjeldende arbeidsmappe" + +#: src/sudo_edit.c:526 src/sudo_edit.c:630 #, c-format msgid "%s: not a regular file" msgstr "«%s» er ikke en vanlig fil" -#: src/sudo_edit.c:230 src/sudo_edit.c:332 +#: src/sudo_edit.c:533 +#, c-format +msgid "%s: editing symbolic links is not permitted" +msgstr "%s: redigering av symbolske lenker tillates ikke" + +#: src/sudo_edit.c:536 +#, c-format +msgid "%s: editing files in a writable directory is not permitted" +msgstr "%s: redigering av filer i en mappe med skrivetilgang tillates ikke" + +#: src/sudo_edit.c:567 src/sudo_edit.c:669 #, c-format msgid "%s: short write" msgstr "«%s» har kort skriving" -#: src/sudo_edit.c:295 +#: src/sudo_edit.c:631 #, c-format msgid "%s left unmodified" msgstr "«%s» ble uendret" -#: src/sudo_edit.c:308 src/sudo_edit.c:483 +#: src/sudo_edit.c:644 src/sudo_edit.c:830 #, c-format msgid "%s unchanged" msgstr "«%s» er uendret" -#: src/sudo_edit.c:321 src/sudo_edit.c:343 +#: src/sudo_edit.c:658 src/sudo_edit.c:680 #, c-format msgid "unable to write to %s" msgstr "klarte ikke å skrive til «%s»" -#: src/sudo_edit.c:322 src/sudo_edit.c:341 src/sudo_edit.c:344 -#: src/sudo_edit.c:508 src/sudo_edit.c:512 +#: src/sudo_edit.c:659 src/sudo_edit.c:678 src/sudo_edit.c:681 +#: src/sudo_edit.c:855 src/sudo_edit.c:859 #, c-format msgid "contents of edit session left in %s" msgstr "innhold fra redigeringsøkt ligger igjen i «%s»" -#: src/sudo_edit.c:340 +#: src/sudo_edit.c:677 msgid "unable to read temporary file" msgstr "klarte ikke å lese midlertidig fil" -#: src/sudo_edit.c:417 +#: src/sudo_edit.c:760 msgid "sesh: internal error: odd number of paths" msgstr "sesh: intern feil: for høyt antall stier" -#: src/sudo_edit.c:419 +#: src/sudo_edit.c:762 msgid "sesh: unable to create temporary files" msgstr "sesh: klarte ikke å lage midlertidige filer" -#: src/sudo_edit.c:421 src/sudo_edit.c:515 +#: src/sudo_edit.c:764 src/sudo_edit.c:862 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: ukjent feil (%d)" -#: src/sudo_edit.c:507 +#: src/sudo_edit.c:854 msgid "unable to copy temporary files back to their original location" msgstr "klarte ikke å kopiere midlertidige filer tilbake til opprinnelig plassering" -#: src/sudo_edit.c:511 +#: src/sudo_edit.c:858 msgid "unable to copy some of the temporary files back to their original location" msgstr "klarte ikke å kopiere enkelte midlertidige filer tilbake til opprinnelig plassering" -#: src/sudo_edit.c:554 +#: src/sudo_edit.c:901 #, c-format msgid "unable to change uid to root (%u)" msgstr "klarte ikke å endre uid til root (%u)" -#: src/sudo_edit.c:571 +#: src/sudo_edit.c:918 msgid "plugin error: missing file list for sudoedit" msgstr "feil med tillegg: sudoedit mangler filliste" -#: src/tgetpass.c:90 +#: src/sudo_edit.c:959 src/sudo_edit.c:972 +msgid "unable to read the clock" +msgstr "klarte ikke å lese klokka" + +#: src/tgetpass.c:107 msgid "no tty present and no askpass program specified" msgstr "ingen tty er tilgjengelig, og intet program for passord-etterspørsel er valgt" -#: src/tgetpass.c:99 +#: src/tgetpass.c:116 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "intet program for passord-etterspørsel er valgt. Prøv å velge «SUDO_ASKPASS»" -#: src/tgetpass.c:232 +#: src/tgetpass.c:276 #, c-format msgid "unable to set gid to %u" msgstr "klarte ikke å velge %u som gid" -#: src/tgetpass.c:236 +#: src/tgetpass.c:280 #, c-format msgid "unable to set uid to %u" msgstr "klarte ikke å velge %u som uid" -#: src/tgetpass.c:241 +#: src/tgetpass.c:285 #, c-format msgid "unable to run %s" msgstr "klarte ikke å kjøre «%s»" -#: src/utmp.c:278 +#: src/utmp.c:266 msgid "unable to save stdin" msgstr "klarte ikke å lagre standard innkanal" -#: src/utmp.c:280 +#: src/utmp.c:268 msgid "unable to dup2 stdin" msgstr "klarte ikke å utføre «dup2 stdin»" -#: src/utmp.c:283 +#: src/utmp.c:271 msgid "unable to restore stdin" msgstr "klarte ikke å gjenopprette standard innkanal" +#~ msgid "unable to set terminal to raw mode" +#~ msgstr "klarte ikke å sette terminal i råmodus" + +#~ msgid "internal error, tried allocate zero bytes" +#~ msgstr "intern feil: prøvde å tildele tomme byte" + +#~ msgid "unable to open socket" +#~ msgstr "klarte ikke å åpne sokkelen" + #~ msgid "%s: %s: %s\n" #~ msgstr "%s: %s: %s\n" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/po/pl.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/po/pl.mo differ diff -Nru sudo-1.8.12/po/pl.po sudo-1.8.16/po/pl.po --- sudo-1.8.12/po/pl.po 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/po/pl.po 2016-03-17 16:13:10.000000000 +0000 @@ -1,13 +1,13 @@ # Polish translation for sudo. # This file is put in the public domain. -# Jakub Bogusz , 2011-2014. +# Jakub Bogusz , 2011-2016. # msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.12b1\n" -"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-10-27 12:35-0600\n" -"PO-Revision-Date: 2014-11-12 17:45+0100\n" +"Project-Id-Version: sudo 1.8.16b1\n" +"Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" +"POT-Creation-Date: 2016-02-19 15:48-0700\n" +"PO-Revision-Date: 2016-02-25 19:56+0100\n" "Last-Translator: Jakub Bogusz \n" "Language-Team: Polish \n" "Language: pl\n" @@ -15,297 +15,312 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: lib/util/aix.c:92 lib/util/aix.c:151 +#: lib/util/aix.c:85 lib/util/aix.c:164 msgid "unable to open userdb" msgstr "nie udało się otworzyć userdb" -#: lib/util/aix.c:156 +#: lib/util/aix.c:219 #, c-format msgid "unable to switch to registry \"%s\" for %s" msgstr "nie udało się przełączyć na rejestr \"%s\" dla %s" -#: lib/util/aix.c:175 +#: lib/util/aix.c:244 msgid "unable to restore registry" msgstr "nie udało się odtworzyć rejestru" -#: lib/util/alloc.c:68 lib/util/alloc.c:85 lib/util/alloc.c:106 -#: lib/util/alloc.c:128 lib/util/alloc.c:147 lib/util/alloc.c:170 -msgid "internal error, tried allocate zero bytes" -msgstr "błąd wewnętrzny, próbowano przydzielić zero bajtów" - -#: lib/util/alloc.c:87 lib/util/alloc.c:109 lib/util/alloc.c:149 -#: lib/util/alloc.c:172 src/net_ifs.c:174 src/net_ifs.c:191 src/net_ifs.c:325 -#, c-format -msgid "internal error, %s overflow" -msgstr "błąd wewnętrzny, przepełnienie %s" - -#: lib/util/gidlist.c:78 src/load_plugins.c:61 src/load_plugins.c:74 -#: src/sudo.c:572 src/sudo.c:591 src/sudo.c:618 src/sudo.c:627 src/sudo.c:636 -#: src/sudo.c:653 src/sudo.c:700 src/sudo.c:710 +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/gidlist.c:74 +#: lib/util/sudo_conf.c:207 lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 +#: lib/util/sudo_conf.c:569 src/conversation.c:75 src/exec.c:863 +#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 +#: src/exec_pty.c:684 src/exec_pty.c:692 src/load_plugins.c:52 +#: src/load_plugins.c:65 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:655 src/sudo.c:665 src/sudo.c:685 src/sudo.c:704 src/sudo.c:713 +#: src/sudo.c:722 src/sudo.c:739 src/sudo.c:780 src/sudo.c:790 src/sudo.c:810 +#: src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 src/sudo.c:1492 +#: src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/util/strsignal.c:50 +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/sudo_conf.c:208 +#: lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 lib/util/sudo_conf.c:569 +#: src/conversation.c:76 src/exec.c:863 src/exec_common.c:107 +#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:684 +#: src/exec_pty.c:692 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:810 src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 +#: src/sudo.c:1492 src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 +msgid "unable to allocate memory" +msgstr "nie udało się przydzielić pamięci" + +#: lib/util/strsignal.c:48 msgid "Unknown signal" msgstr "Nieznany sygnał" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:65 lib/util/strtonum.c:183 +#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:48 +#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "błędna wartość" -#: lib/util/strtoid.c:90 lib/util/strtoid.c:118 lib/util/strtomode.c:61 -#: lib/util/strtonum.c:68 lib/util/strtonum.c:195 +#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:54 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "wartość zbyt duża" -#: lib/util/strtoid.c:96 lib/util/strtomode.c:61 lib/util/strtonum.c:68 -#: lib/util/strtonum.c:189 +#: lib/util/strtoid.c:89 lib/util/strtomode.c:54 lib/util/strtonum.c:61 +#: lib/util/strtonum.c:182 msgid "value too small" msgstr "wartość zbyt mała" -#: lib/util/sudo_conf.c:181 +#: lib/util/sudo_conf.c:223 #, c-format msgid "invalid Path value `%s' in %s, line %u" msgstr "błędna wartość Path `%s' w %s, w linii %u" -#: lib/util/sudo_conf.c:335 lib/util/sudo_conf.c:388 +#: lib/util/sudo_conf.c:389 lib/util/sudo_conf.c:442 #, c-format msgid "invalid value for %s `%s' in %s, line %u" msgstr "błędna wartość opcji %s `%s' w %s, w linii %u" -#: lib/util/sudo_conf.c:356 +#: lib/util/sudo_conf.c:410 #, c-format msgid "unsupported group source `%s' in %s, line %u" msgstr "nieobsługiwane źródło grup `%s' w %s, w linii %u" -#: lib/util/sudo_conf.c:372 +#: lib/util/sudo_conf.c:426 #, c-format msgid "invalid max groups `%s' in %s, line %u" msgstr "błędna maksymalna liczba grup `%s' w %s, w linii %u" -#: lib/util/sudo_conf.c:522 +#: lib/util/sudo_conf.c:585 #, c-format msgid "unable to stat %s" msgstr "nie udało się wykonać stat na %s" -#: lib/util/sudo_conf.c:525 +#: lib/util/sudo_conf.c:588 #, c-format msgid "%s is not a regular file" msgstr "%s nie jest zwykłym plikiem" -#: lib/util/sudo_conf.c:528 +#: lib/util/sudo_conf.c:591 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "właścicielem %s jest uid %u, powinien być %u" -#: lib/util/sudo_conf.c:532 +#: lib/util/sudo_conf.c:595 #, c-format msgid "%s is world writable" msgstr "%s jest zapisywalny dla świata" -#: lib/util/sudo_conf.c:535 +#: lib/util/sudo_conf.c:598 #, c-format msgid "%s is group writable" msgstr "%s jest zapisywalny dla grupy" -#: lib/util/sudo_conf.c:545 src/selinux.c:196 src/selinux.c:209 src/sudo.c:341 +#: lib/util/sudo_conf.c:608 src/selinux.c:199 src/selinux.c:212 src/sudo.c:367 #, c-format msgid "unable to open %s" msgstr "nie udało się otworzyć %s" -#: src/exec.c:123 src/exec.c:128 src/exec.c:423 src/exec.c:425 src/exec.c:427 -#: src/exec.c:429 src/exec.c:431 src/exec.c:433 src/exec.c:436 src/exec.c:453 -#: src/exec.c:455 src/exec.c:457 src/exec.c:605 src/exec.c:800 -#: src/exec_pty.c:480 src/exec_pty.c:736 src/exec_pty.c:806 src/exec_pty.c:808 -#: src/exec_pty.c:820 src/exec_pty.c:1308 src/exec_pty.c:1310 -#: src/exec_pty.c:1315 src/exec_pty.c:1317 src/exec_pty.c:1331 -#: src/exec_pty.c:1342 src/exec_pty.c:1344 src/exec_pty.c:1346 -#: src/exec_pty.c:1348 src/exec_pty.c:1350 src/exec_pty.c:1352 -#: src/exec_pty.c:1354 src/signal.c:156 +#: src/exec.c:114 src/exec.c:116 src/exec.c:121 src/exec.c:409 src/exec.c:411 +#: src/exec.c:413 src/exec.c:415 src/exec.c:417 src/exec.c:419 src/exec.c:422 +#: src/exec.c:438 src/exec.c:440 src/exec.c:595 src/exec.c:790 +#: src/exec_pty.c:466 src/exec_pty.c:722 src/exec_pty.c:792 src/exec_pty.c:794 +#: src/exec_pty.c:806 src/exec_pty.c:808 src/exec_pty.c:1289 +#: src/exec_pty.c:1291 src/exec_pty.c:1296 src/exec_pty.c:1298 +#: src/exec_pty.c:1312 src/exec_pty.c:1323 src/exec_pty.c:1325 +#: src/exec_pty.c:1327 src/exec_pty.c:1329 src/exec_pty.c:1331 +#: src/exec_pty.c:1333 src/exec_pty.c:1335 src/signal.c:147 #, c-format msgid "unable to set handler for signal %d" msgstr "nie udało się ustawić procedury obsługi dla sygnału %d" -#: src/exec.c:135 src/exec_pty.c:845 -msgid "policy plugin failed session initialization" -msgstr "nie udało się zainicjować sesji przez wtyczkę polityki" - -#: src/exec.c:140 src/exec_pty.c:861 src/exec_pty.c:1392 src/tgetpass.c:221 +#: src/exec.c:126 src/exec_pty.c:838 src/exec_pty.c:1373 src/tgetpass.c:265 msgid "unable to fork" msgstr "nie udało się wykonać fork" -#: src/exec.c:318 src/exec.c:326 src/exec.c:877 src/exec_pty.c:604 -#: src/exec_pty.c:609 src/exec_pty.c:667 src/exec_pty.c:674 src/exec_pty.c:965 -#: src/exec_pty.c:975 src/exec_pty.c:1020 src/exec_pty.c:1027 -#: src/exec_pty.c:1457 src/exec_pty.c:1464 src/exec_pty.c:1471 +#: src/exec.c:304 src/exec.c:312 src/exec.c:868 src/exec_pty.c:604 +#: src/exec_pty.c:611 src/exec_pty.c:654 src/exec_pty.c:659 src/exec_pty.c:946 +#: src/exec_pty.c:956 src/exec_pty.c:1001 src/exec_pty.c:1008 +#: src/exec_pty.c:1438 src/exec_pty.c:1445 src/exec_pty.c:1452 msgid "unable to add event to queue" msgstr "nie udało się dodać zdarzenia do kolejki" -#: src/exec.c:406 +#: src/exec.c:392 msgid "unable to create sockets" msgstr "nie udało się utworzyć gniazd" -#: src/exec.c:502 +#: src/exec.c:447 +msgid "policy plugin failed session initialization" +msgstr "nie udało się zainicjować sesji przez wtyczkę polityki" + +#: src/exec.c:492 msgid "error in event loop" msgstr "błąd w pętli zdarzeń" -#: src/exec.c:520 +#: src/exec.c:510 msgid "unable to restore tty label" msgstr "nie udało się przywrócić etykiety tty" -#: src/exec.c:613 src/exec_pty.c:514 src/signal.c:95 +#: src/exec.c:603 src/exec_pty.c:498 src/signal.c:86 #, c-format msgid "unable to restore handler for signal %d" msgstr "nie udało się przywrócić procedury obsługi dla sygnału %d" -#: src/exec.c:731 src/exec_pty.c:1199 +#: src/exec.c:721 src/exec_pty.c:1180 msgid "error reading from signal pipe" msgstr "błąd odczytu z potoku sygnałowego" -#: src/exec_common.c:73 +#: src/exec_common.c:166 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "nie udało się usunąć PRIV_PROC_EXEC z PRIV_LIMIT" -#: src/exec_pty.c:200 +#: src/exec_pty.c:188 msgid "unable to allocate pty" msgstr "nie udało się przydzielić pty" -#: src/exec_pty.c:780 src/exec_pty.c:789 src/exec_pty.c:797 -#: src/exec_pty.c:1300 src/exec_pty.c:1389 src/signal.c:137 src/tgetpass.c:218 +#: src/exec_pty.c:766 src/exec_pty.c:775 src/exec_pty.c:783 +#: src/exec_pty.c:1281 src/exec_pty.c:1370 src/signal.c:128 src/tgetpass.c:261 msgid "unable to create pipe" msgstr "nie udało się utworzyć potoku" -#: src/exec_pty.c:836 -msgid "unable to set terminal to raw mode" -msgstr "nie udało się przestawić terminala w tryb surowy" - -#: src/exec_pty.c:1232 +#: src/exec_pty.c:1213 msgid "error reading from pipe" msgstr "błąd odczytu z potoku" -#: src/exec_pty.c:1257 +#: src/exec_pty.c:1238 msgid "error reading from socketpair" msgstr "błąd odczytu z pary gniazd" -#: src/exec_pty.c:1266 +#: src/exec_pty.c:1247 #, c-format msgid "unexpected reply type on backchannel: %d" msgstr "nieoczekiwany typ odpowiedzi z kanału zwrotnego: %d" -#: src/exec_pty.c:1368 +#: src/exec_pty.c:1349 msgid "unable to set controlling tty" msgstr "nie udało się ustawić sterującego tty" -#: src/load_plugins.c:59 src/load_plugins.c:72 src/load_plugins.c:89 -#: src/load_plugins.c:142 src/load_plugins.c:148 src/load_plugins.c:154 -#: src/load_plugins.c:195 src/load_plugins.c:202 src/load_plugins.c:209 -#: src/load_plugins.c:215 +#: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 +#: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 +#: src/load_plugins.c:170 src/load_plugins.c:178 src/load_plugins.c:185 +#: src/load_plugins.c:191 #, c-format msgid "error in %s, line %d while loading plugin `%s'" msgstr "błąd w %s, w linii %d podczas wczytywania wtyczki `%s'" -#: src/load_plugins.c:91 +#: src/load_plugins.c:87 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" -#: src/load_plugins.c:150 +#: src/load_plugins.c:125 #, c-format msgid "%s must be owned by uid %d" msgstr "właścicielem %s musi być uid %d" -#: src/load_plugins.c:156 +#: src/load_plugins.c:131 #, c-format msgid "%s must be only be writable by owner" msgstr "prawo zapisu do %s może mieć tylko właściciel" -#: src/load_plugins.c:197 +#: src/load_plugins.c:172 #, c-format msgid "unable to load %s: %s" msgstr "nie udało się załadować %s: %s" -#: src/load_plugins.c:204 +#: src/load_plugins.c:180 #, c-format msgid "unable to find symbol `%s' in %s" msgstr "nie udało się odnaleźć symbolu `%s' w %s" -#: src/load_plugins.c:211 +#: src/load_plugins.c:187 #, c-format msgid "unknown policy type %d found in %s" msgstr "nieznany typ polityki %d napotkany w %s" -#: src/load_plugins.c:217 +#: src/load_plugins.c:193 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "niezgodna główna wersja polityki %d (zamiast oczekiwanej %d) napotkana w %s" -#: src/load_plugins.c:226 +#: src/load_plugins.c:202 #, c-format msgid "ignoring policy plugin `%s' in %s, line %d" msgstr "zignorowano wtyczkę polityki `%s' w %s, w linii %d" -#: src/load_plugins.c:228 +#: src/load_plugins.c:204 msgid "only a single policy plugin may be specified" msgstr "może być podana tylko jedna wtyczka polityki" -#: src/load_plugins.c:231 +#: src/load_plugins.c:207 #, c-format msgid "ignoring duplicate policy plugin `%s' in %s, line %d" msgstr "zignotowano powtórzoną wtyczkę polityki `%s' w %s, w linii %d" -#: src/load_plugins.c:249 +#: src/load_plugins.c:228 #, c-format msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" msgstr "zignotowano powtórzoną wtyczkę we/wy `%s' w %s, w linii %d" -#: src/load_plugins.c:338 +#: src/load_plugins.c:331 #, 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:236 -msgid "unable to open socket" -msgstr "nie udało się otworzyć gniazda" +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:476 +#, c-format +msgid "internal error, %s overflow" +msgstr "błąd wewnętrzny, przepełnienie %s" -#: src/parse_args.c:241 +#: src/parse_args.c:239 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:403 +#: src/parse_args.c:406 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:407 +#: src/parse_args.c:410 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:417 +#: src/parse_args.c:420 msgid "the `-E' option is not valid in edit mode" msgstr "opcja `-E' nie jest poprawna w trybie edycji" -#: src/parse_args.c:419 +#: src/parse_args.c:422 msgid "you may not specify environment variables in edit mode" msgstr "w trybie edycji nie można przekazywać zmiennych środowiskowych" -#: src/parse_args.c:427 +#: src/parse_args.c:430 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:431 +#: src/parse_args.c:434 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:497 +#: src/parse_args.c:504 msgid "sudoedit is not supported on this platform" msgstr "sudoedit nie jest obsługiwane na tej platformie" -#: src/parse_args.c:570 +#: src/parse_args.c:577 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:584 +#: src/parse_args.c:591 #, c-format msgid "" "%s - edit files as another user\n" @@ -314,7 +329,7 @@ "%s - modyfikowanie plików jako inny użytkownik\n" "\n" -#: src/parse_args.c:586 +#: src/parse_args.c:593 #, c-format msgid "" "%s - execute a command as another user\n" @@ -323,7 +338,7 @@ "%s - wykonywanie poleceń jako inny użytkownik\n" "\n" -#: src/parse_args.c:591 +#: src/parse_args.c:598 #, c-format msgid "" "\n" @@ -332,479 +347,506 @@ "\n" "Opcje:\n" -#: src/parse_args.c:593 +#: src/parse_args.c:600 msgid "use a helper program for password prompting" msgstr "użycie programu pomocniczego do pytań o hasło" -#: src/parse_args.c:596 +#: src/parse_args.c:603 msgid "use specified BSD authentication type" msgstr "użycie podanego rodzaju uwierzytelnienia BSD" -#: src/parse_args.c:599 +#: src/parse_args.c:606 msgid "run command in the background" msgstr "uruchomienie polecenia w tle" -#: src/parse_args.c:601 +#: src/parse_args.c:608 msgid "close all file descriptors >= num" msgstr "zamknięcie wszystkich deskryptorów >= fd" -#: src/parse_args.c:604 +#: src/parse_args.c:611 msgid "run command with the specified BSD login class" msgstr "uruchomienie polecenia z podaną klasą logowania BSD" -#: src/parse_args.c:607 +#: src/parse_args.c:614 msgid "preserve user environment when running command" msgstr "zachowanie środowiska użytkownika przy uruchamianiu polecenia" -#: src/parse_args.c:609 +#: src/parse_args.c:616 msgid "edit files instead of running a command" msgstr "modyfikowanie plików zamiast uruchomienia polecenia" -#: src/parse_args.c:611 +#: src/parse_args.c:618 msgid "run command as the specified group name or ID" msgstr "wywołanie polecenia jako określona grupa lub ID" -#: src/parse_args.c:613 +#: src/parse_args.c:620 msgid "set HOME variable to target user's home dir" msgstr "ustawienie zmiennej HOME na katalog domowy użytkownika docelowego" -#: src/parse_args.c:615 +#: src/parse_args.c:622 msgid "display help message and exit" msgstr "wyświetlenie opisu i zakończenie" -#: src/parse_args.c:617 +#: src/parse_args.c:624 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:619 +#: src/parse_args.c:626 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:621 +#: src/parse_args.c:628 msgid "remove timestamp file completely" msgstr "całkowite usunięcie pliku znacznika czasu" -#: src/parse_args.c:623 +#: src/parse_args.c:630 msgid "invalidate timestamp file" msgstr "unieważnienie pliku znacznika czasu" -#: src/parse_args.c:625 +#: src/parse_args.c:632 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:627 +#: src/parse_args.c:634 msgid "non-interactive mode, no prompts are used" msgstr "tryb nieinteraktywny, bez pytań" -#: src/parse_args.c:629 +#: src/parse_args.c:636 msgid "preserve group vector instead of setting to target's" msgstr "zachowanie wektora grup zamiast ustawiania docelowych" -#: src/parse_args.c:631 +#: src/parse_args.c:638 msgid "use the specified password prompt" msgstr "użycie podanego pytania o hasło" -#: src/parse_args.c:634 +#: src/parse_args.c:641 msgid "create SELinux security context with specified role" msgstr "utworzenie kontekstu bezpieczeństwa SELinuksa z podaną rolą" -#: src/parse_args.c:637 +#: src/parse_args.c:644 msgid "read password from standard input" msgstr "odczyt hasła ze standardowego wejścia" -#: src/parse_args.c:639 +#: src/parse_args.c:646 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:642 +#: src/parse_args.c:649 msgid "create SELinux security context with specified type" msgstr "utworzenie kontekstu bezpieczeństwa SELinuksa z podanym typem" -#: src/parse_args.c:645 +#: src/parse_args.c:652 msgid "in list mode, display privileges for user" msgstr "w trybie listy - wyświetlenie uprawnień użytkownika" -#: src/parse_args.c:647 +#: src/parse_args.c:654 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:649 +#: src/parse_args.c:656 msgid "display version information and exit" msgstr "wyświetlenie informacji o wersji i zakończenie" -#: src/parse_args.c:651 +#: src/parse_args.c:658 msgid "update user's timestamp without running a command" msgstr "uaktualnienie znacznika czasu użytkownika bez uruchamiania polecenia" -#: src/parse_args.c:653 +#: src/parse_args.c:660 msgid "stop processing command line arguments" msgstr "zakończenie przetwarzania argumentów linii poleceń" -#: src/selinux.c:77 +#: src/selinux.c:78 msgid "unable to open audit system" msgstr "nie udało się otworzyć systemu audytu" -#: src/selinux.c:85 +#: src/selinux.c:88 msgid "unable to send audit message" msgstr "nie udało się wysłać komunikatu audytowego" -#: src/selinux.c:113 +#: src/selinux.c:116 #, c-format msgid "unable to fgetfilecon %s" msgstr "nie udało się wykonać fgetfilecon %s" -#: src/selinux.c:118 +#: src/selinux.c:121 #, c-format msgid "%s changed labels" msgstr "zmienionych etykiet: %s" -#: src/selinux.c:123 +#: src/selinux.c:126 #, c-format msgid "unable to restore context for %s" msgstr "nie udało się przywrócić kontekstu %s" -#: src/selinux.c:163 +#: src/selinux.c:166 #, c-format msgid "unable to open %s, not relabeling tty" msgstr "nie udało się otworzyć %s, bez zmiany etykiety tty" -#: src/selinux.c:172 +#: src/selinux.c:175 msgid "unable to get current tty context, not relabeling tty" msgstr "nie udało się uzyskać bieżącego kontekstu tty, bez zmiany etykiety tty" -#: src/selinux.c:179 +#: src/selinux.c:182 msgid "unable to get new tty context, not relabeling tty" msgstr "nie udało się uzyskać nowego kontekstu tty, bez zmiany etykiety tty" -#: src/selinux.c:186 +#: src/selinux.c:189 msgid "unable to set new tty context" msgstr "nie udało się ustawić nowego kontekstu tty" -#: src/selinux.c:252 +#: src/selinux.c:255 #, c-format msgid "you must specify a role for type %s" msgstr "trzeba podać rolę dla typu %s" -#: src/selinux.c:258 +#: src/selinux.c:261 #, c-format msgid "unable to get default type for role %s" msgstr "nie udało się uzyskać domyślnego typu dla roli %s" -#: src/selinux.c:276 +#: src/selinux.c:279 #, c-format msgid "failed to set new role %s" msgstr "nie udało się ustawić nowej roli %s" -#: src/selinux.c:280 +#: src/selinux.c:283 #, c-format msgid "failed to set new type %s" msgstr "nie udało się ustawić nowego typu %s" -#: src/selinux.c:289 +#: src/selinux.c:295 #, c-format msgid "%s is not a valid context" msgstr "%s nie jest poprawnym kontekstem" -#: src/selinux.c:324 +#: src/selinux.c:330 msgid "failed to get old_context" msgstr "nie udało się uzyskać starego kontekstu" -#: src/selinux.c:330 +#: src/selinux.c:336 msgid "unable to determine enforcing mode." msgstr "nie udało się określić trybu wymuszenia." -#: src/selinux.c:347 +#: src/selinux.c:353 #, c-format msgid "unable to set tty context to %s" msgstr "nie udało się ustawić kontekstu tty na %s" -#: src/selinux.c:386 +#: src/selinux.c:392 #, c-format msgid "unable to set exec context to %s" msgstr "nie udało się ustawić kontekstu wykonywania na %s" -#: src/selinux.c:393 +#: src/selinux.c:399 #, c-format msgid "unable to set key creation context to %s" msgstr "nie udało się ustawić kontekstu tworzenia klucza na %s" -#: src/sesh.c:80 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "wymagany jest przynajmniej jeden argument" -#: src/sesh.c:109 +#: src/sesh.c:106 +#, c-format +msgid "invalid file descriptor number: %s" +msgstr "błędny numer deskryptora pliku: %s" + +#: 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" -#: src/sesh.c:114 src/sudo.c:1186 +#: src/sesh.c:125 src/sudo.c:1274 #, c-format msgid "unable to execute %s" msgstr "nie udało się wykonać %s" -#: src/signal.c:77 +#: src/signal.c:68 #, c-format msgid "unable to save handler for signal %d" msgstr "nie udało się zapisać procedury obsługi dla sygnału %d" -#: src/solaris.c:88 +#: src/solaris.c:76 msgid "resource control limit has been reached" msgstr "osiągnięto limit kontroli zasobów" -#: src/solaris.c:91 +#: src/solaris.c:79 #, c-format msgid "user \"%s\" is not a member of project \"%s\"" msgstr "użytkownik \"%s\" nie jest członkiem projektu \"%s\"" -#: src/solaris.c:95 +#: src/solaris.c:83 msgid "the invoking task is final" msgstr "zadanie uruchamiające jest ostatnim" -#: src/solaris.c:98 +#: src/solaris.c:86 #, c-format msgid "could not join project \"%s\"" msgstr "nie udało się dołączyć do projektu \"%s\"" -#: src/solaris.c:103 +#: src/solaris.c:91 #, c-format msgid "no resource pool accepting default bindings exists for project \"%s\"" msgstr "nie istnieje pula zasobów akceptująca domyślne przypisania dla projektu \"%s\"" -#: src/solaris.c:107 +#: src/solaris.c:95 #, c-format msgid "specified resource pool does not exist for project \"%s\"" msgstr "podana pula zasobów nie istnieje w projekcie \"%s\"" -#: src/solaris.c:111 +#: src/solaris.c:99 #, c-format msgid "could not bind to default resource pool for project \"%s\"" msgstr "nie można przypisać do domyślnej puli zasobów w projekcie \"%s\"" -#: src/solaris.c:117 +#: src/solaris.c:105 #, c-format msgid "setproject failed for project \"%s\"" msgstr "setproject dla projektu \"%s\" nie powiodło się" -#: src/solaris.c:119 +#: src/solaris.c:107 #, c-format 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:209 +#: src/sudo.c:212 #, c-format msgid "Sudo version %s\n" msgstr "Sudo wersja %s\n" -#: src/sudo.c:211 +#: src/sudo.c:214 #, c-format msgid "Configure options: %s\n" msgstr "Opcje konfiguracji: %s\n" -#: src/sudo.c:216 +#: src/sudo.c:222 msgid "fatal error, unable to load plugins" msgstr "błąd krytyczny, nie udało się załadować wtyczek" -#: src/sudo.c:224 +#: src/sudo.c:230 msgid "unable to initialize policy plugin" msgstr "nie udało się zainicjować wtyczki polityki" -#: src/sudo.c:280 +#: src/sudo.c:276 +msgid "plugin did not return a command to execute" +msgstr "wtyczka nie zwróciła polecenia do wykonania" + +#: src/sudo.c:292 #, c-format msgid "error initializing I/O plugin %s" msgstr "błąd inicjalizacji wtyczki we/wy %s" -#: src/sudo.c:306 +#: src/sudo.c:318 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "nieoczekiwany tryb sudo 0x%x" -#: src/sudo.c:426 +#: src/sudo.c:461 msgid "unable to get group vector" msgstr "nie udało się uzyskać wektora grup" -#: src/sudo.c:478 +#: src/sudo.c:522 #, c-format msgid "unknown uid %u: who are you?" msgstr "nieznany uid %u: kim jesteś?" -#: src/sudo.c:785 +#: src/sudo.c:859 #, 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:788 +#: src/sudo.c:862 #, 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:794 +#: src/sudo.c:868 #, 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:923 +#: src/sudo.c:999 #, c-format msgid "unknown login class %s" msgstr "nieznana klasa logowania %s" -#: src/sudo.c:936 +#: src/sudo.c:1012 msgid "unable to set user context" msgstr "nie udało się ustawić kontekstu użytkownika" -#: src/sudo.c:950 +#: src/sudo.c:1026 msgid "unable to set supplementary group IDs" msgstr "nie udało się ustawić ID dodatkowych grup" -#: src/sudo.c:957 +#: src/sudo.c:1033 #, 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:963 +#: src/sudo.c:1039 #, 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:970 +#: src/sudo.c:1046 msgid "unable to set process priority" msgstr "nie udało się ustawić priorytetu procesu" -#: src/sudo.c:978 +#: src/sudo.c:1054 #, c-format msgid "unable to change root to %s" msgstr "nie udało się zmienić katalogu głównego na %s" -#: src/sudo.c:991 src/sudo.c:997 src/sudo.c:1003 +#: src/sudo.c:1067 src/sudo.c:1073 src/sudo.c:1080 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "nie udało się zmienić uid-ów, aby działać jako (%u, %u)" -#: src/sudo.c:1021 +#: src/sudo.c:1098 #, c-format msgid "unable to change directory to %s" msgstr "nie udało się zmienić katalogu na %s" -#: src/sudo.c:1082 +#: src/sudo.c:1156 #, c-format msgid "unexpected child termination condition: %d" msgstr "nieoczekiwane zakończenie procesu potomnego: %d" -#: src/sudo.c:1214 +#: src/sudo.c:1302 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "wtyczka polityki %s nie zawiera metody `check_policy'" -#: src/sudo.c:1232 +#: src/sudo.c:1320 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "wtyczka polityki %s nie obsługuje wypisywania uprawnień" -#: src/sudo.c:1249 +#: src/sudo.c:1337 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "wtyczka polityki %s nie obsługuje opcji -v" -#: src/sudo.c:1264 +#: src/sudo.c:1352 #, 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_edit.c:203 src/sudo_edit.c:294 +#: src/sudo_edit.c:181 +msgid "unable to restore current working directory" +msgstr "nie udało się odtworzyć bieżącego kartalogu roboczego" + +#: src/sudo_edit.c:526 src/sudo_edit.c:630 #, c-format msgid "%s: not a regular file" msgstr "%s: nie jest zwykłym plikiem" -#: src/sudo_edit.c:230 src/sudo_edit.c:332 +#: src/sudo_edit.c:533 +#, c-format +msgid "%s: editing symbolic links is not permitted" +msgstr "%s: edycja dowiązań symbolicznych nie jest dozwolona" + +#: src/sudo_edit.c:536 +#, c-format +msgid "%s: editing files in a writable directory is not permitted" +msgstr "%s: edycja plików w katalogu zapisywalnym nie jest dozwolona" + +#: src/sudo_edit.c:567 src/sudo_edit.c:669 #, c-format msgid "%s: short write" msgstr "%s: skrócony zapis" -#: src/sudo_edit.c:295 +#: src/sudo_edit.c:631 #, c-format msgid "%s left unmodified" msgstr "pozostawiono bez zmian: %s" -#: src/sudo_edit.c:308 src/sudo_edit.c:483 +#: src/sudo_edit.c:644 src/sudo_edit.c:830 #, c-format msgid "%s unchanged" msgstr "nie zmieniono: %s" -#: src/sudo_edit.c:321 src/sudo_edit.c:343 +#: src/sudo_edit.c:658 src/sudo_edit.c:680 #, c-format msgid "unable to write to %s" msgstr "nie udało się zapisać do %s" -#: src/sudo_edit.c:322 src/sudo_edit.c:341 src/sudo_edit.c:344 -#: src/sudo_edit.c:508 src/sudo_edit.c:512 +#: src/sudo_edit.c:659 src/sudo_edit.c:678 src/sudo_edit.c:681 +#: src/sudo_edit.c:855 src/sudo_edit.c:859 #, c-format msgid "contents of edit session left in %s" msgstr "zawartość sesji edycji pozostawiono w %s" -#: src/sudo_edit.c:340 +#: src/sudo_edit.c:677 msgid "unable to read temporary file" msgstr "nie udało się odczytać pliku tymczasowego" -#: src/sudo_edit.c:417 +#: src/sudo_edit.c:760 msgid "sesh: internal error: odd number of paths" msgstr "sesh: błąd wewnętrzny: nieparzysta liczba ścieżek" -#: src/sudo_edit.c:419 +#: src/sudo_edit.c:762 msgid "sesh: unable to create temporary files" msgstr "sesh: nie udało się utworzyć plików tymczasowych" -#: src/sudo_edit.c:421 src/sudo_edit.c:515 +#: src/sudo_edit.c:764 src/sudo_edit.c:862 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: nieznany błąd %d" -#: src/sudo_edit.c:507 +#: src/sudo_edit.c:854 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:511 +#: src/sudo_edit.c:858 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:554 +#: src/sudo_edit.c:901 #, 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:571 +#: src/sudo_edit.c:918 msgid "plugin error: missing file list for sudoedit" msgstr "błąd wtyczki: brak listy plików dla sudoedit" -#: src/tgetpass.c:90 +#: src/sudo_edit.c:959 src/sudo_edit.c:972 +msgid "unable to read the clock" +msgstr "nie udało się odczytać zegara" + +#: src/tgetpass.c:107 msgid "no tty present and no askpass program specified" msgstr "brak tty i nie podano programu pytającego o hasło" -#: src/tgetpass.c:99 +#: src/tgetpass.c:116 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:232 +#: src/tgetpass.c:276 #, c-format msgid "unable to set gid to %u" msgstr "nie udało się ustawić gid-a na %u" -#: src/tgetpass.c:236 +#: src/tgetpass.c:280 #, c-format msgid "unable to set uid to %u" msgstr "nie udało się ustawić uid-a na %u" -#: src/tgetpass.c:241 +#: src/tgetpass.c:285 #, c-format msgid "unable to run %s" msgstr "nie udało się uruchomić %s" -#: src/utmp.c:278 +#: src/utmp.c:266 msgid "unable to save stdin" msgstr "nie udało się zapisać standardowego wejścia" -#: src/utmp.c:280 +#: src/utmp.c:268 msgid "unable to dup2 stdin" msgstr "nie udało się wykonać dup2 na standardowym wejściu" -#: src/utmp.c:283 +#: src/utmp.c:271 msgid "unable to restore stdin" msgstr "nie udało się przywrócić standardowego wejścia" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/po/pt_BR.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/po/pt_BR.mo differ diff -Nru sudo-1.8.12/po/pt_BR.po sudo-1.8.16/po/pt_BR.po --- sudo-1.8.12/po/pt_BR.po 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/po/pt_BR.po 2016-03-17 16:13:10.000000000 +0000 @@ -1,314 +1,329 @@ # Brazilian Portuguese translation of sudo. # This file is distributed under the same license as the sudo package. -# Copyright (C) 2014 Free Software Foundation, Inc. -# Rafael Ferreira , 2013, 2014. +# Copyright (C) 2016 Free Software Foundation, Inc. +# Rafael Fontenelle , 2013, 2014, 2015, 2016. # msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.12b1\n" -"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-10-27 12:35-0600\n" -"PO-Revision-Date: 2014-11-10 12:10-0300\n" -"Last-Translator: Rafael Ferreira \n" +"Project-Id-Version: sudo 1.8.16b1\n" +"Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" +"POT-Creation-Date: 2016-02-19 15:48-0700\n" +"PO-Revision-Date: 2016-02-25 15:25-0200\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" -"X-Generator: Poedit 1.6.10\n" +"X-Generator: Poedit 1.8.7\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: lib/util/aix.c:92 lib/util/aix.c:151 +#: lib/util/aix.c:85 lib/util/aix.c:164 msgid "unable to open userdb" msgstr "não foi possível abrir o userdb" -#: lib/util/aix.c:156 +#: lib/util/aix.c:219 #, c-format msgid "unable to switch to registry \"%s\" for %s" msgstr "não foi possível alterar para registro \"%s\" para %s" -#: lib/util/aix.c:175 +#: lib/util/aix.c:244 msgid "unable to restore registry" msgstr "não foi possível restaurar registro" -#: lib/util/alloc.c:68 lib/util/alloc.c:85 lib/util/alloc.c:106 -#: lib/util/alloc.c:128 lib/util/alloc.c:147 lib/util/alloc.c:170 -msgid "internal error, tried allocate zero bytes" -msgstr "erro interno, tentou alocar zero bytes" - -#: lib/util/alloc.c:87 lib/util/alloc.c:109 lib/util/alloc.c:149 -#: lib/util/alloc.c:172 src/net_ifs.c:174 src/net_ifs.c:191 src/net_ifs.c:325 -#, c-format -msgid "internal error, %s overflow" -msgstr "erro interno, estouro de pilha de %s" - -#: lib/util/gidlist.c:78 src/load_plugins.c:61 src/load_plugins.c:74 -#: src/sudo.c:572 src/sudo.c:591 src/sudo.c:618 src/sudo.c:627 src/sudo.c:636 -#: src/sudo.c:653 src/sudo.c:700 src/sudo.c:710 +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/gidlist.c:74 +#: lib/util/sudo_conf.c:207 lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 +#: lib/util/sudo_conf.c:569 src/conversation.c:75 src/exec.c:863 +#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 +#: src/exec_pty.c:684 src/exec_pty.c:692 src/load_plugins.c:52 +#: src/load_plugins.c:65 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:655 src/sudo.c:665 src/sudo.c:685 src/sudo.c:704 src/sudo.c:713 +#: src/sudo.c:722 src/sudo.c:739 src/sudo.c:780 src/sudo.c:790 src/sudo.c:810 +#: src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 src/sudo.c:1492 +#: src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/util/strsignal.c:50 +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/sudo_conf.c:208 +#: lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 lib/util/sudo_conf.c:569 +#: src/conversation.c:76 src/exec.c:863 src/exec_common.c:107 +#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:684 +#: src/exec_pty.c:692 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:810 src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 +#: src/sudo.c:1492 src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 +msgid "unable to allocate memory" +msgstr "não foi possível alocar memória" + +#: lib/util/strsignal.c:48 msgid "Unknown signal" msgstr "Sinal desconhecido" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:65 lib/util/strtonum.c:183 +#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:48 +#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "valor inválido" -#: lib/util/strtoid.c:90 lib/util/strtoid.c:118 lib/util/strtomode.c:61 -#: lib/util/strtonum.c:68 lib/util/strtonum.c:195 +#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:54 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "valor grande demais" -#: lib/util/strtoid.c:96 lib/util/strtomode.c:61 lib/util/strtonum.c:68 -#: lib/util/strtonum.c:189 +#: lib/util/strtoid.c:89 lib/util/strtomode.c:54 lib/util/strtonum.c:61 +#: lib/util/strtonum.c:182 msgid "value too small" msgstr "valor pequeno demais" -#: lib/util/sudo_conf.c:181 +#: lib/util/sudo_conf.c:223 #, c-format msgid "invalid Path value `%s' in %s, line %u" msgstr "Path inválido com valor \"%s\" em %s, linha %u" -#: lib/util/sudo_conf.c:335 lib/util/sudo_conf.c:388 +#: lib/util/sudo_conf.c:389 lib/util/sudo_conf.c:442 #, c-format msgid "invalid value for %s `%s' in %s, line %u" msgstr "Valor inválido para %s \"%s\" em %s, linha %u" -#: lib/util/sudo_conf.c:356 +#: lib/util/sudo_conf.c:410 #, c-format msgid "unsupported group source `%s' in %s, line %u" msgstr "fonte de grupo sem suporte \"%s\" em %s, linha %u" -#: lib/util/sudo_conf.c:372 +#: lib/util/sudo_conf.c:426 #, c-format msgid "invalid max groups `%s' in %s, line %u" msgstr "máximo de grupos inválido \"%s\" em %s, linha %u" -#: lib/util/sudo_conf.c:522 +#: lib/util/sudo_conf.c:585 #, c-format msgid "unable to stat %s" msgstr "não foi possível obter o estado de %s" -#: lib/util/sudo_conf.c:525 +#: lib/util/sudo_conf.c:588 #, c-format msgid "%s is not a regular file" msgstr "%s não é um arquivo comum" -#: lib/util/sudo_conf.c:528 +#: lib/util/sudo_conf.c:591 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s tem como dono o uid %u, deveria ser %u" -#: lib/util/sudo_conf.c:532 +#: lib/util/sudo_conf.c:595 #, c-format msgid "%s is world writable" msgstr "%s é gravável globalmente" -#: lib/util/sudo_conf.c:535 +#: lib/util/sudo_conf.c:598 #, c-format msgid "%s is group writable" msgstr "%s é gravável pelo grupo" -#: lib/util/sudo_conf.c:545 src/selinux.c:196 src/selinux.c:209 src/sudo.c:341 +#: lib/util/sudo_conf.c:608 src/selinux.c:199 src/selinux.c:212 src/sudo.c:367 #, c-format msgid "unable to open %s" msgstr "não foi possível abrir %s" -#: src/exec.c:123 src/exec.c:128 src/exec.c:423 src/exec.c:425 src/exec.c:427 -#: src/exec.c:429 src/exec.c:431 src/exec.c:433 src/exec.c:436 src/exec.c:453 -#: src/exec.c:455 src/exec.c:457 src/exec.c:605 src/exec.c:800 -#: src/exec_pty.c:480 src/exec_pty.c:736 src/exec_pty.c:806 src/exec_pty.c:808 -#: src/exec_pty.c:820 src/exec_pty.c:1308 src/exec_pty.c:1310 -#: src/exec_pty.c:1315 src/exec_pty.c:1317 src/exec_pty.c:1331 -#: src/exec_pty.c:1342 src/exec_pty.c:1344 src/exec_pty.c:1346 -#: src/exec_pty.c:1348 src/exec_pty.c:1350 src/exec_pty.c:1352 -#: src/exec_pty.c:1354 src/signal.c:156 +#: src/exec.c:114 src/exec.c:116 src/exec.c:121 src/exec.c:409 src/exec.c:411 +#: src/exec.c:413 src/exec.c:415 src/exec.c:417 src/exec.c:419 src/exec.c:422 +#: src/exec.c:438 src/exec.c:440 src/exec.c:595 src/exec.c:790 +#: src/exec_pty.c:466 src/exec_pty.c:722 src/exec_pty.c:792 src/exec_pty.c:794 +#: src/exec_pty.c:806 src/exec_pty.c:808 src/exec_pty.c:1289 +#: src/exec_pty.c:1291 src/exec_pty.c:1296 src/exec_pty.c:1298 +#: src/exec_pty.c:1312 src/exec_pty.c:1323 src/exec_pty.c:1325 +#: src/exec_pty.c:1327 src/exec_pty.c:1329 src/exec_pty.c:1331 +#: src/exec_pty.c:1333 src/exec_pty.c:1335 src/signal.c:147 #, c-format msgid "unable to set handler for signal %d" msgstr "não foi possível definir manipulador para sinal %d" -#: src/exec.c:135 src/exec_pty.c:845 -msgid "policy plugin failed session initialization" -msgstr "plug-in de política falhou ao inicializar da sessão" - -#: src/exec.c:140 src/exec_pty.c:861 src/exec_pty.c:1392 src/tgetpass.c:221 +#: src/exec.c:126 src/exec_pty.c:838 src/exec_pty.c:1373 src/tgetpass.c:265 msgid "unable to fork" msgstr "não foi possível fazer fork" -#: src/exec.c:318 src/exec.c:326 src/exec.c:877 src/exec_pty.c:604 -#: src/exec_pty.c:609 src/exec_pty.c:667 src/exec_pty.c:674 src/exec_pty.c:965 -#: src/exec_pty.c:975 src/exec_pty.c:1020 src/exec_pty.c:1027 -#: src/exec_pty.c:1457 src/exec_pty.c:1464 src/exec_pty.c:1471 +#: src/exec.c:304 src/exec.c:312 src/exec.c:868 src/exec_pty.c:604 +#: src/exec_pty.c:611 src/exec_pty.c:654 src/exec_pty.c:659 src/exec_pty.c:946 +#: src/exec_pty.c:956 src/exec_pty.c:1001 src/exec_pty.c:1008 +#: src/exec_pty.c:1438 src/exec_pty.c:1445 src/exec_pty.c:1452 msgid "unable to add event to queue" msgstr "não foi possível adicionar um evento à fila" -#: src/exec.c:406 +#: src/exec.c:392 msgid "unable to create sockets" msgstr "não foi possível criar soquetes" -#: src/exec.c:502 +#: src/exec.c:447 +msgid "policy plugin failed session initialization" +msgstr "plug-in de política falhou ao inicializar da sessão" + +#: src/exec.c:492 msgid "error in event loop" msgstr "erro em loop de evento" -#: src/exec.c:520 +#: src/exec.c:510 msgid "unable to restore tty label" msgstr "não foi possível restaurar rótulo de tty" -#: src/exec.c:613 src/exec_pty.c:514 src/signal.c:95 +#: src/exec.c:603 src/exec_pty.c:498 src/signal.c:86 #, c-format msgid "unable to restore handler for signal %d" msgstr "não foi possível restaurar manipulador para sinal %d" -#: src/exec.c:731 src/exec_pty.c:1199 +#: src/exec.c:721 src/exec_pty.c:1180 msgid "error reading from signal pipe" msgstr "erro ao ler do sinal de redirecionamento (pipe)" -#: src/exec_common.c:73 +#: src/exec_common.c:166 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "não foi possível remover PRIV_PROC_EXEC de PRIV_LIMIT" -#: src/exec_pty.c:200 +#: src/exec_pty.c:188 msgid "unable to allocate pty" msgstr "não foi possível alocar pty" -#: src/exec_pty.c:780 src/exec_pty.c:789 src/exec_pty.c:797 -#: src/exec_pty.c:1300 src/exec_pty.c:1389 src/signal.c:137 src/tgetpass.c:218 +#: src/exec_pty.c:766 src/exec_pty.c:775 src/exec_pty.c:783 +#: src/exec_pty.c:1281 src/exec_pty.c:1370 src/signal.c:128 src/tgetpass.c:261 msgid "unable to create pipe" msgstr "não foi possível criar um redirecionamento (pipe)" -#: src/exec_pty.c:836 -msgid "unable to set terminal to raw mode" -msgstr "não foi possível definir o terminal para modo raw" - -#: src/exec_pty.c:1232 +#: src/exec_pty.c:1213 msgid "error reading from pipe" msgstr "erro ao ler de redirecionamento (pipe)" -#: src/exec_pty.c:1257 +#: src/exec_pty.c:1238 msgid "error reading from socketpair" msgstr "erro ao ler do par de soquetes" -#: src/exec_pty.c:1266 +#: src/exec_pty.c:1247 #, c-format msgid "unexpected reply type on backchannel: %d" msgstr "tipo de resposta inesperada no canal de retorno: %d" -#: src/exec_pty.c:1368 +#: src/exec_pty.c:1349 msgid "unable to set controlling tty" msgstr "não foi possível definir tty de controle" -#: src/load_plugins.c:59 src/load_plugins.c:72 src/load_plugins.c:89 -#: src/load_plugins.c:142 src/load_plugins.c:148 src/load_plugins.c:154 -#: src/load_plugins.c:195 src/load_plugins.c:202 src/load_plugins.c:209 -#: src/load_plugins.c:215 +#: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 +#: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 +#: src/load_plugins.c:170 src/load_plugins.c:178 src/load_plugins.c:185 +#: src/load_plugins.c:191 #, c-format msgid "error in %s, line %d while loading plugin `%s'" msgstr "erro em %s, linha %d ao carregar plug-in \"%s\"" -#: src/load_plugins.c:91 +#: src/load_plugins.c:87 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" -#: src/load_plugins.c:150 +#: src/load_plugins.c:125 #, c-format msgid "%s must be owned by uid %d" msgstr "%s deve ter como dono o uid %d" -#: src/load_plugins.c:156 +#: src/load_plugins.c:131 #, c-format msgid "%s must be only be writable by owner" msgstr "%s deve ser gravável apenas pelo dono" -#: src/load_plugins.c:197 +#: src/load_plugins.c:172 #, c-format msgid "unable to load %s: %s" msgstr "não foi possível carregar %s: %s" -#: src/load_plugins.c:204 +#: src/load_plugins.c:180 #, c-format msgid "unable to find symbol `%s' in %s" msgstr "não foi possível localizar símbolo \"%s\" em %s" -#: src/load_plugins.c:211 +#: src/load_plugins.c:187 #, c-format msgid "unknown policy type %d found in %s" msgstr "tipo de política %d desconhecida localizada em %s" -#: src/load_plugins.c:217 +#: src/load_plugins.c:193 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "versão maior %d do plug-in incompatível (esperava %d) localizada em %s" -#: src/load_plugins.c:226 +#: src/load_plugins.c:202 #, c-format 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:228 +#: src/load_plugins.c:204 msgid "only a single policy plugin may be specified" msgstr "apenas um plug-in de política pode ser especificado" -#: src/load_plugins.c:231 +#: src/load_plugins.c:207 #, c-format msgid "ignoring duplicate policy plugin `%s' in %s, line %d" msgstr "ignorando plug-in de política duplicada \"%s\" em %s, linha %d" -#: src/load_plugins.c:249 +#: src/load_plugins.c:228 #, c-format msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" msgstr "ignorando plug-in de E/S \"%s\" duplicado em %s, linha %d" -#: src/load_plugins.c:338 +#: src/load_plugins.c:331 #, 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:236 -msgid "unable to open socket" -msgstr "não foi possível abrir soquete" +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:476 +#, c-format +msgid "internal error, %s overflow" +msgstr "erro interno, estouro de pilha de %s" -#: src/parse_args.c:241 +#: src/parse_args.c:239 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:403 +#: src/parse_args.c:406 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:407 +#: src/parse_args.c:410 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:417 +#: src/parse_args.c:420 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:419 +#: src/parse_args.c:422 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:427 +#: src/parse_args.c:430 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:431 +#: src/parse_args.c:434 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:497 +#: src/parse_args.c:504 msgid "sudoedit is not supported on this platform" msgstr "não há suporte a sudoedit nesta plataforma" -#: src/parse_args.c:570 +#: src/parse_args.c:577 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:584 +#: src/parse_args.c:591 #, c-format msgid "" "%s - edit files as another user\n" @@ -317,7 +332,7 @@ "%s - edita arquivos como outro usuário\n" "\n" -#: src/parse_args.c:586 +#: src/parse_args.c:593 #, c-format msgid "" "%s - execute a command as another user\n" @@ -327,7 +342,7 @@ "\n" # Deixei minúsculo para seguir o padrão das demais linhas do "sudo -h" -#: src/parse_args.c:591 +#: src/parse_args.c:598 #, c-format msgid "" "\n" @@ -336,483 +351,519 @@ "\n" "opções:\n" -#: src/parse_args.c:593 +#: src/parse_args.c:600 msgid "use a helper program for password prompting" msgstr "usa um programa auxiliar para pedir senha" -#: src/parse_args.c:596 +#: src/parse_args.c:603 msgid "use specified BSD authentication type" msgstr "usa o tipo de autenticação BSD especificado" -#: src/parse_args.c:599 +#: src/parse_args.c:606 msgid "run command in the background" msgstr "executa um comando em plano de fundo" -#: src/parse_args.c:601 +#: src/parse_args.c:608 msgid "close all file descriptors >= num" msgstr "fecha todos os descritores, de arquivos, >= num" -#: src/parse_args.c:604 +#: src/parse_args.c:611 msgid "run command with the specified BSD login class" msgstr "executa um comando com uma classe de login especificada" -#: src/parse_args.c:607 +#: src/parse_args.c:614 msgid "preserve user environment when running command" msgstr "preserva um ambiente de usuário ao executar um comando" -#: src/parse_args.c:609 +#: src/parse_args.c:616 msgid "edit files instead of running a command" msgstr "edita arquivos em vez de executar um comando" -#: src/parse_args.c:611 +#: src/parse_args.c:618 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:613 +#: src/parse_args.c:620 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:615 +#: src/parse_args.c:622 msgid "display help message and exit" msgstr "exibe uma mensagem de ajuda e sai" -#: src/parse_args.c:617 +#: src/parse_args.c:624 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:619 +#: src/parse_args.c:626 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:621 +#: src/parse_args.c:628 msgid "remove timestamp file completely" msgstr "remove arquivo de marca de tempo completamente" -#: src/parse_args.c:623 +#: src/parse_args.c:630 msgid "invalidate timestamp file" msgstr "invalida arquivo de marca de tempo" -#: src/parse_args.c:625 +#: src/parse_args.c:632 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:627 +#: src/parse_args.c:634 msgid "non-interactive mode, no prompts are used" msgstr "modo não interativo, não pergunta para o usuário" -#: src/parse_args.c:629 +#: src/parse_args.c:636 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:631 +#: src/parse_args.c:638 msgid "use the specified password prompt" msgstr "usa a senha especificada" -#: src/parse_args.c:634 +#: src/parse_args.c:641 msgid "create SELinux security context with specified role" msgstr "cria um contexto de segurança SELinux com o papel especificado" -#: src/parse_args.c:637 +#: src/parse_args.c:644 msgid "read password from standard input" msgstr "lê a senha da entrada padrão" -#: src/parse_args.c:639 +#: src/parse_args.c:646 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:642 +#: src/parse_args.c:649 msgid "create SELinux security context with specified type" msgstr "cria um contexto de segurança SELinux com o tipo especificado" -#: src/parse_args.c:645 +#: src/parse_args.c:652 msgid "in list mode, display privileges for user" msgstr "no modo lista, exibe os privilégios por usuário" -#: src/parse_args.c:647 +#: src/parse_args.c:654 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:649 +#: src/parse_args.c:656 msgid "display version information and exit" msgstr "exibe as informações de versão e sai" -#: src/parse_args.c:651 +#: src/parse_args.c:658 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:653 +#: src/parse_args.c:660 msgid "stop processing command line arguments" msgstr "interrompe processamento de argumentos de linha de comando" -#: src/selinux.c:77 +#: src/selinux.c:78 msgid "unable to open audit system" msgstr "não foi possível abrir o sistema de auditoria" -#: src/selinux.c:85 +#: src/selinux.c:88 msgid "unable to send audit message" msgstr "não foi possível enviar mensagem de auditoria" -#: src/selinux.c:113 +#: src/selinux.c:116 #, c-format msgid "unable to fgetfilecon %s" msgstr "não foi possível fazer fgetfilecon de %s" -#: src/selinux.c:118 +#: src/selinux.c:121 #, c-format msgid "%s changed labels" msgstr "%s mudou de rótulo" -#: src/selinux.c:123 +#: src/selinux.c:126 #, c-format msgid "unable to restore context for %s" msgstr "não foi possível restaurar contexto de %s" -#: src/selinux.c:163 +#: src/selinux.c:166 #, c-format msgid "unable to open %s, not relabeling tty" msgstr "não foi possível abrir %s, não re-rotulando o tty" -#: src/selinux.c:172 +#: src/selinux.c:175 msgid "unable to get current tty context, not relabeling tty" msgstr "não foi possível obter contexto de tty atual, não re-rotulando o tty" -#: src/selinux.c:179 +#: src/selinux.c:182 msgid "unable to get new tty context, not relabeling tty" msgstr "não foi possível obter novo contexto de tty, não re-rotulando o tty" -#: src/selinux.c:186 +#: src/selinux.c:189 msgid "unable to set new tty context" msgstr "não foi possível definir um novo contexto de tty" -#: src/selinux.c:252 +#: src/selinux.c:255 #, c-format msgid "you must specify a role for type %s" msgstr "você deve especificar um papel para o tipo %s" -#: src/selinux.c:258 +#: src/selinux.c:261 #, c-format msgid "unable to get default type for role %s" msgstr "não foi possível obter tipo padrão para o papel %s" -#: src/selinux.c:276 +#: src/selinux.c:279 #, c-format msgid "failed to set new role %s" msgstr "falha ao definir novo papel %s" -#: src/selinux.c:280 +#: src/selinux.c:283 #, c-format msgid "failed to set new type %s" msgstr "falha ao definir novo tipo %s" -#: src/selinux.c:289 +#: src/selinux.c:295 #, c-format msgid "%s is not a valid context" msgstr "%s não é um contexto válido" -#: src/selinux.c:324 +#: src/selinux.c:330 msgid "failed to get old_context" msgstr "falha ao obter old_context" -#: src/selinux.c:330 +#: src/selinux.c:336 msgid "unable to determine enforcing mode." msgstr "não foi possível determinar modo de aplicação." -#: src/selinux.c:347 +#: src/selinux.c:353 #, c-format msgid "unable to set tty context to %s" msgstr "não foi possível definir contexto de tty de %s" -#: src/selinux.c:386 +#: src/selinux.c:392 #, c-format msgid "unable to set exec context to %s" msgstr "não foi possível definir contexto de exec de %s" -#: src/selinux.c:393 +#: src/selinux.c:399 #, c-format 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:80 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "requer ao menos um argumento" -#: src/sesh.c:109 +#: 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:120 #, c-format msgid "unable to run %s as a login shell" msgstr "não foi possível executar %s como shell de login" -#: src/sesh.c:114 src/sudo.c:1186 +#: src/sesh.c:125 src/sudo.c:1274 #, c-format msgid "unable to execute %s" msgstr "não foi possível executar %s" -#: src/signal.c:77 +#: src/signal.c:68 #, c-format msgid "unable to save handler for signal %d" msgstr "não foi possível salvar manipulador para sinal %d" -#: src/solaris.c:88 +#: src/solaris.c:76 msgid "resource control limit has been reached" msgstr "limite de controle de recurso foi atingido" -#: src/solaris.c:91 +#: src/solaris.c:79 #, c-format msgid "user \"%s\" is not a member of project \"%s\"" msgstr "usuário \"%s\" não é um membro do projeto \"%s\"" -#: src/solaris.c:95 +#: src/solaris.c:83 msgid "the invoking task is final" msgstr "a tarefa de chamada é final" -#: src/solaris.c:98 +#: src/solaris.c:86 #, c-format msgid "could not join project \"%s\"" msgstr "não foi possível participar do projeto \"%s\"" -#: src/solaris.c:103 +#: src/solaris.c:91 #, c-format msgid "no resource pool accepting default bindings exists for project \"%s\"" msgstr "nenhuma pool de recursos aceitando vinculações padrões existe para o projeto \"%s\"" -#: src/solaris.c:107 +#: src/solaris.c:95 #, c-format msgid "specified resource pool does not exist for project \"%s\"" msgstr "pool de recursos especificados não existe para o projeto \"%s\"" -#: src/solaris.c:111 +#: src/solaris.c:99 #, c-format msgid "could not bind to default resource pool for project \"%s\"" msgstr "não foi possível vincular ao pool de recursos padrão para o projeto \"%s\"" -#: src/solaris.c:117 +#: src/solaris.c:105 #, c-format msgid "setproject failed for project \"%s\"" msgstr "setproject falhou para o projeto \"%s\"" -#: src/solaris.c:119 +#: src/solaris.c:107 #, c-format 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:209 +#: src/sudo.c:212 #, c-format msgid "Sudo version %s\n" msgstr "Sudo versão %s\n" -#: src/sudo.c:211 +#: src/sudo.c:214 #, c-format msgid "Configure options: %s\n" msgstr "Opções de configuração: %s\n" -#: src/sudo.c:216 +#: src/sudo.c:222 msgid "fatal error, unable to load plugins" msgstr "erro fatal, não foi possível carregar os plug-ins" -#: src/sudo.c:224 +#: src/sudo.c:230 msgid "unable to initialize policy plugin" msgstr "não foi possível inicializar plug-in de política" -#: src/sudo.c:280 +#: src/sudo.c:276 +msgid "plugin did not return a command to execute" +msgstr "o plug-in não retornou um comando para ser executado" + +#: src/sudo.c:292 #, c-format msgid "error initializing I/O plugin %s" msgstr "erro ao inicializar o plug-in de E/S %s" -#: src/sudo.c:306 +#: src/sudo.c:318 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "modo de sudo inesperado 0x%x" -#: src/sudo.c:426 +#: src/sudo.c:461 msgid "unable to get group vector" msgstr "não foi possível obter vetor de grupos" -#: src/sudo.c:478 +#: src/sudo.c:522 #, c-format msgid "unknown uid %u: who are you?" msgstr "uid desconhecido %u: quem é você?" -#: src/sudo.c:785 +#: src/sudo.c:859 #, 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:788 +#: src/sudo.c:862 #, 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:794 +#: src/sudo.c:868 #, 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:923 +#: src/sudo.c:999 #, c-format msgid "unknown login class %s" msgstr "classe de login desconhecida %s" -#: src/sudo.c:936 +#: src/sudo.c:1012 msgid "unable to set user context" msgstr "não foi possível definir contexto de usuário" -#: src/sudo.c:950 +#: src/sudo.c:1026 msgid "unable to set supplementary group IDs" msgstr "não foi possível definir IDs de grupo suplementares" -#: src/sudo.c:957 +#: src/sudo.c:1033 #, 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:963 +#: src/sudo.c:1039 #, 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:970 +#: src/sudo.c:1046 msgid "unable to set process priority" msgstr "não foi possível definir prioridade do processo" -#: src/sudo.c:978 +#: src/sudo.c:1054 #, c-format msgid "unable to change root to %s" msgstr "não foi possível alterar a raiz para %s" -#: src/sudo.c:991 src/sudo.c:997 src/sudo.c:1003 +#: src/sudo.c:1067 src/sudo.c:1073 src/sudo.c:1080 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "não foi possível alterar para uid de \"runas\" (%u, %u)" -#: src/sudo.c:1021 +#: src/sudo.c:1098 #, c-format msgid "unable to change directory to %s" msgstr "não foi possível alterar diretório para %s" -#: src/sudo.c:1082 +#: src/sudo.c:1156 #, c-format msgid "unexpected child termination condition: %d" msgstr "condição inesperada de término de filho: %d" -#: src/sudo.c:1214 +#: src/sudo.c:1302 #, 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:1232 +#: src/sudo.c:1320 #, 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:1249 +#: src/sudo.c:1337 #, 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:1264 +#: src/sudo.c:1352 #, 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_edit.c:203 src/sudo_edit.c:294 +#: src/sudo_edit.c:181 +msgid "unable to restore current working directory" +msgstr "não foi possível restaurar o diretório de trabalho atual" + +#: src/sudo_edit.c:526 src/sudo_edit.c:630 #, c-format msgid "%s: not a regular file" msgstr "%s: não é um arquivo comum" -#: src/sudo_edit.c:230 src/sudo_edit.c:332 +#: src/sudo_edit.c:533 +#, c-format +msgid "%s: editing symbolic links is not permitted" +msgstr "%s: edição de links simbólicos não é permitida" + +#: src/sudo_edit.c:536 +#, c-format +msgid "%s: editing files in a writable directory is not permitted" +msgstr "%s: edição de arquivos em um diretório gravável não é permitida" + +#: src/sudo_edit.c:567 src/sudo_edit.c:669 #, c-format msgid "%s: short write" msgstr "%s: escrita curta" -#: src/sudo_edit.c:295 +#: src/sudo_edit.c:631 #, c-format msgid "%s left unmodified" msgstr "%s não foi modificado" -#: src/sudo_edit.c:308 src/sudo_edit.c:483 +#: src/sudo_edit.c:644 src/sudo_edit.c:830 #, c-format msgid "%s unchanged" msgstr "%s sem alteração" -#: src/sudo_edit.c:321 src/sudo_edit.c:343 +#: src/sudo_edit.c:658 src/sudo_edit.c:680 #, c-format msgid "unable to write to %s" msgstr "não foi possível gravar em %s" -#: src/sudo_edit.c:322 src/sudo_edit.c:341 src/sudo_edit.c:344 -#: src/sudo_edit.c:508 src/sudo_edit.c:512 +#: src/sudo_edit.c:659 src/sudo_edit.c:678 src/sudo_edit.c:681 +#: src/sudo_edit.c:855 src/sudo_edit.c:859 #, c-format msgid "contents of edit session left in %s" msgstr "conteúdo da sessão de edição deixado em %s" -#: src/sudo_edit.c:340 +#: src/sudo_edit.c:677 msgid "unable to read temporary file" msgstr "não foi possível ler arquivo temporário" -#: src/sudo_edit.c:417 +#: src/sudo_edit.c:760 msgid "sesh: internal error: odd number of paths" msgstr "sesh: erro interno: número ímpar de caminhos" -#: src/sudo_edit.c:419 +#: src/sudo_edit.c:762 msgid "sesh: unable to create temporary files" msgstr "sesh: não foi possível criar arquivos temporários" -#: src/sudo_edit.c:421 src/sudo_edit.c:515 +#: src/sudo_edit.c:764 src/sudo_edit.c:862 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: erro desconhecido: %d" -#: src/sudo_edit.c:507 +#: src/sudo_edit.c:854 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:511 +#: src/sudo_edit.c:858 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:554 +#: src/sudo_edit.c:901 #, 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:571 +#: src/sudo_edit.c:918 msgid "plugin error: missing file list for sudoedit" msgstr "erro no plug-in: faltando lista de arquivo para sudoedit" -#: src/tgetpass.c:90 +#: src/sudo_edit.c:959 src/sudo_edit.c:972 +msgid "unable to read the clock" +msgstr "não foi possível ler o relógio" + +#: src/tgetpass.c:107 msgid "no tty present and no askpass program specified" msgstr "nenhum tty presente e nenhum programa de askpass especificado" -#: src/tgetpass.c:99 +#: src/tgetpass.c:116 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "nenhum programa de askpass especificado, tente definir SUDO_ASKPASS" -#: src/tgetpass.c:232 +#: src/tgetpass.c:276 #, c-format msgid "unable to set gid to %u" msgstr "não foi possível definir gid para %u" -#: src/tgetpass.c:236 +#: src/tgetpass.c:280 #, c-format msgid "unable to set uid to %u" msgstr "não foi possível definir uid para %u" -#: src/tgetpass.c:241 +#: src/tgetpass.c:285 #, c-format msgid "unable to run %s" msgstr "não foi possível executar %s" -#: src/utmp.c:278 +#: src/utmp.c:266 msgid "unable to save stdin" msgstr "não foi possível salvar a entrada padrão" -#: src/utmp.c:280 +#: src/utmp.c:268 msgid "unable to dup2 stdin" msgstr "não foi possível realizar dup2 da entrada padrão" -#: src/utmp.c:283 +#: src/utmp.c:271 msgid "unable to restore stdin" msgstr "não foi possível restaurar a entrada padrão" +#~ msgid "internal error, tried allocate zero bytes" +#~ msgstr "erro interno, tentou alocar zero bytes" + +#~ msgid "unable to set terminal to raw mode" +#~ msgstr "não foi possível definir o terminal para modo raw" + +#~ msgid "unable to open socket" +#~ msgstr "não foi possível abrir soquete" + #~ msgid "%s: %s: %s\n" #~ msgstr "%s: %s: %s\n" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/po/ru.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/po/ru.mo differ diff -Nru sudo-1.8.12/po/ru.po sudo-1.8.16/po/ru.po --- sudo-1.8.12/po/ru.po 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/po/ru.po 2016-03-17 16:13:10.000000000 +0000 @@ -3,313 +3,328 @@ # This file is distributed under the same license as the sudo package. # # Pavel Maryanov , 2011. -# Yuri Kozlov , 2011, 2012, 2013, 2014. +# Yuri Kozlov , 2011, 2012, 2013, 2014, 2016. msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.12b1\n" -"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-10-27 12:35-0600\n" -"PO-Revision-Date: 2014-11-11 19:05+0300\n" -"Last-Translator: Yuri Kozlov \n" -"Language-Team: Russian \n" +"Project-Id-Version: sudo 1.8.16b1\n" +"Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" +"POT-Creation-Date: 2016-02-19 15:48-0700\n" +"PO-Revision-Date: 2016-02-28 11:05+0200\n" +"Last-Translator: Pavel Maryanov \n" +"Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Lokalize 1.5\n" +"X-Generator: Poedit 1.8.6\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" -#: lib/util/aix.c:92 lib/util/aix.c:151 +#: lib/util/aix.c:85 lib/util/aix.c:164 msgid "unable to open userdb" msgstr "не удаётся открыть userdb" -#: lib/util/aix.c:156 +#: lib/util/aix.c:219 #, c-format msgid "unable to switch to registry \"%s\" for %s" msgstr "не удаётся переключиться на реестр «%s» для %s" -#: lib/util/aix.c:175 +#: lib/util/aix.c:244 msgid "unable to restore registry" msgstr "не удаётся восстановить реестр" -#: lib/util/alloc.c:68 lib/util/alloc.c:85 lib/util/alloc.c:106 -#: lib/util/alloc.c:128 lib/util/alloc.c:147 lib/util/alloc.c:170 -msgid "internal error, tried allocate zero bytes" -msgstr "внутренняя ошибка, попытка выделить 0 байт" - -#: lib/util/alloc.c:87 lib/util/alloc.c:109 lib/util/alloc.c:149 -#: lib/util/alloc.c:172 src/net_ifs.c:174 src/net_ifs.c:191 src/net_ifs.c:325 -#, c-format -msgid "internal error, %s overflow" -msgstr "внутренняя ошибка, переполнение %s" - -#: lib/util/gidlist.c:78 src/load_plugins.c:61 src/load_plugins.c:74 -#: src/sudo.c:572 src/sudo.c:591 src/sudo.c:618 src/sudo.c:627 src/sudo.c:636 -#: src/sudo.c:653 src/sudo.c:700 src/sudo.c:710 +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/gidlist.c:74 +#: lib/util/sudo_conf.c:207 lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 +#: lib/util/sudo_conf.c:569 src/conversation.c:75 src/exec.c:863 +#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 +#: src/exec_pty.c:684 src/exec_pty.c:692 src/load_plugins.c:52 +#: src/load_plugins.c:65 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:655 src/sudo.c:665 src/sudo.c:685 src/sudo.c:704 src/sudo.c:713 +#: src/sudo.c:722 src/sudo.c:739 src/sudo.c:780 src/sudo.c:790 src/sudo.c:810 +#: src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 src/sudo.c:1492 +#: src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/util/strsignal.c:50 +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/sudo_conf.c:208 +#: lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 lib/util/sudo_conf.c:569 +#: src/conversation.c:76 src/exec.c:863 src/exec_common.c:107 +#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:684 +#: src/exec_pty.c:692 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:810 src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 +#: src/sudo.c:1492 src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 +msgid "unable to allocate memory" +msgstr "не удаётся выделить память" + +#: lib/util/strsignal.c:48 msgid "Unknown signal" msgstr "Неизвестный сигнал" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:65 lib/util/strtonum.c:183 +#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:48 +#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "недопустимое значение" -#: lib/util/strtoid.c:90 lib/util/strtoid.c:118 lib/util/strtomode.c:61 -#: lib/util/strtonum.c:68 lib/util/strtonum.c:195 +#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:54 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "значение слишком велико" -#: lib/util/strtoid.c:96 lib/util/strtomode.c:61 lib/util/strtonum.c:68 -#: lib/util/strtonum.c:189 +#: lib/util/strtoid.c:89 lib/util/strtomode.c:54 lib/util/strtonum.c:61 +#: lib/util/strtonum.c:182 msgid "value too small" msgstr "значение слишком мало" -#: lib/util/sudo_conf.c:181 +#: lib/util/sudo_conf.c:223 #, c-format msgid "invalid Path value `%s' in %s, line %u" msgstr "некорректное значение Path «%s» в %s, строка %u" -#: lib/util/sudo_conf.c:335 lib/util/sudo_conf.c:388 +#: lib/util/sudo_conf.c:389 lib/util/sudo_conf.c:442 #, c-format msgid "invalid value for %s `%s' in %s, line %u" msgstr "некорректное значение для %s «%s» в %s, строка %u" -#: lib/util/sudo_conf.c:356 +#: lib/util/sudo_conf.c:410 #, c-format msgid "unsupported group source `%s' in %s, line %u" msgstr "неподдерживаемый групповой источник «%s» в %s, строка %u" -#: lib/util/sudo_conf.c:372 +#: lib/util/sudo_conf.c:426 #, c-format msgid "invalid max groups `%s' in %s, line %u" msgstr "некорректное максимальное значение для групп «%s» в %s, строка %u" -#: lib/util/sudo_conf.c:522 +#: lib/util/sudo_conf.c:585 #, c-format msgid "unable to stat %s" msgstr "не удалось выполнить вызов stat %s" -#: lib/util/sudo_conf.c:525 +#: lib/util/sudo_conf.c:588 #, c-format msgid "%s is not a regular file" msgstr "%s не является обычным файлом" -#: lib/util/sudo_conf.c:528 +#: lib/util/sudo_conf.c:591 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s принадлежит пользователю с uid %u, а должен принадлежать пользователю с uid %u" -#: lib/util/sudo_conf.c:532 +#: lib/util/sudo_conf.c:595 #, c-format msgid "%s is world writable" msgstr "доступ на запись в %s разрешена всем" -#: lib/util/sudo_conf.c:535 +#: lib/util/sudo_conf.c:598 #, c-format msgid "%s is group writable" msgstr "доступ на запись в %s разрешена группе" -#: lib/util/sudo_conf.c:545 src/selinux.c:196 src/selinux.c:209 src/sudo.c:341 +#: lib/util/sudo_conf.c:608 src/selinux.c:199 src/selinux.c:212 src/sudo.c:367 #, c-format msgid "unable to open %s" msgstr "не удаётся открыть %s" -#: src/exec.c:123 src/exec.c:128 src/exec.c:423 src/exec.c:425 src/exec.c:427 -#: src/exec.c:429 src/exec.c:431 src/exec.c:433 src/exec.c:436 src/exec.c:453 -#: src/exec.c:455 src/exec.c:457 src/exec.c:605 src/exec.c:800 -#: src/exec_pty.c:480 src/exec_pty.c:736 src/exec_pty.c:806 src/exec_pty.c:808 -#: src/exec_pty.c:820 src/exec_pty.c:1308 src/exec_pty.c:1310 -#: src/exec_pty.c:1315 src/exec_pty.c:1317 src/exec_pty.c:1331 -#: src/exec_pty.c:1342 src/exec_pty.c:1344 src/exec_pty.c:1346 -#: src/exec_pty.c:1348 src/exec_pty.c:1350 src/exec_pty.c:1352 -#: src/exec_pty.c:1354 src/signal.c:156 +#: src/exec.c:114 src/exec.c:116 src/exec.c:121 src/exec.c:409 src/exec.c:411 +#: src/exec.c:413 src/exec.c:415 src/exec.c:417 src/exec.c:419 src/exec.c:422 +#: src/exec.c:438 src/exec.c:440 src/exec.c:595 src/exec.c:790 +#: src/exec_pty.c:466 src/exec_pty.c:722 src/exec_pty.c:792 src/exec_pty.c:794 +#: src/exec_pty.c:806 src/exec_pty.c:808 src/exec_pty.c:1289 +#: src/exec_pty.c:1291 src/exec_pty.c:1296 src/exec_pty.c:1298 +#: src/exec_pty.c:1312 src/exec_pty.c:1323 src/exec_pty.c:1325 +#: src/exec_pty.c:1327 src/exec_pty.c:1329 src/exec_pty.c:1331 +#: src/exec_pty.c:1333 src/exec_pty.c:1335 src/signal.c:147 #, c-format msgid "unable to set handler for signal %d" msgstr "не удаётся установить обработчик сигнала %d" -#: src/exec.c:135 src/exec_pty.c:845 -msgid "policy plugin failed session initialization" -msgstr "модулю политик не удалось инициализировать сеанс" - -#: src/exec.c:140 src/exec_pty.c:861 src/exec_pty.c:1392 src/tgetpass.c:221 +#: src/exec.c:126 src/exec_pty.c:838 src/exec_pty.c:1373 src/tgetpass.c:265 msgid "unable to fork" msgstr "не удаётся создать дочерний процесс" -#: src/exec.c:318 src/exec.c:326 src/exec.c:877 src/exec_pty.c:604 -#: src/exec_pty.c:609 src/exec_pty.c:667 src/exec_pty.c:674 src/exec_pty.c:965 -#: src/exec_pty.c:975 src/exec_pty.c:1020 src/exec_pty.c:1027 -#: src/exec_pty.c:1457 src/exec_pty.c:1464 src/exec_pty.c:1471 +#: src/exec.c:304 src/exec.c:312 src/exec.c:868 src/exec_pty.c:604 +#: src/exec_pty.c:611 src/exec_pty.c:654 src/exec_pty.c:659 src/exec_pty.c:946 +#: src/exec_pty.c:956 src/exec_pty.c:1001 src/exec_pty.c:1008 +#: src/exec_pty.c:1438 src/exec_pty.c:1445 src/exec_pty.c:1452 msgid "unable to add event to queue" msgstr "не удаётся добавить событие в очередь" -#: src/exec.c:406 +#: src/exec.c:392 msgid "unable to create sockets" msgstr "не удаётся создать сокеты" -#: src/exec.c:502 +#: src/exec.c:447 +msgid "policy plugin failed session initialization" +msgstr "модулю политик не удалось инициализировать сеанс" + +#: src/exec.c:492 msgid "error in event loop" msgstr "ошибка в событийном цикле" -#: src/exec.c:520 +#: src/exec.c:510 msgid "unable to restore tty label" msgstr "не удаётся создать восстановить метку tty" -#: src/exec.c:613 src/exec_pty.c:514 src/signal.c:95 +#: src/exec.c:603 src/exec_pty.c:498 src/signal.c:86 #, c-format msgid "unable to restore handler for signal %d" msgstr "не удаётся восстановить обработчик сигнала %d" -#: src/exec.c:731 src/exec_pty.c:1199 +#: src/exec.c:721 src/exec_pty.c:1180 msgid "error reading from signal pipe" msgstr "ошибка чтения из сигнального канала" -#: src/exec_common.c:73 +#: src/exec_common.c:166 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "не удаётся удалить PRIV_PROC_EXEC из PRIV_LIMIT" -#: src/exec_pty.c:200 +#: src/exec_pty.c:188 msgid "unable to allocate pty" msgstr "не удаётся выделить pty" -#: src/exec_pty.c:780 src/exec_pty.c:789 src/exec_pty.c:797 -#: src/exec_pty.c:1300 src/exec_pty.c:1389 src/signal.c:137 src/tgetpass.c:218 +#: src/exec_pty.c:766 src/exec_pty.c:775 src/exec_pty.c:783 +#: src/exec_pty.c:1281 src/exec_pty.c:1370 src/signal.c:128 src/tgetpass.c:261 msgid "unable to create pipe" msgstr "не удаётся создать канал" -#: src/exec_pty.c:836 -msgid "unable to set terminal to raw mode" -msgstr "не удаётся перевести терминал в «сырой» режим" - -#: src/exec_pty.c:1232 +#: src/exec_pty.c:1213 msgid "error reading from pipe" msgstr "ошибка чтения из канала" -#: src/exec_pty.c:1257 +#: src/exec_pty.c:1238 msgid "error reading from socketpair" msgstr "ошибка чтения из пары сокетов" -#: src/exec_pty.c:1266 +#: src/exec_pty.c:1247 #, c-format msgid "unexpected reply type on backchannel: %d" msgstr "неожиданный тип ответа в резервном канале: %d" -#: src/exec_pty.c:1368 +#: src/exec_pty.c:1349 msgid "unable to set controlling tty" msgstr "не удаётся установить управляющий tty" -#: src/load_plugins.c:59 src/load_plugins.c:72 src/load_plugins.c:89 -#: src/load_plugins.c:142 src/load_plugins.c:148 src/load_plugins.c:154 -#: src/load_plugins.c:195 src/load_plugins.c:202 src/load_plugins.c:209 -#: src/load_plugins.c:215 +#: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 +#: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 +#: src/load_plugins.c:170 src/load_plugins.c:178 src/load_plugins.c:185 +#: src/load_plugins.c:191 #, c-format msgid "error in %s, line %d while loading plugin `%s'" msgstr "ошибка в %s, строка %d, при загрузке модуля «%s»" -#: src/load_plugins.c:91 +#: src/load_plugins.c:87 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" -#: src/load_plugins.c:150 +#: src/load_plugins.c:125 #, c-format msgid "%s must be owned by uid %d" msgstr "%s должен принадлежать пользователю с uid %d" -#: src/load_plugins.c:156 +#: src/load_plugins.c:131 #, c-format msgid "%s must be only be writable by owner" msgstr "%s должен быть доступен на запись только владельцу" -#: src/load_plugins.c:197 +#: src/load_plugins.c:172 #, c-format msgid "unable to load %s: %s" msgstr "не удаётся загрузить %s: %s" -#: src/load_plugins.c:204 +#: src/load_plugins.c:180 #, c-format msgid "unable to find symbol `%s' in %s" msgstr "не удаётся найти символ «%s» в %s" -#: src/load_plugins.c:211 +#: src/load_plugins.c:187 #, c-format msgid "unknown policy type %d found in %s" msgstr "найден неизвестный тип политики %d в %s" -#: src/load_plugins.c:217 +#: src/load_plugins.c:193 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "найдена несовместимая основная версия модуля %d (ожидалась %d) в %s" -#: src/load_plugins.c:226 +#: src/load_plugins.c:202 #, c-format msgid "ignoring policy plugin `%s' in %s, line %d" msgstr "игнорируется модуль политики «%s» в %s, строка %d" -#: src/load_plugins.c:228 +#: src/load_plugins.c:204 msgid "only a single policy plugin may be specified" msgstr "может быть задан только один модуль политики" -#: src/load_plugins.c:231 +#: src/load_plugins.c:207 #, c-format msgid "ignoring duplicate policy plugin `%s' in %s, line %d" msgstr "игнорируется повторный модуль политики «%s» в %s, строка %d" -#: src/load_plugins.c:249 +#: src/load_plugins.c:228 #, c-format msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" msgstr "игнорируется повторный модуль ввода-вывода «%s» в %s, строка %d" -#: src/load_plugins.c:338 +#: src/load_plugins.c:331 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "модуль политики %s не содержит метод check_policy" -#: src/net_ifs.c:236 -msgid "unable to open socket" -msgstr "не удаётся открыть сокет" +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:476 +#, c-format +msgid "internal error, %s overflow" +msgstr "внутренняя ошибка, переполнение %s" -#: src/parse_args.c:241 +#: src/parse_args.c:239 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "аргумент для -C должен быть числом, которое больше или равно 3" -#: src/parse_args.c:403 +#: src/parse_args.c:406 msgid "you may not specify both the `-i' and `-s' options" msgstr "параметры «-i» и «-s» являются взаимоисключающими" -#: src/parse_args.c:407 +#: src/parse_args.c:410 msgid "you may not specify both the `-i' and `-E' options" msgstr "параметры «-i» и «-E» являются взаимоисключающими" -#: src/parse_args.c:417 +#: src/parse_args.c:420 msgid "the `-E' option is not valid in edit mode" msgstr "параметр «-E» не действует в режиме редактирования" -#: src/parse_args.c:419 +#: src/parse_args.c:422 msgid "you may not specify environment variables in edit mode" msgstr "переменные окружения нельзя определять в режиме редактирования" -#: src/parse_args.c:427 +#: src/parse_args.c:430 msgid "the `-U' option may only be used with the `-l' option" msgstr "параметр «-U» можно использовать только с параметром «-l»" -#: src/parse_args.c:431 +#: src/parse_args.c:434 msgid "the `-A' and `-S' options may not be used together" msgstr "параметры «-A» и «-S» являются взаимоисключающими" -#: src/parse_args.c:497 +#: src/parse_args.c:504 msgid "sudoedit is not supported on this platform" msgstr "sudoedit не поддерживается на этой платформе" -#: src/parse_args.c:570 +#: src/parse_args.c:577 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:584 +#: src/parse_args.c:591 #, c-format msgid "" "%s - edit files as another user\n" @@ -318,7 +333,7 @@ "%s — редактирование файлов от имени другого пользователя\n" "\n" -#: src/parse_args.c:586 +#: src/parse_args.c:593 #, c-format msgid "" "%s - execute a command as another user\n" @@ -327,7 +342,7 @@ "%s — выполнение команд от имени другого пользователя\n" "\n" -#: src/parse_args.c:591 +#: src/parse_args.c:598 #, c-format msgid "" "\n" @@ -336,483 +351,519 @@ "\n" "Параметры:\n" -#: src/parse_args.c:593 +#: src/parse_args.c:600 msgid "use a helper program for password prompting" msgstr "использовать вспомогательную программу для ввода пароля" -#: src/parse_args.c:596 +#: src/parse_args.c:603 msgid "use specified BSD authentication type" msgstr "использовать указанный тип проверки подлинности BSD" -#: src/parse_args.c:599 +#: src/parse_args.c:606 msgid "run command in the background" msgstr "выполнить команду в фоновом режиме" -#: src/parse_args.c:601 +#: src/parse_args.c:608 msgid "close all file descriptors >= num" msgstr "закрыть все дескрипторы файлов >= num" -#: src/parse_args.c:604 +#: src/parse_args.c:611 msgid "run command with the specified BSD login class" msgstr "выполнить команду с указанным классом входа BSD в систему" -#: src/parse_args.c:607 +#: src/parse_args.c:614 msgid "preserve user environment when running command" msgstr "сохранить пользовательское окружение при выполнении команды" -#: src/parse_args.c:609 +#: src/parse_args.c:616 msgid "edit files instead of running a command" msgstr "редактировать файлы вместо выполнения команды" -#: src/parse_args.c:611 +#: src/parse_args.c:618 msgid "run command as the specified group name or ID" msgstr "выполнить команду от имени или ID указанной группы" -#: src/parse_args.c:613 +#: src/parse_args.c:620 msgid "set HOME variable to target user's home dir" msgstr "установить для переменной HOME домашний каталог указанного пользователя" -#: src/parse_args.c:615 +#: src/parse_args.c:622 msgid "display help message and exit" msgstr "показать справку и выйти" -#: src/parse_args.c:617 +#: src/parse_args.c:624 msgid "run command on host (if supported by plugin)" msgstr "выполнить команду на узле (если поддерживается модулем)" -#: src/parse_args.c:619 +#: src/parse_args.c:626 msgid "run login shell as the target user; a command may also be specified" msgstr "запустить оболочку входа в систему от имени указанного пользователя; также можно задать команду" -#: src/parse_args.c:621 +#: src/parse_args.c:628 msgid "remove timestamp file completely" msgstr "полностью удалить файл timestamp" -#: src/parse_args.c:623 +#: src/parse_args.c:630 msgid "invalidate timestamp file" msgstr "объявить недействительным файл timestamp" -#: src/parse_args.c:625 +#: src/parse_args.c:632 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "показать список прав пользователя или проверить заданную команду; в длинном формате используется дважды" -#: src/parse_args.c:627 +#: src/parse_args.c:634 msgid "non-interactive mode, no prompts are used" msgstr "автономный режим без не вывода запросов пользователю" -#: src/parse_args.c:629 +#: src/parse_args.c:636 msgid "preserve group vector instead of setting to target's" msgstr "сохранить вектор группы вместо установки целевой группы" -#: src/parse_args.c:631 +#: src/parse_args.c:638 msgid "use the specified password prompt" msgstr "использовать указанный запрос пароля" -#: src/parse_args.c:634 +#: src/parse_args.c:641 msgid "create SELinux security context with specified role" msgstr "создать контекст безопасности SELinux с указанной ролью" -#: src/parse_args.c:637 +#: src/parse_args.c:644 msgid "read password from standard input" msgstr "читать пароль из стандартного ввода" -#: src/parse_args.c:639 +#: src/parse_args.c:646 msgid "run shell as the target user; a command may also be specified" msgstr "запустить оболочку от имени указанного пользователя; также можно задать команду" -#: src/parse_args.c:642 +#: src/parse_args.c:649 msgid "create SELinux security context with specified type" msgstr "создать контекст безопасности SELinux указанного типа" -#: src/parse_args.c:645 +#: src/parse_args.c:652 msgid "in list mode, display privileges for user" msgstr "в режиме списка показывать права пользователя" -#: src/parse_args.c:647 +#: src/parse_args.c:654 msgid "run command (or edit file) as specified user name or ID" msgstr "выполнить команду (или редактировать файл) от имени или ID указанного пользователя" -#: src/parse_args.c:649 +#: src/parse_args.c:656 msgid "display version information and exit" msgstr "показать сведения о версии и выйти" -#: src/parse_args.c:651 +#: src/parse_args.c:658 msgid "update user's timestamp without running a command" msgstr "обновить временную метку пользователя без выполнения команды" -#: src/parse_args.c:653 +#: src/parse_args.c:660 msgid "stop processing command line arguments" msgstr "прекратить обработку аргументов командной строки" -#: src/selinux.c:77 +#: src/selinux.c:78 msgid "unable to open audit system" msgstr "не удаётся открыть систему аудита" -#: src/selinux.c:85 +#: src/selinux.c:88 msgid "unable to send audit message" msgstr "не удаётся отправить сообщение аудита" -#: src/selinux.c:113 +#: src/selinux.c:116 #, c-format msgid "unable to fgetfilecon %s" msgstr "не удаётся выполнить fgetfilecon %s" -#: src/selinux.c:118 +#: src/selinux.c:121 #, c-format msgid "%s changed labels" msgstr "изменено меток: %s" -#: src/selinux.c:123 +#: src/selinux.c:126 #, c-format msgid "unable to restore context for %s" msgstr "не удаётся восстановить контекст для %s" -#: src/selinux.c:163 +#: src/selinux.c:166 #, c-format msgid "unable to open %s, not relabeling tty" msgstr "не удаётся открыть %s, tty без возможности переименования" -#: src/selinux.c:172 +#: src/selinux.c:175 msgid "unable to get current tty context, not relabeling tty" msgstr "не удаётся получить контекст текущего tty, tty без возможности переименования" -#: src/selinux.c:179 +#: src/selinux.c:182 msgid "unable to get new tty context, not relabeling tty" msgstr "не удаётся получить контекст tty, tty без возможности переименования" -#: src/selinux.c:186 +#: src/selinux.c:189 msgid "unable to set new tty context" msgstr "не удаётся установить новый контекст tty" -#: src/selinux.c:252 +#: src/selinux.c:255 #, c-format msgid "you must specify a role for type %s" msgstr "необходимо указать роль для типа %s" -#: src/selinux.c:258 +#: src/selinux.c:261 #, c-format msgid "unable to get default type for role %s" msgstr "не удаётся получить тип по умолчанию для роли %s" -#: src/selinux.c:276 +#: src/selinux.c:279 #, c-format msgid "failed to set new role %s" msgstr "не удалось установить новую роль %s" -#: src/selinux.c:280 +#: src/selinux.c:283 #, c-format msgid "failed to set new type %s" msgstr "не удалось установить новый тип %s" -#: src/selinux.c:289 +#: src/selinux.c:295 #, c-format msgid "%s is not a valid context" msgstr "%s не является допустимым контекстом" -#: src/selinux.c:324 +#: src/selinux.c:330 msgid "failed to get old_context" msgstr "не удалось получить old_context" -#: src/selinux.c:330 +#: src/selinux.c:336 msgid "unable to determine enforcing mode." msgstr "не удаётся определить принудительный режим" -#: src/selinux.c:347 +#: src/selinux.c:353 #, c-format msgid "unable to set tty context to %s" msgstr "не удаётся задать контекст tty для %s" -#: src/selinux.c:386 +#: src/selinux.c:392 #, c-format msgid "unable to set exec context to %s" msgstr "не удаётся установить для контекста exec значение %s" -#: src/selinux.c:393 +#: src/selinux.c:399 #, c-format msgid "unable to set key creation context to %s" msgstr "не удаётся установить для контекста создания ключа значение %s" -#: src/sesh.c:80 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "укажите не менее одного аргумента" -#: src/sesh.c:109 +#: src/sesh.c:106 +#, c-format +msgid "invalid file descriptor number: %s" +msgstr "неверный номер файлового дескриптора: %s" + +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "не удаётся выполнить %s в качестве регистрационной оболочки" -#: src/sesh.c:114 src/sudo.c:1186 +#: src/sesh.c:125 src/sudo.c:1274 #, c-format msgid "unable to execute %s" msgstr "не удаётся выполнить %s" -#: src/signal.c:77 +#: src/signal.c:68 #, c-format msgid "unable to save handler for signal %d" msgstr "не удаётся сохранить обработчик сигнала %d" -#: src/solaris.c:88 +#: src/solaris.c:76 msgid "resource control limit has been reached" msgstr "достигнут лимит управления ресурсами" -#: src/solaris.c:91 +#: src/solaris.c:79 #, c-format msgid "user \"%s\" is not a member of project \"%s\"" msgstr "пользователь «%s» не является членом проекта «%s»" -#: src/solaris.c:95 +#: src/solaris.c:83 msgid "the invoking task is final" msgstr "вызывающе задание — последнее" -#: src/solaris.c:98 +#: src/solaris.c:86 #, c-format msgid "could not join project \"%s\"" msgstr "не удалось присоединиться к проекту «%s»" -#: src/solaris.c:103 +#: src/solaris.c:91 #, c-format msgid "no resource pool accepting default bindings exists for project \"%s\"" msgstr "для проекта «%s» не существует пула ресурсов, принимающих привязки по умолчанию" -#: src/solaris.c:107 +#: src/solaris.c:95 #, c-format msgid "specified resource pool does not exist for project \"%s\"" msgstr "у проекта «%s» нет указанного пула ресурсов" -#: src/solaris.c:111 +#: src/solaris.c:99 #, c-format msgid "could not bind to default resource pool for project \"%s\"" msgstr "не удаётся подключиться к пулу ресурсов по умолчанию проекта «%s»" -#: src/solaris.c:117 +#: src/solaris.c:105 #, c-format msgid "setproject failed for project \"%s\"" msgstr "setproject завершилась с ошибкой для проекта «%s»" -#: src/solaris.c:119 +#: src/solaris.c:107 #, c-format msgid "warning, resource control assignment failed for project \"%s\"" msgstr "предупреждение: назначение контроля за ресурсами завершилось с ошибкой для проекта «%s»" -#: src/sudo.c:209 +#: src/sudo.c:212 #, c-format msgid "Sudo version %s\n" msgstr "Sudo версия %s\n" -#: src/sudo.c:211 +#: src/sudo.c:214 #, c-format msgid "Configure options: %s\n" msgstr "Параметры настройки: %s\n" -#: src/sudo.c:216 +#: src/sudo.c:222 msgid "fatal error, unable to load plugins" msgstr "фатальная ошибка, не удалось загрузить модули" -#: src/sudo.c:224 +#: src/sudo.c:230 msgid "unable to initialize policy plugin" msgstr "не удаётся инициализировать модуль политики" -#: src/sudo.c:280 +#: src/sudo.c:276 +msgid "plugin did not return a command to execute" +msgstr "модуль не вернул команду для выполнения" + +#: src/sudo.c:292 #, c-format msgid "error initializing I/O plugin %s" msgstr "ошибка инициализации модуля ввода-вывода %s" -#: src/sudo.c:306 +#: src/sudo.c:318 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "неожиданный режим sudo: 0x%x" -#: src/sudo.c:426 +#: src/sudo.c:461 msgid "unable to get group vector" msgstr "не удаётся получить вектор группы" -#: src/sudo.c:478 +#: src/sudo.c:522 #, c-format msgid "unknown uid %u: who are you?" msgstr "неизвестный uid %u: кто вы?" -#: src/sudo.c:785 +#: src/sudo.c:859 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s должен принадлежать пользователю с uid %d и иметь бит setuid" -#: src/sudo.c:788 +#: src/sudo.c:862 #, 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 без прав суперпользователя?" -#: src/sudo.c:794 +#: src/sudo.c:868 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "эффективный uid не равен %d, программа sudo установлена с битом setuid и принадлежит root?" -#: src/sudo.c:923 +#: src/sudo.c:999 #, c-format msgid "unknown login class %s" msgstr "неизвестный класс входа %s" -#: src/sudo.c:936 +#: src/sudo.c:1012 msgid "unable to set user context" msgstr "не удаётся назначить контекст пользователя" -#: src/sudo.c:950 +#: src/sudo.c:1026 msgid "unable to set supplementary group IDs" msgstr "не удаётся назначить дополнительные идентификаторы групп" -#: src/sudo.c:957 +#: src/sudo.c:1033 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "не удаётся назначить эффективный gid на runas gid %u" -#: src/sudo.c:963 +#: src/sudo.c:1039 #, c-format msgid "unable to set gid to runas gid %u" msgstr "не удаётся назначить gid на runas gid %u" -#: src/sudo.c:970 +#: src/sudo.c:1046 msgid "unable to set process priority" msgstr "не удаётся назначить приоритет процесса" -#: src/sudo.c:978 +#: src/sudo.c:1054 #, c-format msgid "unable to change root to %s" msgstr "не удаётся изменить root на %s" -#: src/sudo.c:991 src/sudo.c:997 src/sudo.c:1003 +#: src/sudo.c:1067 src/sudo.c:1073 src/sudo.c:1080 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "не удаётся изменить на runas uid (%u, %u)" -#: src/sudo.c:1021 +#: src/sudo.c:1098 #, c-format msgid "unable to change directory to %s" msgstr "не удаётся сменить каталог на %s" -#: src/sudo.c:1082 +#: src/sudo.c:1156 #, c-format msgid "unexpected child termination condition: %d" msgstr "неожиданное условие завершения потомка: %d" -#: src/sudo.c:1214 +#: src/sudo.c:1302 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "модуль политики %s не содержит метод «check_policy»" -#: src/sudo.c:1232 +#: src/sudo.c:1320 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "модуль политики %s не поддерживает списка прав" -#: src/sudo.c:1249 +#: src/sudo.c:1337 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "модуль политики %s не поддерживает параметр -v" -#: src/sudo.c:1264 +#: src/sudo.c:1352 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "модуль политики %s не поддерживает параметры -k/-K" -#: src/sudo_edit.c:203 src/sudo_edit.c:294 +#: src/sudo_edit.c:181 +msgid "unable to restore current working directory" +msgstr "не удалось восстановить текущий рабочий каталог" + +#: src/sudo_edit.c:526 src/sudo_edit.c:630 #, c-format msgid "%s: not a regular file" msgstr "%s: не обычный файл" -#: src/sudo_edit.c:230 src/sudo_edit.c:332 +#: src/sudo_edit.c:533 +#, c-format +msgid "%s: editing symbolic links is not permitted" +msgstr "%s: изменение символических ссылок не допускается" + +#: src/sudo_edit.c:536 +#, c-format +msgid "%s: editing files in a writable directory is not permitted" +msgstr "%s: изменение файлов в каталоге, доступном на запись, не допускается" + +#: src/sudo_edit.c:567 src/sudo_edit.c:669 #, c-format msgid "%s: short write" msgstr "%s: неполная запись" -#: src/sudo_edit.c:295 +#: src/sudo_edit.c:631 #, c-format msgid "%s left unmodified" msgstr "%s осталось неизменным" -#: src/sudo_edit.c:308 src/sudo_edit.c:483 +#: src/sudo_edit.c:644 src/sudo_edit.c:830 #, c-format msgid "%s unchanged" msgstr "%s не изменено" -#: src/sudo_edit.c:321 src/sudo_edit.c:343 +#: src/sudo_edit.c:658 src/sudo_edit.c:680 #, c-format msgid "unable to write to %s" msgstr "не удаётся записать в %s" -#: src/sudo_edit.c:322 src/sudo_edit.c:341 src/sudo_edit.c:344 -#: src/sudo_edit.c:508 src/sudo_edit.c:512 +#: src/sudo_edit.c:659 src/sudo_edit.c:678 src/sudo_edit.c:681 +#: src/sudo_edit.c:855 src/sudo_edit.c:859 #, c-format msgid "contents of edit session left in %s" msgstr "содержимое сеанса редактирования сохранено в %s" -#: src/sudo_edit.c:340 +#: src/sudo_edit.c:677 msgid "unable to read temporary file" msgstr "не удалось прочитать временный файл" -#: src/sudo_edit.c:417 +#: src/sudo_edit.c:760 msgid "sesh: internal error: odd number of paths" msgstr "sesh: внутренняя ошибка: нечётное количество путей" -#: src/sudo_edit.c:419 +#: src/sudo_edit.c:762 msgid "sesh: unable to create temporary files" msgstr "sesh: не удалось создать временные файлы" -#: src/sudo_edit.c:421 src/sudo_edit.c:515 +#: src/sudo_edit.c:764 src/sudo_edit.c:862 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: неизвестная ошибка %d" -#: src/sudo_edit.c:507 +#: src/sudo_edit.c:854 msgid "unable to copy temporary files back to their original location" msgstr "не удалось скопировать временные файлы обратно в изначальное положение" -#: src/sudo_edit.c:511 +#: src/sudo_edit.c:858 msgid "unable to copy some of the temporary files back to their original location" msgstr "не удалось скопировать некоторые из временных файлов обратно в изначальное положение" -#: src/sudo_edit.c:554 +#: src/sudo_edit.c:901 #, c-format msgid "unable to change uid to root (%u)" msgstr "не удалось изменить uid на root (%u)" -#: src/sudo_edit.c:571 +#: src/sudo_edit.c:918 msgid "plugin error: missing file list for sudoedit" msgstr "ошибка модуля: отсутствует список файлов для sudoedit" -#: src/tgetpass.c:90 +#: src/sudo_edit.c:959 src/sudo_edit.c:972 +msgid "unable to read the clock" +msgstr "не удалось прочитать время" + +#: src/tgetpass.c:107 msgid "no tty present and no askpass program specified" msgstr "нет tty и не указана программа askpass" -#: src/tgetpass.c:99 +#: src/tgetpass.c:116 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "не указана программа askpass, попробуйте задать значение в SUDO_ASKPASS" -#: src/tgetpass.c:232 +#: src/tgetpass.c:276 #, c-format msgid "unable to set gid to %u" msgstr "не удаётся назначить gid равным %u" -#: src/tgetpass.c:236 +#: src/tgetpass.c:280 #, c-format msgid "unable to set uid to %u" msgstr "не удаётся назначить uid равным %u" -#: src/tgetpass.c:241 +#: src/tgetpass.c:285 #, c-format msgid "unable to run %s" msgstr "не удаётся выполнить %s" -#: src/utmp.c:278 +#: src/utmp.c:266 msgid "unable to save stdin" msgstr "не удаётся сохранить стандартный ввод" -#: src/utmp.c:280 +#: src/utmp.c:268 msgid "unable to dup2 stdin" msgstr "не удаётся выполнить dup2 для стандартного ввода" -#: src/utmp.c:283 +#: src/utmp.c:271 msgid "unable to restore stdin" msgstr "не удаётся восстановить стандартный ввод" +#~ msgid "internal error, tried allocate zero bytes" +#~ msgstr "внутренняя ошибка, попытка выделить 0 байт" + +#~ msgid "unable to set terminal to raw mode" +#~ msgstr "не удаётся перевести терминал в «сырой» режим" + +#~ msgid "unable to open socket" +#~ msgstr "не удаётся открыть сокет" + #~ msgid "%s: %s: %s\n" #~ msgstr "%s: %s: %s\n" @@ -852,9 +903,6 @@ #~ msgid "when listing, list specified user's privileges\n" #~ msgstr "при выводе списка показать привилегии пользователя\n" -#~ msgid "unable to allocate memory" -#~ msgstr "не удаётся выделить память" - #~ msgid ": " #~ msgstr ": " Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/po/sk.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/po/sk.mo differ diff -Nru sudo-1.8.12/po/sk.po sudo-1.8.16/po/sk.po --- sudo-1.8.12/po/sk.po 1970-01-01 00:00:00.000000000 +0000 +++ sudo-1.8.16/po/sk.po 2015-10-31 23:35:24.000000000 +0000 @@ -0,0 +1,839 @@ +# Portable object template file for sudo +# This file is put in the public domain. +# Todd C. Miller , 2011-2015 +# Dušan Kazik , 2015 +# +msgid "" +msgstr "" +"Project-Id-Version: sudo 1.8.15b1\n" +"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" +"POT-Creation-Date: 2015-09-10 14:28-0600\n" +"PO-Revision-Date: 2015-10-05 11:16+0200\n" +"Last-Translator: Dušan Kazik \n" +"Language-Team: Slovak \n" +"Language: sk\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 1.8.5\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"X-Poedit-Basepath: .\n" +"X-Poedit-SearchPath-0: .\n" + +#: lib/util/aix.c:85 lib/util/aix.c:155 +msgid "unable to open userdb" +msgstr "nie je možné otvoriť userdb" + +#: lib/util/aix.c:160 +#, c-format +msgid "unable to switch to registry \"%s\" for %s" +msgstr "nie je možné prepnúť na register „%s“ pre %s" + +#: lib/util/aix.c:185 +msgid "unable to restore registry" +msgstr "nie je možné obnoviť register" + +#: lib/util/aix.c:204 lib/util/gidlist.c:64 lib/util/gidlist.c:74 +#: lib/util/sudo_conf.c:185 lib/util/sudo_conf.c:265 lib/util/sudo_conf.c:342 +#: lib/util/sudo_conf.c:544 src/conversation.c:72 src/exec.c:864 +#: src/exec_common.c:96 src/exec_common.c:108 src/exec_common.c:115 +#: src/exec_pty.c:684 src/exec_pty.c:692 src/load_plugins.c:52 +#: src/load_plugins.c:65 src/load_plugins.c:208 src/load_plugins.c:231 +#: src/load_plugins.c:296 src/load_plugins.c:311 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:414 src/sesh.c:102 +#: src/sudo.c:182 src/sudo.c:359 src/sudo.c:378 src/sudo.c:442 src/sudo.c:596 +#: src/sudo.c:615 src/sudo.c:642 src/sudo.c:651 src/sudo.c:660 src/sudo.c:677 +#: src/sudo.c:729 src/sudo.c:739 src/sudo.c:763 src/sudo.c:1146 +#: src/sudo.c:1148 src/sudo.c:1154 src/sudo.c:1162 src/sudo_edit.c:150 +#: src/sudo_edit.c:425 src/sudo_edit.c:522 src/sudo_edit.c:634 +#: src/sudo_edit.c:654 +#, c-format +msgid "%s: %s" +msgstr "%s: %s" + +#: lib/util/aix.c:204 lib/util/gidlist.c:64 lib/util/sudo_conf.c:185 +#: lib/util/sudo_conf.c:265 lib/util/sudo_conf.c:342 lib/util/sudo_conf.c:544 +#: src/conversation.c:73 src/exec.c:864 src/exec_common.c:96 +#: src/exec_common.c:108 src/exec_common.c:115 src/exec_pty.c:684 +#: src/exec_pty.c:692 src/load_plugins.c:208 src/load_plugins.c:231 +#: src/load_plugins.c:296 src/load_plugins.c:311 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:414 src/sesh.c:102 +#: src/sudo.c:182 src/sudo.c:359 src/sudo.c:378 src/sudo.c:442 src/sudo.c:763 +#: src/sudo.c:1146 src/sudo.c:1148 src/sudo.c:1154 src/sudo.c:1162 +#: src/sudo_edit.c:150 src/sudo_edit.c:425 src/sudo_edit.c:522 +#: src/sudo_edit.c:634 src/sudo_edit.c:654 +msgid "unable to allocate memory" +msgstr "nie je možné alokovať pamäť" + +#: lib/util/strsignal.c:50 +msgid "Unknown signal" +msgstr "Neznámy signál" + +#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:48 +#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 +msgid "invalid value" +msgstr "neplatná hodnota" + +#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:54 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 +msgid "value too large" +msgstr "hodnota je príliš veľká" + +#: lib/util/strtoid.c:89 lib/util/strtomode.c:54 lib/util/strtonum.c:61 +#: lib/util/strtonum.c:182 +msgid "value too small" +msgstr "hodnota je príliš malá" + +#: lib/util/sudo_conf.c:198 +#, c-format +msgid "invalid Path value `%s' in %s, line %u" +msgstr "neplatná hodnota pre cestu „%s“ v %s, riadok %u" + +#: lib/util/sudo_conf.c:364 lib/util/sudo_conf.c:417 +#, c-format +msgid "invalid value for %s `%s' in %s, line %u" +msgstr "neplatná hodnota pre %s „%s“ v %s, riadok %u" + +#: lib/util/sudo_conf.c:385 +#, c-format +msgid "unsupported group source `%s' in %s, line %u" +msgstr "nepodporovaný zdroj skupiny „%s“ v %s, riadok %u" + +#: lib/util/sudo_conf.c:401 +#, c-format +msgid "invalid max groups `%s' in %s, line %u" +msgstr "" + +#: lib/util/sudo_conf.c:560 +#, c-format +msgid "unable to stat %s" +msgstr "" + +#: lib/util/sudo_conf.c:563 +#, c-format +msgid "%s is not a regular file" +msgstr "%s nie je regulárny súbor" + +#: lib/util/sudo_conf.c:566 +#, c-format +msgid "%s is owned by uid %u, should be %u" +msgstr "%s je vlastnený identifikátorom uid %u a mal by byť vlastnený %u" + +#: lib/util/sudo_conf.c:570 +#, c-format +msgid "%s is world writable" +msgstr "" + +#: lib/util/sudo_conf.c:573 +#, c-format +msgid "%s is group writable" +msgstr "" + +#: lib/util/sudo_conf.c:583 src/selinux.c:199 src/selinux.c:212 src/sudo.c:328 +#, c-format +msgid "unable to open %s" +msgstr "nie je možné otvoriť %s" + +#: src/exec.c:114 src/exec.c:116 src/exec.c:121 src/exec.c:409 src/exec.c:411 +#: src/exec.c:413 src/exec.c:415 src/exec.c:417 src/exec.c:420 src/exec.c:437 +#: src/exec.c:439 src/exec.c:441 src/exec.c:596 src/exec.c:791 +#: src/exec_pty.c:466 src/exec_pty.c:722 src/exec_pty.c:792 src/exec_pty.c:794 +#: src/exec_pty.c:806 src/exec_pty.c:808 src/exec_pty.c:1285 +#: src/exec_pty.c:1287 src/exec_pty.c:1292 src/exec_pty.c:1294 +#: src/exec_pty.c:1308 src/exec_pty.c:1319 src/exec_pty.c:1321 +#: src/exec_pty.c:1323 src/exec_pty.c:1325 src/exec_pty.c:1327 +#: src/exec_pty.c:1329 src/exec_pty.c:1331 src/signal.c:147 +#, c-format +msgid "unable to set handler for signal %d" +msgstr "" + +#: src/exec.c:126 src/exec_pty.c:838 src/exec_pty.c:1369 src/tgetpass.c:265 +msgid "unable to fork" +msgstr "" + +#: src/exec.c:304 src/exec.c:312 src/exec.c:869 src/exec_pty.c:604 +#: src/exec_pty.c:611 src/exec_pty.c:654 src/exec_pty.c:659 src/exec_pty.c:942 +#: src/exec_pty.c:952 src/exec_pty.c:997 src/exec_pty.c:1004 +#: src/exec_pty.c:1434 src/exec_pty.c:1441 src/exec_pty.c:1448 +msgid "unable to add event to queue" +msgstr "" + +#: src/exec.c:392 +msgid "unable to create sockets" +msgstr "nie je možné vytvoriť sokety" + +#: src/exec.c:448 +msgid "policy plugin failed session initialization" +msgstr "" + +#: src/exec.c:493 +msgid "error in event loop" +msgstr "" + +#: src/exec.c:511 +msgid "unable to restore tty label" +msgstr "nie je možné obnoviť menovku rozhrania tty" + +#: src/exec.c:604 src/exec_pty.c:498 src/signal.c:86 +#, c-format +msgid "unable to restore handler for signal %d" +msgstr "" + +#: src/exec.c:722 src/exec_pty.c:1176 +msgid "error reading from signal pipe" +msgstr "chyba pri čítaní zo zreťazenia signálov" + +#: src/exec_common.c:64 +msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" +msgstr "nie je možné odstrániť PRIV_PROC_EXEC z PRIV_LIMIT" + +#: src/exec_pty.c:188 +msgid "unable to allocate pty" +msgstr "nie je možné alokovať pty" + +#: src/exec_pty.c:766 src/exec_pty.c:775 src/exec_pty.c:783 +#: src/exec_pty.c:1277 src/exec_pty.c:1366 src/signal.c:128 src/tgetpass.c:261 +msgid "unable to create pipe" +msgstr "nie je možné vytvoriť zreťazenie" + +#: src/exec_pty.c:1209 +msgid "error reading from pipe" +msgstr "chyba pri čítaní zo zreťazenia" + +#: src/exec_pty.c:1234 +msgid "error reading from socketpair" +msgstr "" + +#: src/exec_pty.c:1243 +#, c-format +msgid "unexpected reply type on backchannel: %d" +msgstr "neočakávaný typ odpovede na zadnom kanále: %d" + +#: src/exec_pty.c:1345 +msgid "unable to set controlling tty" +msgstr "nie je možné nastaviť ovládacie rozhranie tty" + +#: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:80 +#: src/load_plugins.c:110 src/load_plugins.c:116 src/load_plugins.c:122 +#: src/load_plugins.c:163 src/load_plugins.c:171 src/load_plugins.c:178 +#: src/load_plugins.c:184 +#, c-format +msgid "error in %s, line %d while loading plugin `%s'" +msgstr "chyba v %s, riadok%d počas načítania zásuvného modulu „%s“" + +#: src/load_plugins.c:82 +#, c-format +msgid "%s%s: %s" +msgstr "%s%s: %s" + +#: src/load_plugins.c:118 +#, c-format +msgid "%s must be owned by uid %d" +msgstr "%s musí byť vlastnený identifikátorom uid %d" + +#: src/load_plugins.c:124 +#, c-format +msgid "%s must be only be writable by owner" +msgstr "%s musí byť zapisovateľný iba vlastníkom" + +#: src/load_plugins.c:165 +#, c-format +msgid "unable to load %s: %s" +msgstr "nie je možné načítať %s:%s" + +#: src/load_plugins.c:173 +#, c-format +msgid "unable to find symbol `%s' in %s" +msgstr "nie je možné nájsť symbol „%s“ v %s" + +#: src/load_plugins.c:180 +#, c-format +msgid "unknown policy type %d found in %s" +msgstr "našiel sa neplatný typ politiky %d v %s" + +#: src/load_plugins.c:186 +#, c-format +msgid "incompatible plugin major version %d (expected %d) found in %s" +msgstr "nekompatibilná hlavná verzia zásuvného modulu %d (očakávala sa %d) nájdená v %s" + +#: src/load_plugins.c:195 +#, c-format +msgid "ignoring policy plugin `%s' in %s, line %d" +msgstr "ignoruje sa zásuvný modul politiky „%s“ v %s, riadok %d" + +#: src/load_plugins.c:197 +msgid "only a single policy plugin may be specified" +msgstr "môže byť určený iba jeden zásuvný modul politiky" + +#: src/load_plugins.c:200 +#, c-format +msgid "ignoring duplicate policy plugin `%s' in %s, line %d" +msgstr "ignoruje sa zdvojený zásuvný modul politiky „%s“ v %s, riadok %d" + +#: src/load_plugins.c:221 +#, c-format +msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" +msgstr "ignoruje sa zdvojený vstupno-výstupný zásuvný modul „%s“ v %s, riadok %d" + +#: src/load_plugins.c:324 +#, c-format +msgid "policy plugin %s does not include a check_policy method" +msgstr "zásuvný modul politiky %s nezahŕňa spôsob check_policy" + +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:437 +#, c-format +msgid "internal error, %s overflow" +msgstr "vnútorná chyba, %s pretečenie" + +#: src/parse_args.c:239 +msgid "the argument to -C must be a number greater than or equal to 3" +msgstr "parameter pre -C musí byť číslo väčšie alebo rovné 3" + +#: src/parse_args.c:406 +msgid "you may not specify both the `-i' and `-s' options" +msgstr "nemôžete určiť naraz voľby „-i“ a „-s“" + +#: src/parse_args.c:410 +msgid "you may not specify both the `-i' and `-E' options" +msgstr "nemôžete určiť naraz voľby „-i“ a „-E“" + +#: src/parse_args.c:420 +msgid "the `-E' option is not valid in edit mode" +msgstr "voľba „-E“ nie je platná v režime úprav" + +#: src/parse_args.c:422 +msgid "you may not specify environment variables in edit mode" +msgstr "nemôžete určiť premenné prostredia v režim úprav" + +#: src/parse_args.c:430 +msgid "the `-U' option may only be used with the `-l' option" +msgstr "voľba „-U“ môže byť použitá iba s voľbou „-l“" + +#: src/parse_args.c:434 +msgid "the `-A' and `-S' options may not be used together" +msgstr "voľby „-A“ a „-S“ nemôžu byť použité zároveň" + +#: src/parse_args.c:504 +msgid "sudoedit is not supported on this platform" +msgstr "sudoedit nie je podporovaný na tejto platforme" + +#: src/parse_args.c:577 +msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" +msgstr "Môže byť určená iba jedna z volieb -e, -h, -i, -K, -l, -s, -v alebo -V" + +#: src/parse_args.c:591 +#, c-format +msgid "" +"%s - edit files as another user\n" +"\n" +msgstr "" +"%s - upravuje súbory ako iný používateľ\n" +"\n" + +#: src/parse_args.c:593 +#, c-format +msgid "" +"%s - execute a command as another user\n" +"\n" +msgstr "" +"%s - vykonáva príkaz ako iný používateľ\n" +"\n" + +#: src/parse_args.c:598 +#, c-format +msgid "" +"\n" +"Options:\n" +msgstr "" +"\n" +"Voľby:\n" + +#: src/parse_args.c:600 +msgid "use a helper program for password prompting" +msgstr "použije pomocný program na pýtanie hesla " + +#: src/parse_args.c:603 +msgid "use specified BSD authentication type" +msgstr "" + +#: src/parse_args.c:606 +msgid "run command in the background" +msgstr "spustí príkaz na pozadí" + +#: src/parse_args.c:608 +msgid "close all file descriptors >= num" +msgstr "zavrie všetky popisovače súborov >= číslo" + +#: src/parse_args.c:611 +msgid "run command with the specified BSD login class" +msgstr "spustí príkaz s určenou triedou prihlásenia BSD" + +#: src/parse_args.c:614 +msgid "preserve user environment when running command" +msgstr "zachová rozhranie používateľa, keď sa spúšťa príkaz" + +#: src/parse_args.c:616 +msgid "edit files instead of running a command" +msgstr "upraví súbory namiesto spustenia príkazu" + +#: src/parse_args.c:618 +msgid "run command as the specified group name or ID" +msgstr "spustí príkaz ako určený názov skupiny alebo ID" + +#: src/parse_args.c:620 +msgid "set HOME variable to target user's home dir" +msgstr "nastaví premennú HOME do domovského adresára cieľového používateľa" + +#: src/parse_args.c:622 +msgid "display help message and exit" +msgstr "zobrazí správu pomocníka a skončí" + +#: src/parse_args.c:624 +msgid "run command on host (if supported by plugin)" +msgstr "spustí príkaz na hostiteľovi (ak je podporované zásuvným modulom)" + +#: src/parse_args.c:626 +msgid "run login shell as the target user; a command may also be specified" +msgstr "spustí príkazový riadok prihlásenia, príkaz môže byť tiež určený" + +#: src/parse_args.c:628 +msgid "remove timestamp file completely" +msgstr "úplne odstráni súbor časovej značky" + +#: src/parse_args.c:630 +msgid "invalidate timestamp file" +msgstr "urobí súbor časovej značky neplatným" + +#: src/parse_args.c:632 +msgid "list user's privileges or check a specific command; use twice for longer format" +msgstr "vypíše právomoci používateľa, alebo skontroluje určený príkaz; použite dvakrát pre dlhší formát" + +#: src/parse_args.c:634 +msgid "non-interactive mode, no prompts are used" +msgstr "" + +#: src/parse_args.c:636 +msgid "preserve group vector instead of setting to target's" +msgstr "" + +#: src/parse_args.c:638 +msgid "use the specified password prompt" +msgstr "" + +#: src/parse_args.c:641 +msgid "create SELinux security context with specified role" +msgstr "" + +#: src/parse_args.c:644 +msgid "read password from standard input" +msgstr "bude čítať heslo zo štandardného vstupu" + +#: src/parse_args.c:646 +msgid "run shell as the target user; a command may also be specified" +msgstr "" + +#: src/parse_args.c:649 +msgid "create SELinux security context with specified type" +msgstr "" + +#: src/parse_args.c:652 +msgid "in list mode, display privileges for user" +msgstr "v režime výpisu, zobrazí právomoci používateľa" + +#: src/parse_args.c:654 +msgid "run command (or edit file) as specified user name or ID" +msgstr "" + +#: src/parse_args.c:656 +msgid "display version information and exit" +msgstr "" + +#: src/parse_args.c:658 +msgid "update user's timestamp without running a command" +msgstr "" + +#: src/parse_args.c:660 +msgid "stop processing command line arguments" +msgstr "zastaví spracovávanie parametre príkazového riadku" + +#: src/selinux.c:78 +msgid "unable to open audit system" +msgstr "nie je možné otvoriť systém auditu" + +#: src/selinux.c:88 +msgid "unable to send audit message" +msgstr "nie je možné odoslať správu auditu" + +#: src/selinux.c:116 +#, c-format +msgid "unable to fgetfilecon %s" +msgstr "nie je možné vykonať funkciu fgetfilecon na %s" + +#: src/selinux.c:121 +#, c-format +msgid "%s changed labels" +msgstr "" + +#: src/selinux.c:126 +#, c-format +msgid "unable to restore context for %s" +msgstr "nie je možné obnoviť kontext pre %s" + +#: src/selinux.c:166 +#, c-format +msgid "unable to open %s, not relabeling tty" +msgstr "nie je možné otvoriť %s, rozhranie tty nebude mať zmenenú menovku" + +#: src/selinux.c:175 +msgid "unable to get current tty context, not relabeling tty" +msgstr "nie je možné získať aktuálny kontext rozhrania tty, rozhranie tty nebude mať zmenenú menovku" + +#: src/selinux.c:182 +msgid "unable to get new tty context, not relabeling tty" +msgstr "nie je možné získať nový kontext tty, rozhranie tty nebude mať zmenenú menovku" + +#: src/selinux.c:189 +msgid "unable to set new tty context" +msgstr "nie je možné nastaviť nový kontext rozhrania tty" + +#: src/selinux.c:255 +#, c-format +msgid "you must specify a role for type %s" +msgstr "musíte určiť typ roly pre %s" + +#: src/selinux.c:261 +#, c-format +msgid "unable to get default type for role %s" +msgstr "nie je možné získať predvolený typ roly %s" + +#: src/selinux.c:279 +#, c-format +msgid "failed to set new role %s" +msgstr "zlyhalo nastavenie novej roly %s" + +#: src/selinux.c:283 +#, c-format +msgid "failed to set new type %s" +msgstr "zlyhalo nastavenie nového typu %s" + +#: src/selinux.c:295 +#, c-format +msgid "%s is not a valid context" +msgstr "%s nie je platný kontext" + +#: src/selinux.c:330 +msgid "failed to get old_context" +msgstr "zlyhalo získanie old_context" + +#: src/selinux.c:336 +msgid "unable to determine enforcing mode." +msgstr "" + +#: src/selinux.c:353 +#, c-format +msgid "unable to set tty context to %s" +msgstr "nie je možné nastaviť kontext rozhrania tty na %s" + +#: src/selinux.c:392 +#, c-format +msgid "unable to set exec context to %s" +msgstr "nie je možné nastaviť kontext exec na %s" + +#: src/selinux.c:399 +#, c-format +msgid "unable to set key creation context to %s" +msgstr "nie je možné nastaviť kontext tvorby kľúča na %s" + +#: src/sesh.c:77 +msgid "requires at least one argument" +msgstr "vyžaduje aspoň jeden parameter" + +#: src/sesh.c:107 +#, c-format +msgid "unable to run %s as a login shell" +msgstr "nie je možné spustiť %s ako terminál prihlásenia" + +#: src/sesh.c:112 src/sudo.c:1217 +#, c-format +msgid "unable to execute %s" +msgstr "nie je možné vykonať %s" + +#: src/signal.c:68 +#, c-format +msgid "unable to save handler for signal %d" +msgstr "" + +#: src/solaris.c:76 +msgid "resource control limit has been reached" +msgstr "bol dosiahnutý limit ovládania prostriedkov" + +#: src/solaris.c:79 +#, c-format +msgid "user \"%s\" is not a member of project \"%s\"" +msgstr "používateľ „%s“ nie je členom projektu „%s“" + +#: src/solaris.c:83 +msgid "the invoking task is final" +msgstr "vyvolávajúca úloha je konečná" + +#: src/solaris.c:86 +#, c-format +msgid "could not join project \"%s\"" +msgstr "nepodarilo sa vstúpiť do projektu „%s“" + +#: src/solaris.c:91 +#, c-format +msgid "no resource pool accepting default bindings exists for project \"%s\"" +msgstr "" + +#: src/solaris.c:95 +#, c-format +msgid "specified resource pool does not exist for project \"%s\"" +msgstr "" + +#: src/solaris.c:99 +#, c-format +msgid "could not bind to default resource pool for project \"%s\"" +msgstr "" + +#: src/solaris.c:105 +#, c-format +msgid "setproject failed for project \"%s\"" +msgstr "funkcia setproject zlyhala pre projekt „%s“" + +#: src/solaris.c:107 +#, c-format +msgid "warning, resource control assignment failed for project \"%s\"" +msgstr "upozornenie, zlyhalo priradenie ovládania prostriedkov pre projekt „%s“" + +#: src/sudo.c:193 +#, c-format +msgid "Sudo version %s\n" +msgstr "Verzia programu sudo %s\n" + +#: src/sudo.c:195 +#, c-format +msgid "Configure options: %s\n" +msgstr "Voľby konfigurácie: %s\n" + +#: src/sudo.c:203 +msgid "fatal error, unable to load plugins" +msgstr "závažná chyba, nie je možné načítať zásuvné moduly" + +#: src/sudo.c:211 +msgid "unable to initialize policy plugin" +msgstr "nie je možné inicializovať zásuvný modul politiky" + +#: src/sudo.c:267 +#, c-format +msgid "error initializing I/O plugin %s" +msgstr "chyba pri inicializácii vstupno-výstupného zásuvného modulu %s" + +#: src/sudo.c:293 +#, c-format +msgid "unexpected sudo mode 0x%x" +msgstr "neočakávaný režim sudo 0x%x" + +#: src/sudo.c:422 +msgid "unable to get group vector" +msgstr "nie je možné získať vektor skupiny" + +#: src/sudo.c:485 +#, c-format +msgid "unknown uid %u: who are you?" +msgstr "neznámy identifikátor uid %u: kto ste?" + +#: src/sudo.c:812 +#, c-format +msgid "%s must be owned by uid %d and have the setuid bit set" +msgstr "%s musí byť vlastnený identifikátorom uid %d a musí mať nastavený bit setuid" + +#: src/sudo.c:815 +#, 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 "efektívny identifikátor uid nie je %d, je %s na systéme súborov s nastavenou voľbou „nosuid“, alebo na systéme súborov NFS bez právomocí administrátora?" + +#: src/sudo.c:821 +#, c-format +msgid "effective uid is not %d, is sudo installed setuid root?" +msgstr "" + +#: src/sudo.c:952 +#, c-format +msgid "unknown login class %s" +msgstr "neznáma trieda prihlásenia %s" + +#: src/sudo.c:965 +msgid "unable to set user context" +msgstr "nie je možné nastaviť kontext používateľa" + +#: src/sudo.c:979 +msgid "unable to set supplementary group IDs" +msgstr "" + +#: src/sudo.c:986 +#, c-format +msgid "unable to set effective gid to runas gid %u" +msgstr "" + +#: src/sudo.c:992 +#, c-format +msgid "unable to set gid to runas gid %u" +msgstr "" + +#: src/sudo.c:999 +msgid "unable to set process priority" +msgstr "nie je možné nastaviť prioritu procesu" + +#: src/sudo.c:1007 +#, c-format +msgid "unable to change root to %s" +msgstr "nie je možné zmeniť administrátora na %s" + +#: src/sudo.c:1020 src/sudo.c:1026 src/sudo.c:1033 +#, c-format +msgid "unable to change to runas uid (%u, %u)" +msgstr "" + +#: src/sudo.c:1051 +#, c-format +msgid "unable to change directory to %s" +msgstr "nie je možné zmeniť adresár na %s" + +#: src/sudo.c:1112 +#, c-format +msgid "unexpected child termination condition: %d" +msgstr "neočakávaná podmienka prerušenia potomka: %d" + +#: src/sudo.c:1245 +#, c-format +msgid "policy plugin %s is missing the `check_policy' method" +msgstr "zásuvnému modulu politiky %s chýba spôsob „check_policy“" + +#: src/sudo.c:1263 +#, c-format +msgid "policy plugin %s does not support listing privileges" +msgstr "zásuvný modul politiky %s nepodporuje výpis právomocí" + +#: src/sudo.c:1280 +#, c-format +msgid "policy plugin %s does not support the -v option" +msgstr "" + +#: src/sudo.c:1295 +#, c-format +msgid "policy plugin %s does not support the -k/-K options" +msgstr "" + +#: src/sudo_edit.c:238 src/sudo_edit.c:339 +#, c-format +msgid "%s: not a regular file" +msgstr "%s: nie je regulárny súbor" + +#: src/sudo_edit.c:245 +#, c-format +msgid "%s: editing symbolic links is not permitted" +msgstr "%s: upravovanie symbolických odkazov nie je dovolené" + +#: src/sudo_edit.c:276 src/sudo_edit.c:378 +#, c-format +msgid "%s: short write" +msgstr "%s: krátky zápis" + +#: src/sudo_edit.c:340 +#, c-format +msgid "%s left unmodified" +msgstr "%s zostal nezmenený" + +#: src/sudo_edit.c:353 src/sudo_edit.c:539 +#, c-format +msgid "%s unchanged" +msgstr "%s nezmenený" + +#: src/sudo_edit.c:367 src/sudo_edit.c:389 +#, c-format +msgid "unable to write to %s" +msgstr "nie je možné zapísať do %s" + +#: src/sudo_edit.c:368 src/sudo_edit.c:387 src/sudo_edit.c:390 +#: src/sudo_edit.c:564 src/sudo_edit.c:568 +#, c-format +msgid "contents of edit session left in %s" +msgstr "obsah upravovanej relácie zostal v %s" + +#: src/sudo_edit.c:386 +msgid "unable to read temporary file" +msgstr "nie je možné čítať dočasný súbor" + +#: src/sudo_edit.c:469 +msgid "sesh: internal error: odd number of paths" +msgstr "sesh: vnútorná chyba: nepárne čísla ciest" + +#: src/sudo_edit.c:471 +msgid "sesh: unable to create temporary files" +msgstr "sesh: nie je možné vytvoriť dočasné súbory" + +#: src/sudo_edit.c:473 src/sudo_edit.c:571 +#, c-format +msgid "sesh: unknown error %d" +msgstr "sesh: neznáma chyba %d" + +#: src/sudo_edit.c:563 +msgid "unable to copy temporary files back to their original location" +msgstr "nie je možné skopírovať dočasné súbory späť do ich pôvodného umiestnenia" + +#: src/sudo_edit.c:567 +msgid "unable to copy some of the temporary files back to their original location" +msgstr "nie je možné skopírovať niektoré z dočasných súborov späť do ich pôvodného umiestnenia" + +#: src/sudo_edit.c:610 +#, c-format +msgid "unable to change uid to root (%u)" +msgstr "nie je možné zmeniť identifikátor uid na administrátora (%u)" + +#: src/sudo_edit.c:627 +msgid "plugin error: missing file list for sudoedit" +msgstr "chyba zásuvného modulu: chýba zoznam súborov pre sudoedit" + +#: src/sudo_edit.c:668 src/sudo_edit.c:681 +msgid "unable to read the clock" +msgstr "nie je možné čítať hodiny" + +#: src/tgetpass.c:107 +msgid "no tty present and no askpass program specified" +msgstr "" + +#: src/tgetpass.c:116 +msgid "no askpass program specified, try setting SUDO_ASKPASS" +msgstr "" + +#: src/tgetpass.c:276 +#, c-format +msgid "unable to set gid to %u" +msgstr "nie je možné nastaviť identifikátor gid na %u" + +#: src/tgetpass.c:280 +#, c-format +msgid "unable to set uid to %u" +msgstr "nie je možné nastaviť identifikátor uid na %u" + +#: src/tgetpass.c:285 +#, c-format +msgid "unable to run %s" +msgstr "nie je možné spustiť %s" + +#: src/utmp.c:266 +msgid "unable to save stdin" +msgstr "nie je možné uložiť štandardný vstup stdin" + +#: src/utmp.c:268 +msgid "unable to dup2 stdin" +msgstr "" + +#: src/utmp.c:271 +msgid "unable to restore stdin" +msgstr "nie je možné obnoviť štandardný vstup stdin" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/po/sr.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/po/sr.mo differ diff -Nru sudo-1.8.12/po/sr.po sudo-1.8.16/po/sr.po --- sudo-1.8.12/po/sr.po 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/po/sr.po 2016-03-17 16:13:10.000000000 +0000 @@ -1,12 +1,12 @@ # Serbian translations for sudo package. # This file is put in the public domain. -# Мирослав Николић , 2011—2014. +# Мирослав Николић , 2011—2016. msgid "" msgstr "" -"Project-Id-Version: sudo-1.8.11b4\n" -"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-09-04 10:15-0600\n" -"PO-Revision-Date: 2014-09-14 08:20+0200\n" +"Project-Id-Version: sudo-1.8.16b1\n" +"Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" +"POT-Creation-Date: 2016-02-19 15:48-0700\n" +"PO-Revision-Date: 2016-03-05 10:14+0200\n" "Last-Translator: Мирослав Николић \n" "Language-Team: Serbian <(nothing)>\n" "Language: sr\n" @@ -15,298 +15,312 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -#: lib/util/aix.c:92 lib/util/aix.c:151 +#: lib/util/aix.c:85 lib/util/aix.c:164 msgid "unable to open userdb" msgstr "не могу да отворим корисничку базу података" -#: lib/util/aix.c:156 +#: lib/util/aix.c:219 #, c-format msgid "unable to switch to registry \"%s\" for %s" msgstr "не могу да се пребацим на регистар „%s“ за %s" -#: lib/util/aix.c:175 +#: lib/util/aix.c:244 msgid "unable to restore registry" msgstr "не могу да повратим регистар" -#: lib/util/alloc.c:82 lib/util/alloc.c:99 lib/util/alloc.c:120 -#: lib/util/alloc.c:142 lib/util/alloc.c:161 lib/util/alloc.c:184 -msgid "internal error, tried allocate zero bytes" -msgstr "унутрашња грешка, покушах да доделим нула бајта" - -#: lib/util/alloc.c:101 lib/util/alloc.c:123 lib/util/alloc.c:163 -#: lib/util/alloc.c:186 src/net_ifs.c:162 src/net_ifs.c:171 src/net_ifs.c:183 -#: src/net_ifs.c:192 src/net_ifs.c:307 src/net_ifs.c:329 -#, c-format -msgid "internal error, %s overflow" -msgstr "унутрашња грешка, прекорачење функције „%s“" - -#: lib/util/fatal.c:144 -#, c-format -msgid "%s: %s: %s\n" -msgstr "%s: %s: %s\n" - -#: lib/util/fatal.c:148 lib/util/fatal.c:153 -#, c-format -msgid "%s: %s\n" -msgstr "%s: %s\n" - -#: lib/util/gidlist.c:78 src/load_plugins.c:63 src/load_plugins.c:76 -#: src/sudo.c:559 src/sudo.c:578 src/sudo.c:605 src/sudo.c:614 src/sudo.c:623 -#: src/sudo.c:640 src/sudo.c:687 src/sudo.c:697 +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/gidlist.c:74 +#: lib/util/sudo_conf.c:207 lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 +#: lib/util/sudo_conf.c:569 src/conversation.c:75 src/exec.c:863 +#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 +#: src/exec_pty.c:684 src/exec_pty.c:692 src/load_plugins.c:52 +#: src/load_plugins.c:65 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:655 src/sudo.c:665 src/sudo.c:685 src/sudo.c:704 src/sudo.c:713 +#: src/sudo.c:722 src/sudo.c:739 src/sudo.c:780 src/sudo.c:790 src/sudo.c:810 +#: src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 src/sudo.c:1492 +#: src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/util/strsignal.c:50 +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/sudo_conf.c:208 +#: lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 lib/util/sudo_conf.c:569 +#: src/conversation.c:76 src/exec.c:863 src/exec_common.c:107 +#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:684 +#: src/exec_pty.c:692 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:810 src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 +#: src/sudo.c:1492 src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 +msgid "unable to allocate memory" +msgstr "не могу да доделим меморију" + +#: lib/util/strsignal.c:48 msgid "Unknown signal" msgstr "Непознати сигнал" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:65 lib/util/strtonum.c:183 +#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:48 +#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "неисправна вредност" -#: lib/util/strtoid.c:90 lib/util/strtoid.c:118 lib/util/strtomode.c:61 -#: lib/util/strtonum.c:68 lib/util/strtonum.c:195 +#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:54 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "вредност је превелика" -#: lib/util/strtoid.c:96 lib/util/strtomode.c:61 lib/util/strtonum.c:68 -#: lib/util/strtonum.c:189 +#: lib/util/strtoid.c:89 lib/util/strtomode.c:54 lib/util/strtonum.c:61 +#: lib/util/strtonum.c:182 msgid "value too small" msgstr "вредност је премала" -#: lib/util/sudo_conf.c:178 +#: lib/util/sudo_conf.c:223 +#, c-format +msgid "invalid Path value `%s' in %s, line %u" +msgstr "неисправна вредност путање „%s“ у „%s“, %u. ред" + +#: lib/util/sudo_conf.c:389 lib/util/sudo_conf.c:442 #, c-format -msgid "unsupported group source `%s' in %s, line %d" -msgstr "неподржани извор групе „%s“ у „%s“, %d. ред" +msgid "invalid value for %s `%s' in %s, line %u" +msgstr "неисправна вредност за %s „%s“ у „%s“, %u. ред" -#: lib/util/sudo_conf.c:192 +#: lib/util/sudo_conf.c:410 #, c-format -msgid "invalid max groups `%s' in %s, line %d" -msgstr "неисправне највеће групе „%s“ у „%s“, %d. ред" +msgid "unsupported group source `%s' in %s, line %u" +msgstr "неподржани извор групе „%s“ у „%s“, %u. ред" -#: lib/util/sudo_conf.c:407 +#: lib/util/sudo_conf.c:426 +#, c-format +msgid "invalid max groups `%s' in %s, line %u" +msgstr "неисправне највеће групе „%s“ у „%s“, %u. ред" + +#: lib/util/sudo_conf.c:585 #, c-format msgid "unable to stat %s" msgstr "не могу да добијем податке о „%s“" -#: lib/util/sudo_conf.c:410 +#: lib/util/sudo_conf.c:588 #, c-format msgid "%s is not a regular file" msgstr "„%s“ није обична датотека" -#: lib/util/sudo_conf.c:413 +#: lib/util/sudo_conf.c:591 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s је у власништву уиб-а %u, а треба бити %u" -#: lib/util/sudo_conf.c:417 +#: lib/util/sudo_conf.c:595 #, c-format msgid "%s is world writable" msgstr "%s је светски уписив" -#: lib/util/sudo_conf.c:420 +#: lib/util/sudo_conf.c:598 #, c-format msgid "%s is group writable" msgstr "%s је групно уписив" -#: lib/util/sudo_conf.c:430 src/selinux.c:196 src/selinux.c:209 src/sudo.c:328 +#: lib/util/sudo_conf.c:608 src/selinux.c:199 src/selinux.c:212 src/sudo.c:367 #, c-format msgid "unable to open %s" msgstr "не могу да отворим %s" -#: src/exec.c:123 src/exec.c:128 src/exec.c:418 src/exec.c:420 src/exec.c:422 -#: src/exec.c:424 src/exec.c:426 src/exec.c:428 src/exec.c:431 src/exec.c:448 -#: src/exec.c:450 src/exec.c:452 src/exec.c:600 src/exec.c:795 -#: src/exec_pty.c:460 src/exec_pty.c:716 src/exec_pty.c:786 src/exec_pty.c:788 -#: src/exec_pty.c:800 src/exec_pty.c:1288 src/exec_pty.c:1290 -#: src/exec_pty.c:1295 src/exec_pty.c:1297 src/exec_pty.c:1311 -#: src/exec_pty.c:1322 src/exec_pty.c:1324 src/exec_pty.c:1326 -#: src/exec_pty.c:1328 src/exec_pty.c:1330 src/exec_pty.c:1332 -#: src/exec_pty.c:1334 src/signal.c:156 +#: src/exec.c:114 src/exec.c:116 src/exec.c:121 src/exec.c:409 src/exec.c:411 +#: src/exec.c:413 src/exec.c:415 src/exec.c:417 src/exec.c:419 src/exec.c:422 +#: src/exec.c:438 src/exec.c:440 src/exec.c:595 src/exec.c:790 +#: src/exec_pty.c:466 src/exec_pty.c:722 src/exec_pty.c:792 src/exec_pty.c:794 +#: src/exec_pty.c:806 src/exec_pty.c:808 src/exec_pty.c:1289 +#: src/exec_pty.c:1291 src/exec_pty.c:1296 src/exec_pty.c:1298 +#: src/exec_pty.c:1312 src/exec_pty.c:1323 src/exec_pty.c:1325 +#: src/exec_pty.c:1327 src/exec_pty.c:1329 src/exec_pty.c:1331 +#: src/exec_pty.c:1333 src/exec_pty.c:1335 src/signal.c:147 #, c-format msgid "unable to set handler for signal %d" msgstr "не могу да подесим руковаоца за сигнал „%d“" -#: src/exec.c:135 src/exec_pty.c:825 -msgid "policy plugin failed session initialization" -msgstr "није успело покретање сесије прикључка политике" - -#: src/exec.c:140 src/exec_pty.c:841 src/exec_pty.c:1372 src/tgetpass.c:221 +#: src/exec.c:126 src/exec_pty.c:838 src/exec_pty.c:1373 src/tgetpass.c:265 msgid "unable to fork" msgstr "не могу да поделим" -#: src/exec.c:313 src/exec.c:321 src/exec.c:872 src/exec_pty.c:584 -#: src/exec_pty.c:589 src/exec_pty.c:647 src/exec_pty.c:654 src/exec_pty.c:945 -#: src/exec_pty.c:955 src/exec_pty.c:1000 src/exec_pty.c:1007 -#: src/exec_pty.c:1437 src/exec_pty.c:1444 src/exec_pty.c:1451 +#: src/exec.c:304 src/exec.c:312 src/exec.c:868 src/exec_pty.c:604 +#: src/exec_pty.c:611 src/exec_pty.c:654 src/exec_pty.c:659 src/exec_pty.c:946 +#: src/exec_pty.c:956 src/exec_pty.c:1001 src/exec_pty.c:1008 +#: src/exec_pty.c:1438 src/exec_pty.c:1445 src/exec_pty.c:1452 msgid "unable to add event to queue" msgstr "не могу да додам догађај у ред" -#: src/exec.c:401 +#: src/exec.c:392 msgid "unable to create sockets" msgstr "не могу да направим утичнице" -#: src/exec.c:497 +#: src/exec.c:447 +msgid "policy plugin failed session initialization" +msgstr "није успело покретање сесије прикључка политике" + +#: src/exec.c:492 msgid "error in event loop" msgstr "грешка у петљи догађаја" -#: src/exec.c:515 +#: src/exec.c:510 msgid "unable to restore tty label" msgstr "не могу да повратим tty натпис" -#: src/exec.c:608 src/exec_pty.c:494 src/signal.c:95 +#: src/exec.c:603 src/exec_pty.c:498 src/signal.c:86 #, c-format msgid "unable to restore handler for signal %d" msgstr "не могу да повратим руковаоца за сигнал „%d“" -#: src/exec.c:726 src/exec_pty.c:1179 +#: src/exec.c:721 src/exec_pty.c:1180 msgid "error reading from signal pipe" msgstr "грешка у читању из спојке сигнала" -#: src/exec_common.c:73 +#: src/exec_common.c:166 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "не могу да уклоним PRIV_PROC_EXEC из PRIV_LIMIT" -#: src/exec_pty.c:200 +#: src/exec_pty.c:188 msgid "unable to allocate pty" msgstr "не могу да доделим pty" -#: src/exec_pty.c:760 src/exec_pty.c:769 src/exec_pty.c:777 -#: src/exec_pty.c:1280 src/exec_pty.c:1369 src/signal.c:137 src/tgetpass.c:218 +#: src/exec_pty.c:766 src/exec_pty.c:775 src/exec_pty.c:783 +#: src/exec_pty.c:1281 src/exec_pty.c:1370 src/signal.c:128 src/tgetpass.c:261 msgid "unable to create pipe" msgstr "не могу да направим спојку" -#: src/exec_pty.c:816 -msgid "unable to set terminal to raw mode" -msgstr "не могу да подесим терминал у сирови режим" - -#: src/exec_pty.c:1212 +#: src/exec_pty.c:1213 msgid "error reading from pipe" msgstr "грешка у читању из спојке" -#: src/exec_pty.c:1237 +#: src/exec_pty.c:1238 msgid "error reading from socketpair" msgstr "грешка у читању из пара прикључка" -#: src/exec_pty.c:1246 +#: src/exec_pty.c:1247 #, c-format msgid "unexpected reply type on backchannel: %d" msgstr "неочекивана врста одговора на повратном каналу: %d" -#: src/exec_pty.c:1348 +#: src/exec_pty.c:1349 msgid "unable to set controlling tty" msgstr "не могу да подесим контролисање tty" -#: src/load_plugins.c:61 src/load_plugins.c:74 src/load_plugins.c:91 -#: src/load_plugins.c:144 src/load_plugins.c:150 src/load_plugins.c:156 -#: src/load_plugins.c:197 src/load_plugins.c:204 src/load_plugins.c:211 -#: src/load_plugins.c:217 +#: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 +#: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 +#: src/load_plugins.c:170 src/load_plugins.c:178 src/load_plugins.c:185 +#: src/load_plugins.c:191 #, c-format msgid "error in %s, line %d while loading plugin `%s'" msgstr "грешка у „%s“, %d. ред приликом учитавања прикључка „%s“" -#: src/load_plugins.c:93 +#: src/load_plugins.c:87 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" -#: src/load_plugins.c:152 +#: src/load_plugins.c:125 #, c-format msgid "%s must be owned by uid %d" msgstr "%s мора бити у власништву уида %d" -#: src/load_plugins.c:158 +#: src/load_plugins.c:131 #, c-format msgid "%s must be only be writable by owner" msgstr "%s мора бити уписив само од стране власника" -#: src/load_plugins.c:199 +#: src/load_plugins.c:172 #, c-format msgid "unable to load %s: %s" msgstr "не могу да учитам %s: %s" -#: src/load_plugins.c:206 +#: src/load_plugins.c:180 #, c-format msgid "unable to find symbol `%s' in %s" msgstr "не могу да пронађем симбол „%s“ у %s" -#: src/load_plugins.c:213 +#: src/load_plugins.c:187 #, c-format msgid "unknown policy type %d found in %s" msgstr "непозната врста сигурности %d је пронађена у %s" -#: src/load_plugins.c:219 +#: src/load_plugins.c:193 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "пронађено је несагласно главно издање прикључка %d (очекивано је %d) у „%s“" -#: src/load_plugins.c:228 +#: src/load_plugins.c:202 #, c-format msgid "ignoring policy plugin `%s' in %s, line %d" msgstr "занемарујем прикључак сигурности „%s“ у %s, %d. ред" -#: src/load_plugins.c:230 +#: src/load_plugins.c:204 msgid "only a single policy plugin may be specified" msgstr "може бити наведен само један прикључак сигурности" -#: src/load_plugins.c:233 +#: src/load_plugins.c:207 #, c-format msgid "ignoring duplicate policy plugin `%s' in %s, line %d" msgstr "занемарујем удвостручен прикључак сигурности „%s“ у %s, %d. ред" -#: src/load_plugins.c:248 +#: src/load_plugins.c:228 #, c-format msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" msgstr "занемарујем удвостручени У/И прикључак „%s“ у %s, %d. ред" -#: src/load_plugins.c:319 +#: src/load_plugins.c:331 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "прикључак сигурности %s не садржи метод провере_сигурности" -#: src/net_ifs.c:236 -msgid "unable to open socket" -msgstr "не могу да отворим утичницу" +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:476 +#, c-format +msgid "internal error, %s overflow" +msgstr "унутрашња грешка, прекорачење функције „%s“" -#: src/parse_args.c:247 +#: src/parse_args.c:239 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "аргумент уз -C мора бити број већи или једнак 3" -#: src/parse_args.c:409 +#: src/parse_args.c:406 msgid "you may not specify both the `-i' and `-s' options" msgstr "не можете да наведете обе опције „-i“ и „-s“" -#: src/parse_args.c:413 +#: src/parse_args.c:410 msgid "you may not specify both the `-i' and `-E' options" msgstr "не можете да наведете обе опције „-i“ и „-E“" -#: src/parse_args.c:423 +#: src/parse_args.c:420 msgid "the `-E' option is not valid in edit mode" msgstr "опција „-E“ није исправна у режиму уређивања" -#: src/parse_args.c:425 +#: src/parse_args.c:422 msgid "you may not specify environment variables in edit mode" msgstr "не можете да одредите променљиве окружења у режиму уређивања" -#: src/parse_args.c:433 +#: src/parse_args.c:430 msgid "the `-U' option may only be used with the `-l' option" msgstr "опција „-U“ може бити коришћена само са опцијом „-l“" -#: src/parse_args.c:437 +#: src/parse_args.c:434 msgid "the `-A' and `-S' options may not be used together" msgstr "опције „-A“ и „-S“ не могу бити коришћене заједно" -#: src/parse_args.c:520 +#: src/parse_args.c:504 msgid "sudoedit is not supported on this platform" msgstr "„sudoedit“ није подржано на овој платформи" -#: src/parse_args.c:593 +#: src/parse_args.c:577 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:607 +#: src/parse_args.c:591 #, c-format msgid "" "%s - edit files as another user\n" @@ -315,7 +329,7 @@ "%s — уредите датотеке као други корисник\n" "\n" -#: src/parse_args.c:609 +#: src/parse_args.c:593 #, c-format msgid "" "%s - execute a command as another user\n" @@ -324,7 +338,7 @@ "%s — извршите наредбу као други корисник\n" "\n" -#: src/parse_args.c:614 +#: src/parse_args.c:598 #, c-format msgid "" "\n" @@ -333,483 +347,525 @@ "\n" "Опције:\n" -#: src/parse_args.c:616 +#: src/parse_args.c:600 msgid "use a helper program for password prompting" msgstr "користи програм испомоћи за упит лозинке" -#: src/parse_args.c:619 +#: src/parse_args.c:603 msgid "use specified BSD authentication type" msgstr "користи наведену врсту БСД потврде идентитета" -#: src/parse_args.c:622 +#: src/parse_args.c:606 msgid "run command in the background" msgstr "покреће наредбу у позадини" -#: src/parse_args.c:624 +#: src/parse_args.c:608 msgid "close all file descriptors >= num" msgstr "затвара све описнике датотеке >= fd" -#: src/parse_args.c:627 +#: src/parse_args.c:611 msgid "run command with the specified BSD login class" msgstr "покреће наредбу са наведеним разредом БСД пријаве" -#: src/parse_args.c:630 +#: src/parse_args.c:614 msgid "preserve user environment when running command" msgstr "чува корисничко окружење приликом покретања наредбе" -#: src/parse_args.c:632 +#: src/parse_args.c:616 msgid "edit files instead of running a command" msgstr "уређује датотеке уместо да изврши наредбу" -#: src/parse_args.c:634 +#: src/parse_args.c:618 msgid "run command as the specified group name or ID" msgstr "извршава наредбу као наведени назив групе или ИБ" -#: src/parse_args.c:636 +#: src/parse_args.c:620 msgid "set HOME variable to target user's home dir" msgstr "подешава променљиву ЛИЧНО у циљну корисничку личну фасциклу" -#: src/parse_args.c:638 +#: src/parse_args.c:622 msgid "display help message and exit" msgstr "приказује поруку помоћи и излази" -#: src/parse_args.c:640 +#: src/parse_args.c:624 msgid "run command on host (if supported by plugin)" msgstr "покреће наредбу на домаћину (ако је подржано прикључком)" -#: src/parse_args.c:642 +#: src/parse_args.c:626 msgid "run login shell as the target user; a command may also be specified" msgstr "покреће љуску пријаве као крајњи корисник; наредба може такође бити наведена" -#: src/parse_args.c:644 +#: src/parse_args.c:628 msgid "remove timestamp file completely" msgstr "потпуно уклања датотеку записа датума и времена" -#: src/parse_args.c:646 +#: src/parse_args.c:630 msgid "invalidate timestamp file" msgstr "чини неисправном датотеку датума и времена" -#: src/parse_args.c:648 +#: src/parse_args.c:632 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "исписује привилегије корисника или проверава посебну наредбу; користи се двапута за дуже записе" -#: src/parse_args.c:650 +#: src/parse_args.c:634 msgid "non-interactive mode, no prompts are used" msgstr "немеђудејствени режим, не користи упите" -#: src/parse_args.c:652 +#: src/parse_args.c:636 msgid "preserve group vector instead of setting to target's" msgstr "чува вектор групе уместо да подеси на циљеве" -#: src/parse_args.c:654 +#: src/parse_args.c:638 msgid "use the specified password prompt" msgstr "користи упит наведене лозинке" -#: src/parse_args.c:657 +#: src/parse_args.c:641 msgid "create SELinux security context with specified role" msgstr "ствара СЕЛинукс сигурносни контекст са наведеном улогом" -#: src/parse_args.c:660 +#: src/parse_args.c:644 msgid "read password from standard input" msgstr "чита лозинку са стандардног улаза" -#: src/parse_args.c:662 +#: src/parse_args.c:646 msgid "run shell as the target user; a command may also be specified" msgstr "покреће љуску као крајњи корисник; наредба такође може бити наведена" -#: src/parse_args.c:665 +#: src/parse_args.c:649 msgid "create SELinux security context with specified type" msgstr "ствара СЕЛинукс сигурносни контекст са наведеном улогом" -#: src/parse_args.c:668 +#: src/parse_args.c:652 msgid "in list mode, display privileges for user" msgstr "у режиму списка, приказује привилегије за корисника" -#: src/parse_args.c:670 +#: src/parse_args.c:654 msgid "run command (or edit file) as specified user name or ID" msgstr "покреће наредбу (или уређује датотеку) као наведени корисник" -#: src/parse_args.c:672 +#: src/parse_args.c:656 msgid "display version information and exit" msgstr "приказује податке о издању и излази" -#: src/parse_args.c:674 +#: src/parse_args.c:658 msgid "update user's timestamp without running a command" msgstr "освежава кориснички запис датума и времена без покретања наредбе" -#: src/parse_args.c:676 +#: src/parse_args.c:660 msgid "stop processing command line arguments" msgstr "зауставља обрађивање аргумената линије наредби" -#: src/selinux.c:77 +#: src/selinux.c:78 msgid "unable to open audit system" msgstr "не могу да отворим аудит систем" -#: src/selinux.c:85 +#: src/selinux.c:88 msgid "unable to send audit message" msgstr "не могу да пошаљем аудит поруку" -#: src/selinux.c:113 +#: src/selinux.c:116 #, c-format msgid "unable to fgetfilecon %s" msgstr "не могу да добавим контекст отворене датотеке %s" -#: src/selinux.c:118 +#: src/selinux.c:121 #, c-format msgid "%s changed labels" msgstr "%s измењена натписа" -#: src/selinux.c:123 +#: src/selinux.c:126 #, c-format msgid "unable to restore context for %s" msgstr "не могу да повратим контекст за %s" -#: src/selinux.c:163 +#: src/selinux.c:166 #, c-format msgid "unable to open %s, not relabeling tty" msgstr "не могу да отворим %s, није тту за поновно натписивање" -#: src/selinux.c:172 +#: src/selinux.c:175 msgid "unable to get current tty context, not relabeling tty" msgstr "не могу да добавим текући тту контекст, није тту за поновно натписивање" -#: src/selinux.c:179 +#: src/selinux.c:182 msgid "unable to get new tty context, not relabeling tty" msgstr "не могу да добавим нови тту контекст, није тту за поновно натписивање" -#: src/selinux.c:186 +#: src/selinux.c:189 msgid "unable to set new tty context" msgstr "не могу да подесим нови тту контекст" -#: src/selinux.c:252 +#: src/selinux.c:255 #, c-format msgid "you must specify a role for type %s" msgstr "морате да наведете улогу за врсту %s" -#: src/selinux.c:258 +#: src/selinux.c:261 #, c-format msgid "unable to get default type for role %s" msgstr "не могу да добавим основну врсту за улогу %s" -#: src/selinux.c:276 +#: src/selinux.c:279 #, c-format msgid "failed to set new role %s" msgstr "нисам успео да подесим нову улогу %s" -#: src/selinux.c:280 +#: src/selinux.c:283 #, c-format msgid "failed to set new type %s" msgstr "нисам успео да подесим нову врсту %s" -#: src/selinux.c:289 +#: src/selinux.c:295 #, c-format msgid "%s is not a valid context" msgstr "%s није исправан контекст" -#: src/selinux.c:324 +#: src/selinux.c:330 msgid "failed to get old_context" msgstr "нисам успео да добавим стари_контекст" -#: src/selinux.c:330 +#: src/selinux.c:336 msgid "unable to determine enforcing mode." msgstr "не могу да одредим режим присиљавања." -#: src/selinux.c:347 +#: src/selinux.c:353 #, c-format msgid "unable to set tty context to %s" msgstr "не могу да подесим тту контекст на %s" -#: src/selinux.c:386 +#: src/selinux.c:392 #, c-format msgid "unable to set exec context to %s" msgstr "не могу да подесим извршни контекст за %s" -#: src/selinux.c:393 +#: src/selinux.c:399 #, c-format 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:104 +#: src/sesh.c:106 +#, c-format +msgid "invalid file descriptor number: %s" +msgstr "неисправан број описника датотеке: %s" + +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "не могу да покренем „%s“ као шкољку пријављивања" -#: src/sesh.c:109 src/sudo.c:1106 +#: src/sesh.c:125 src/sudo.c:1274 #, c-format msgid "unable to execute %s" msgstr "не могу да извршим %s" -#: src/signal.c:77 +#: src/signal.c:68 #, c-format msgid "unable to save handler for signal %d" msgstr "не могу да сачувам руковаоца за сигнал „%d“" -#: src/solaris.c:88 +#: src/solaris.c:76 msgid "resource control limit has been reached" msgstr "ограничење контроле ресурса је достигнуто" -#: src/solaris.c:91 +#: src/solaris.c:79 #, c-format msgid "user \"%s\" is not a member of project \"%s\"" msgstr "корисник „%s“ није члан пројекта „%s“" -#: src/solaris.c:95 +#: src/solaris.c:83 msgid "the invoking task is final" msgstr "задатак призивања је завршни" -#: src/solaris.c:98 +#: src/solaris.c:86 #, c-format msgid "could not join project \"%s\"" msgstr "не могу да приступим пројекту „%s“" -#: src/solaris.c:103 +#: src/solaris.c:91 #, c-format msgid "no resource pool accepting default bindings exists for project \"%s\"" msgstr "не постоји депо извора који прихвата основне пречице за пројекат „%s“" -#: src/solaris.c:107 +#: src/solaris.c:95 #, c-format msgid "specified resource pool does not exist for project \"%s\"" msgstr "наведени депо извора не постоји за пројекат „%s“" -#: src/solaris.c:111 +#: src/solaris.c:99 #, c-format msgid "could not bind to default resource pool for project \"%s\"" msgstr "не могу да се повежем са основним депоом извора за пројекат „%s“" -#: src/solaris.c:117 +#: src/solaris.c:105 #, c-format msgid "setproject failed for project \"%s\"" msgstr "подешавање пројекта није успело за пројекат „%s“" -#: src/solaris.c:119 +#: src/solaris.c:107 #, c-format msgid "warning, resource control assignment failed for project \"%s\"" msgstr "упозорење, није успело додељивање контроле ресурса за пројекат „%s“" -#: src/sudo.c:196 +#: src/sudo.c:212 #, c-format msgid "Sudo version %s\n" msgstr "Судо издање %s\n" -#: src/sudo.c:198 +#: src/sudo.c:214 #, c-format msgid "Configure options: %s\n" msgstr "Опције подешавања: %s\n" -#: src/sudo.c:203 +#: src/sudo.c:222 msgid "fatal error, unable to load plugins" msgstr "кобна грешка, не могу да учитам прикључке" -#: src/sudo.c:211 +#: src/sudo.c:230 msgid "unable to initialize policy plugin" msgstr "не могу да започнем прикључак сигурности" -#: src/sudo.c:267 +#: src/sudo.c:276 +msgid "plugin did not return a command to execute" +msgstr "прикључак није вратио наредбу за извршавање" + +#: src/sudo.c:292 #, c-format msgid "error initializing I/O plugin %s" msgstr "грешка приликом покретања У/И прикључка %s" -#: src/sudo.c:293 +#: src/sudo.c:318 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "неочекивани судо режим 0x%x" -#: src/sudo.c:413 +#: src/sudo.c:461 msgid "unable to get group vector" msgstr "не могу да добавим вектор групе" -#: src/sudo.c:465 +#: src/sudo.c:522 #, c-format msgid "unknown uid %u: who are you?" msgstr "непознати уид %u: ко сте ви?" -#: src/sudo.c:772 +#: src/sudo.c:859 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s мора бити власништвo уида %d и треба да има подешен бит „setuid“" -#: src/sudo.c:775 +#: src/sudo.c:862 #, 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:781 +#: src/sudo.c:868 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "стварни уид није %d, већ сетуид администратор инсталиран судоом?" -#: src/sudo.c:910 +#: src/sudo.c:999 #, c-format msgid "unknown login class %s" msgstr "непозната класа пријаве %s" -#: src/sudo.c:923 +#: src/sudo.c:1012 msgid "unable to set user context" msgstr "не могу да подесим кориснички контекст" -#: src/sudo.c:937 +#: src/sudo.c:1026 msgid "unable to set supplementary group IDs" msgstr "не могу да подесим додатне ИБ-ове групе" -#: src/sudo.c:944 +#: src/sudo.c:1033 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "не могу да подесим ефективан гид да се покрене_као гид %u" -#: src/sudo.c:950 +#: src/sudo.c:1039 #, c-format msgid "unable to set gid to runas gid %u" msgstr "не могу да подесим гид да се покрене као гид %u" -#: src/sudo.c:957 +#: src/sudo.c:1046 msgid "unable to set process priority" msgstr "не могу да подесим приоритет процеса" -#: src/sudo.c:965 +#: src/sudo.c:1054 #, c-format msgid "unable to change root to %s" msgstr "не могу да променим администратора на %s" -#: src/sudo.c:978 src/sudo.c:984 src/sudo.c:990 +#: src/sudo.c:1067 src/sudo.c:1073 src/sudo.c:1080 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "не могу да се пребацим у покрени_као уид (%u, %u)" -#: src/sudo.c:1007 +#: src/sudo.c:1098 #, c-format msgid "unable to change directory to %s" msgstr "не могу да променим директоријум у %s" -#: src/sudo.c:1068 +#: src/sudo.c:1156 #, c-format msgid "unexpected child termination condition: %d" msgstr "неочекивани услов завршетка потпроцеса: %d" -#: src/sudo.c:1127 +#: src/sudo.c:1302 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "прикључак сигурности %s не садржи метод „check_policy“" -#: src/sudo.c:1140 +#: src/sudo.c:1320 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "прикључак сигурности %s не подржава привилегије исписивања" -#: src/sudo.c:1152 +#: src/sudo.c:1337 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "прикључак сигурности %s не подржава опцију -v" -#: src/sudo.c:1164 +#: src/sudo.c:1352 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "прикључак сигурности %s не подржава опције -k/-K" -#: src/sudo_edit.c:203 src/sudo_edit.c:294 +#: src/sudo_edit.c:181 +msgid "unable to restore current working directory" +msgstr "не могу да повратим текући радни директоријум" + +#: src/sudo_edit.c:526 src/sudo_edit.c:630 #, c-format msgid "%s: not a regular file" msgstr "%s: није обична датотека" -#: src/sudo_edit.c:230 src/sudo_edit.c:332 +#: src/sudo_edit.c:533 +#, c-format +msgid "%s: editing symbolic links is not permitted" +msgstr "%s: уређивање симболичких веза није допуштено" + +#: src/sudo_edit.c:536 +#, c-format +msgid "%s: editing files in a writable directory is not permitted" +msgstr "%s: уређивање датотека у уписивом директоријуму није допуштено" + +#: src/sudo_edit.c:567 src/sudo_edit.c:669 #, c-format msgid "%s: short write" msgstr "%s: кратак упис" -#: src/sudo_edit.c:295 +#: src/sudo_edit.c:631 #, c-format msgid "%s left unmodified" msgstr "%s је остао неизмењен" -#: src/sudo_edit.c:308 src/sudo_edit.c:483 +#: src/sudo_edit.c:644 src/sudo_edit.c:830 #, c-format msgid "%s unchanged" msgstr "%s је непромењен" -#: src/sudo_edit.c:321 src/sudo_edit.c:343 +#: src/sudo_edit.c:658 src/sudo_edit.c:680 #, c-format msgid "unable to write to %s" msgstr "не могу да упишем у %s" -#: src/sudo_edit.c:322 src/sudo_edit.c:341 src/sudo_edit.c:344 -#: src/sudo_edit.c:508 src/sudo_edit.c:512 +#: src/sudo_edit.c:659 src/sudo_edit.c:678 src/sudo_edit.c:681 +#: src/sudo_edit.c:855 src/sudo_edit.c:859 #, c-format msgid "contents of edit session left in %s" msgstr "садржај сесије уређивања је остао у %s" -#: src/sudo_edit.c:340 +#: src/sudo_edit.c:677 msgid "unable to read temporary file" msgstr "не могу да прочитам привремену датотеку" -#: src/sudo_edit.c:417 +#: src/sudo_edit.c:760 msgid "sesh: internal error: odd number of paths" msgstr "sesh: унутрашња грешка: непарн број путања" -#: src/sudo_edit.c:419 +#: src/sudo_edit.c:762 msgid "sesh: unable to create temporary files" msgstr "sesh: не могу да направим привремене датотеке" -#: src/sudo_edit.c:421 src/sudo_edit.c:515 +#: src/sudo_edit.c:764 src/sudo_edit.c:862 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: непозната грешка „%d“" -#: src/sudo_edit.c:507 +#: src/sudo_edit.c:854 msgid "unable to copy temporary files back to their original location" msgstr "не могу да умножим привремене датотеке назад на њихова првобитна места" -#: src/sudo_edit.c:511 +#: src/sudo_edit.c:858 msgid "unable to copy some of the temporary files back to their original location" msgstr "не могу да умножим неке од привремених датотека назад на њихова првобитна места" -#: src/sudo_edit.c:554 +#: src/sudo_edit.c:901 #, c-format msgid "unable to change uid to root (%u)" msgstr "не могу да променим уид у администратора (%u)" -#: src/sudo_edit.c:571 +#: src/sudo_edit.c:918 msgid "plugin error: missing file list for sudoedit" msgstr "грешка прикључка: недостаје датотеа списка за уређивање судоа" -#: src/tgetpass.c:90 +#: src/sudo_edit.c:959 src/sudo_edit.c:972 +msgid "unable to read the clock" +msgstr "не могу да прочитам сат" + +#: src/tgetpass.c:107 msgid "no tty present and no askpass program specified" msgstr "тту не постоји и није наведен програм за пропуштање" -#: src/tgetpass.c:99 +#: src/tgetpass.c:116 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "није наведен програм за пропуштање, покушајте да подесите SUDO_ASKPASS" -#: src/tgetpass.c:232 +#: src/tgetpass.c:276 #, c-format msgid "unable to set gid to %u" msgstr "не могу да подесим гид у %u" -#: src/tgetpass.c:236 +#: src/tgetpass.c:280 #, c-format msgid "unable to set uid to %u" msgstr "не могу да подесим уид у %u" -#: src/tgetpass.c:241 +#: src/tgetpass.c:285 #, c-format msgid "unable to run %s" msgstr "не могу да покренем %s" -#: src/utmp.c:278 +#: src/utmp.c:266 msgid "unable to save stdin" msgstr "не могу да сачувам стандардни улаз" -#: src/utmp.c:280 +#: src/utmp.c:268 msgid "unable to dup2 stdin" msgstr "не могу да дуп2 стандардни улаз" -#: src/utmp.c:283 +#: src/utmp.c:271 msgid "unable to restore stdin" msgstr "не могу да повратим стандардни улаз" +#~ msgid "internal error, tried allocate zero bytes" +#~ msgstr "унутрашња грешка, покушах да доделим нула бајта" + +#~ msgid "unable to set terminal to raw mode" +#~ msgstr "не могу да подесим терминал у сирови режим" + +#~ msgid "unable to open socket" +#~ msgstr "не могу да отворим утичницу" + +#~ msgid "%s: %s: %s\n" +#~ msgstr "%s: %s: %s\n" + +#~ msgid "%s: %s\n" +#~ msgstr "%s: %s\n" + #~ msgid "internal error, tried to emalloc2(0)" #~ msgstr "унутрашња грешка, покушах да обавим „emalloc2(0)“" diff -Nru sudo-1.8.12/po/sudo.pot sudo-1.8.16/po/sudo.pot --- sudo-1.8.12/po/sudo.pot 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/po/sudo.pot 2016-03-17 16:13:11.000000000 +0000 @@ -1,13 +1,13 @@ # Portable object template file for sudo # This file is put in the public domain. -# Todd C. Miller , 2011-2014 +# Todd C. Miller , 2011-2015 # #, fuzzy msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.12\n" -"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-11-20 13:33-0700\n" +"Project-Id-Version: sudo 1.8.16\n" +"Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" +"POT-Creation-Date: 2016-02-19 15:48-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -16,796 +16,838 @@ "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: lib/util/aix.c:92 lib/util/aix.c:151 +#: lib/util/aix.c:85 lib/util/aix.c:164 msgid "unable to open userdb" msgstr "" -#: lib/util/aix.c:156 +#: lib/util/aix.c:219 #, c-format msgid "unable to switch to registry \"%s\" for %s" msgstr "" -#: lib/util/aix.c:175 +#: lib/util/aix.c:244 msgid "unable to restore registry" msgstr "" -#: lib/util/alloc.c:68 lib/util/alloc.c:85 lib/util/alloc.c:106 -#: lib/util/alloc.c:128 lib/util/alloc.c:147 lib/util/alloc.c:170 -msgid "internal error, tried allocate zero bytes" -msgstr "" - -#: lib/util/alloc.c:87 lib/util/alloc.c:109 lib/util/alloc.c:149 -#: lib/util/alloc.c:172 src/net_ifs.c:174 src/net_ifs.c:191 src/net_ifs.c:325 +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/gidlist.c:74 +#: lib/util/sudo_conf.c:207 lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 +#: lib/util/sudo_conf.c:569 src/conversation.c:75 src/exec.c:863 +#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 +#: src/exec_pty.c:684 src/exec_pty.c:692 src/load_plugins.c:52 +#: src/load_plugins.c:65 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:655 src/sudo.c:665 src/sudo.c:685 src/sudo.c:704 src/sudo.c:713 +#: src/sudo.c:722 src/sudo.c:739 src/sudo.c:780 src/sudo.c:790 src/sudo.c:810 +#: src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 src/sudo.c:1492 +#: src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 #, c-format -msgid "internal error, %s overflow" +msgid "%s: %s" msgstr "" -#: lib/util/gidlist.c:78 src/load_plugins.c:61 src/load_plugins.c:74 -#: src/sudo.c:572 src/sudo.c:591 src/sudo.c:618 src/sudo.c:627 src/sudo.c:636 -#: src/sudo.c:653 src/sudo.c:700 src/sudo.c:710 -#, c-format -msgid "%s: %s" +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/sudo_conf.c:208 +#: lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 lib/util/sudo_conf.c:569 +#: src/conversation.c:76 src/exec.c:863 src/exec_common.c:107 +#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:684 +#: src/exec_pty.c:692 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:810 src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 +#: src/sudo.c:1492 src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 +msgid "unable to allocate memory" msgstr "" -#: lib/util/strsignal.c:50 +#: lib/util/strsignal.c:48 msgid "Unknown signal" msgstr "" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:65 lib/util/strtonum.c:183 +#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:48 +#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "" -#: lib/util/strtoid.c:90 lib/util/strtoid.c:118 lib/util/strtomode.c:61 -#: lib/util/strtonum.c:68 lib/util/strtonum.c:195 +#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:54 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "" -#: lib/util/strtoid.c:96 lib/util/strtomode.c:61 lib/util/strtonum.c:68 -#: lib/util/strtonum.c:189 +#: lib/util/strtoid.c:89 lib/util/strtomode.c:54 lib/util/strtonum.c:61 +#: lib/util/strtonum.c:182 msgid "value too small" msgstr "" -#: lib/util/sudo_conf.c:201 +#: lib/util/sudo_conf.c:223 #, c-format msgid "invalid Path value `%s' in %s, line %u" msgstr "" -#: lib/util/sudo_conf.c:338 lib/util/sudo_conf.c:391 +#: lib/util/sudo_conf.c:389 lib/util/sudo_conf.c:442 #, c-format msgid "invalid value for %s `%s' in %s, line %u" msgstr "" -#: lib/util/sudo_conf.c:359 +#: lib/util/sudo_conf.c:410 #, c-format msgid "unsupported group source `%s' in %s, line %u" msgstr "" -#: lib/util/sudo_conf.c:375 +#: lib/util/sudo_conf.c:426 #, c-format msgid "invalid max groups `%s' in %s, line %u" msgstr "" -#: lib/util/sudo_conf.c:525 +#: lib/util/sudo_conf.c:585 #, c-format msgid "unable to stat %s" msgstr "" -#: lib/util/sudo_conf.c:528 +#: lib/util/sudo_conf.c:588 #, c-format msgid "%s is not a regular file" msgstr "" -#: lib/util/sudo_conf.c:531 +#: lib/util/sudo_conf.c:591 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "" -#: lib/util/sudo_conf.c:535 +#: lib/util/sudo_conf.c:595 #, c-format msgid "%s is world writable" msgstr "" -#: lib/util/sudo_conf.c:538 +#: lib/util/sudo_conf.c:598 #, c-format msgid "%s is group writable" msgstr "" -#: lib/util/sudo_conf.c:548 src/selinux.c:196 src/selinux.c:209 src/sudo.c:341 +#: lib/util/sudo_conf.c:608 src/selinux.c:199 src/selinux.c:212 src/sudo.c:367 #, c-format msgid "unable to open %s" msgstr "" -#: src/exec.c:123 src/exec.c:125 src/exec.c:130 src/exec.c:418 src/exec.c:420 -#: src/exec.c:422 src/exec.c:424 src/exec.c:426 src/exec.c:429 src/exec.c:446 -#: src/exec.c:448 src/exec.c:450 src/exec.c:605 src/exec.c:800 -#: src/exec_pty.c:480 src/exec_pty.c:736 src/exec_pty.c:806 src/exec_pty.c:808 -#: src/exec_pty.c:820 src/exec_pty.c:822 src/exec_pty.c:1303 -#: src/exec_pty.c:1305 src/exec_pty.c:1310 src/exec_pty.c:1312 -#: src/exec_pty.c:1326 src/exec_pty.c:1337 src/exec_pty.c:1339 -#: src/exec_pty.c:1341 src/exec_pty.c:1343 src/exec_pty.c:1345 -#: src/exec_pty.c:1347 src/exec_pty.c:1349 src/signal.c:156 +#: src/exec.c:114 src/exec.c:116 src/exec.c:121 src/exec.c:409 src/exec.c:411 +#: src/exec.c:413 src/exec.c:415 src/exec.c:417 src/exec.c:419 src/exec.c:422 +#: src/exec.c:438 src/exec.c:440 src/exec.c:595 src/exec.c:790 +#: src/exec_pty.c:466 src/exec_pty.c:722 src/exec_pty.c:792 src/exec_pty.c:794 +#: src/exec_pty.c:806 src/exec_pty.c:808 src/exec_pty.c:1289 +#: src/exec_pty.c:1291 src/exec_pty.c:1296 src/exec_pty.c:1298 +#: src/exec_pty.c:1312 src/exec_pty.c:1323 src/exec_pty.c:1325 +#: src/exec_pty.c:1327 src/exec_pty.c:1329 src/exec_pty.c:1331 +#: src/exec_pty.c:1333 src/exec_pty.c:1335 src/signal.c:147 #, c-format msgid "unable to set handler for signal %d" msgstr "" -#: src/exec.c:135 src/exec_pty.c:856 src/exec_pty.c:1387 src/tgetpass.c:223 +#: src/exec.c:126 src/exec_pty.c:838 src/exec_pty.c:1373 src/tgetpass.c:265 msgid "unable to fork" msgstr "" -#: src/exec.c:313 src/exec.c:321 src/exec.c:877 src/exec_pty.c:604 -#: src/exec_pty.c:609 src/exec_pty.c:667 src/exec_pty.c:674 src/exec_pty.c:960 -#: src/exec_pty.c:970 src/exec_pty.c:1015 src/exec_pty.c:1022 -#: src/exec_pty.c:1452 src/exec_pty.c:1459 src/exec_pty.c:1466 +#: src/exec.c:304 src/exec.c:312 src/exec.c:868 src/exec_pty.c:604 +#: src/exec_pty.c:611 src/exec_pty.c:654 src/exec_pty.c:659 src/exec_pty.c:946 +#: src/exec_pty.c:956 src/exec_pty.c:1001 src/exec_pty.c:1008 +#: src/exec_pty.c:1438 src/exec_pty.c:1445 src/exec_pty.c:1452 msgid "unable to add event to queue" msgstr "" -#: src/exec.c:401 +#: src/exec.c:392 msgid "unable to create sockets" msgstr "" -#: src/exec.c:457 +#: src/exec.c:447 msgid "policy plugin failed session initialization" msgstr "" -#: src/exec.c:502 +#: src/exec.c:492 msgid "error in event loop" msgstr "" -#: src/exec.c:520 +#: src/exec.c:510 msgid "unable to restore tty label" msgstr "" -#: src/exec.c:613 src/exec_pty.c:514 src/signal.c:95 +#: src/exec.c:603 src/exec_pty.c:498 src/signal.c:86 #, c-format msgid "unable to restore handler for signal %d" msgstr "" -#: src/exec.c:731 src/exec_pty.c:1194 +#: src/exec.c:721 src/exec_pty.c:1180 msgid "error reading from signal pipe" msgstr "" -#: src/exec_common.c:73 +#: src/exec_common.c:166 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "" -#: src/exec_pty.c:200 +#: src/exec_pty.c:188 msgid "unable to allocate pty" msgstr "" -#: src/exec_pty.c:780 src/exec_pty.c:789 src/exec_pty.c:797 -#: src/exec_pty.c:1295 src/exec_pty.c:1384 src/signal.c:137 src/tgetpass.c:219 +#: src/exec_pty.c:766 src/exec_pty.c:775 src/exec_pty.c:783 src/exec_pty.c:1281 +#: src/exec_pty.c:1370 src/signal.c:128 src/tgetpass.c:261 msgid "unable to create pipe" msgstr "" -#: src/exec_pty.c:838 -msgid "unable to set terminal to raw mode" -msgstr "" - -#: src/exec_pty.c:1227 +#: src/exec_pty.c:1213 msgid "error reading from pipe" msgstr "" -#: src/exec_pty.c:1252 +#: src/exec_pty.c:1238 msgid "error reading from socketpair" msgstr "" -#: src/exec_pty.c:1261 +#: src/exec_pty.c:1247 #, c-format msgid "unexpected reply type on backchannel: %d" msgstr "" -#: src/exec_pty.c:1363 +#: src/exec_pty.c:1349 msgid "unable to set controlling tty" msgstr "" -#: src/load_plugins.c:59 src/load_plugins.c:72 src/load_plugins.c:89 -#: src/load_plugins.c:142 src/load_plugins.c:148 src/load_plugins.c:154 -#: src/load_plugins.c:195 src/load_plugins.c:202 src/load_plugins.c:209 -#: src/load_plugins.c:215 +#: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 +#: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 +#: src/load_plugins.c:170 src/load_plugins.c:178 src/load_plugins.c:185 +#: src/load_plugins.c:191 #, c-format msgid "error in %s, line %d while loading plugin `%s'" msgstr "" -#: src/load_plugins.c:91 +#: src/load_plugins.c:87 #, c-format msgid "%s%s: %s" msgstr "" -#: src/load_plugins.c:150 +#: src/load_plugins.c:125 #, c-format msgid "%s must be owned by uid %d" msgstr "" -#: src/load_plugins.c:156 +#: src/load_plugins.c:131 #, c-format msgid "%s must be only be writable by owner" msgstr "" -#: src/load_plugins.c:197 +#: src/load_plugins.c:172 #, c-format msgid "unable to load %s: %s" msgstr "" -#: src/load_plugins.c:204 +#: src/load_plugins.c:180 #, c-format msgid "unable to find symbol `%s' in %s" msgstr "" -#: src/load_plugins.c:211 +#: src/load_plugins.c:187 #, c-format msgid "unknown policy type %d found in %s" msgstr "" -#: src/load_plugins.c:217 +#: src/load_plugins.c:193 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "" -#: src/load_plugins.c:226 +#: src/load_plugins.c:202 #, c-format msgid "ignoring policy plugin `%s' in %s, line %d" msgstr "" -#: src/load_plugins.c:228 +#: src/load_plugins.c:204 msgid "only a single policy plugin may be specified" msgstr "" -#: src/load_plugins.c:231 +#: src/load_plugins.c:207 #, c-format msgid "ignoring duplicate policy plugin `%s' in %s, line %d" msgstr "" -#: src/load_plugins.c:249 +#: src/load_plugins.c:228 #, c-format msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" msgstr "" -#: src/load_plugins.c:338 +#: src/load_plugins.c:331 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "" -#: src/net_ifs.c:236 -msgid "unable to open socket" +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:476 +#, c-format +msgid "internal error, %s overflow" msgstr "" -#: src/parse_args.c:241 +#: src/parse_args.c:239 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "" -#: src/parse_args.c:403 +#: src/parse_args.c:406 msgid "you may not specify both the `-i' and `-s' options" msgstr "" -#: src/parse_args.c:407 +#: src/parse_args.c:410 msgid "you may not specify both the `-i' and `-E' options" msgstr "" -#: src/parse_args.c:417 +#: src/parse_args.c:420 msgid "the `-E' option is not valid in edit mode" msgstr "" -#: src/parse_args.c:419 +#: src/parse_args.c:422 msgid "you may not specify environment variables in edit mode" msgstr "" -#: src/parse_args.c:427 +#: src/parse_args.c:430 msgid "the `-U' option may only be used with the `-l' option" msgstr "" -#: src/parse_args.c:431 +#: src/parse_args.c:434 msgid "the `-A' and `-S' options may not be used together" msgstr "" -#: src/parse_args.c:497 +#: src/parse_args.c:504 msgid "sudoedit is not supported on this platform" msgstr "" -#: src/parse_args.c:570 +#: src/parse_args.c:577 msgid "" "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "" -#: src/parse_args.c:584 +#: src/parse_args.c:591 #, c-format msgid "" "%s - edit files as another user\n" "\n" msgstr "" -#: src/parse_args.c:586 +#: src/parse_args.c:593 #, c-format msgid "" "%s - execute a command as another user\n" "\n" msgstr "" -#: src/parse_args.c:591 +#: src/parse_args.c:598 #, c-format msgid "" "\n" "Options:\n" msgstr "" -#: src/parse_args.c:593 +#: src/parse_args.c:600 msgid "use a helper program for password prompting" msgstr "" -#: src/parse_args.c:596 +#: src/parse_args.c:603 msgid "use specified BSD authentication type" msgstr "" -#: src/parse_args.c:599 +#: src/parse_args.c:606 msgid "run command in the background" msgstr "" -#: src/parse_args.c:601 +#: src/parse_args.c:608 msgid "close all file descriptors >= num" msgstr "" -#: src/parse_args.c:604 +#: src/parse_args.c:611 msgid "run command with the specified BSD login class" msgstr "" -#: src/parse_args.c:607 +#: src/parse_args.c:614 msgid "preserve user environment when running command" msgstr "" -#: src/parse_args.c:609 +#: src/parse_args.c:616 msgid "edit files instead of running a command" msgstr "" -#: src/parse_args.c:611 +#: src/parse_args.c:618 msgid "run command as the specified group name or ID" msgstr "" -#: src/parse_args.c:613 +#: src/parse_args.c:620 msgid "set HOME variable to target user's home dir" msgstr "" -#: src/parse_args.c:615 +#: src/parse_args.c:622 msgid "display help message and exit" msgstr "" -#: src/parse_args.c:617 +#: src/parse_args.c:624 msgid "run command on host (if supported by plugin)" msgstr "" -#: src/parse_args.c:619 +#: src/parse_args.c:626 msgid "run login shell as the target user; a command may also be specified" msgstr "" -#: src/parse_args.c:621 +#: src/parse_args.c:628 msgid "remove timestamp file completely" msgstr "" -#: src/parse_args.c:623 +#: src/parse_args.c:630 msgid "invalidate timestamp file" msgstr "" -#: src/parse_args.c:625 +#: src/parse_args.c:632 msgid "" "list user's privileges or check a specific command; use twice for longer " "format" msgstr "" -#: src/parse_args.c:627 +#: src/parse_args.c:634 msgid "non-interactive mode, no prompts are used" msgstr "" -#: src/parse_args.c:629 +#: src/parse_args.c:636 msgid "preserve group vector instead of setting to target's" msgstr "" -#: src/parse_args.c:631 +#: src/parse_args.c:638 msgid "use the specified password prompt" msgstr "" -#: src/parse_args.c:634 +#: src/parse_args.c:641 msgid "create SELinux security context with specified role" msgstr "" -#: src/parse_args.c:637 +#: src/parse_args.c:644 msgid "read password from standard input" msgstr "" -#: src/parse_args.c:639 +#: src/parse_args.c:646 msgid "run shell as the target user; a command may also be specified" msgstr "" -#: src/parse_args.c:642 +#: src/parse_args.c:649 msgid "create SELinux security context with specified type" msgstr "" -#: src/parse_args.c:645 +#: src/parse_args.c:652 msgid "in list mode, display privileges for user" msgstr "" -#: src/parse_args.c:647 +#: src/parse_args.c:654 msgid "run command (or edit file) as specified user name or ID" msgstr "" -#: src/parse_args.c:649 +#: src/parse_args.c:656 msgid "display version information and exit" msgstr "" -#: src/parse_args.c:651 +#: src/parse_args.c:658 msgid "update user's timestamp without running a command" msgstr "" -#: src/parse_args.c:653 +#: src/parse_args.c:660 msgid "stop processing command line arguments" msgstr "" -#: src/selinux.c:77 +#: src/selinux.c:78 msgid "unable to open audit system" msgstr "" -#: src/selinux.c:85 +#: src/selinux.c:88 msgid "unable to send audit message" msgstr "" -#: src/selinux.c:113 +#: src/selinux.c:116 #, c-format msgid "unable to fgetfilecon %s" msgstr "" -#: src/selinux.c:118 +#: src/selinux.c:121 #, c-format msgid "%s changed labels" msgstr "" -#: src/selinux.c:123 +#: src/selinux.c:126 #, c-format msgid "unable to restore context for %s" msgstr "" -#: src/selinux.c:163 +#: src/selinux.c:166 #, c-format msgid "unable to open %s, not relabeling tty" msgstr "" -#: src/selinux.c:172 +#: src/selinux.c:175 msgid "unable to get current tty context, not relabeling tty" msgstr "" -#: src/selinux.c:179 +#: src/selinux.c:182 msgid "unable to get new tty context, not relabeling tty" msgstr "" -#: src/selinux.c:186 +#: src/selinux.c:189 msgid "unable to set new tty context" msgstr "" -#: src/selinux.c:252 +#: src/selinux.c:255 #, c-format msgid "you must specify a role for type %s" msgstr "" -#: src/selinux.c:258 +#: src/selinux.c:261 #, c-format msgid "unable to get default type for role %s" msgstr "" -#: src/selinux.c:276 +#: src/selinux.c:279 #, c-format msgid "failed to set new role %s" msgstr "" -#: src/selinux.c:280 +#: src/selinux.c:283 #, c-format msgid "failed to set new type %s" msgstr "" -#: src/selinux.c:289 +#: src/selinux.c:295 #, c-format msgid "%s is not a valid context" msgstr "" -#: src/selinux.c:324 +#: src/selinux.c:330 msgid "failed to get old_context" msgstr "" -#: src/selinux.c:330 +#: src/selinux.c:336 msgid "unable to determine enforcing mode." msgstr "" -#: src/selinux.c:347 +#: src/selinux.c:353 #, c-format msgid "unable to set tty context to %s" msgstr "" -#: src/selinux.c:386 +#: src/selinux.c:392 #, c-format msgid "unable to set exec context to %s" msgstr "" -#: src/selinux.c:393 +#: src/selinux.c:399 #, c-format msgid "unable to set key creation context to %s" msgstr "" -#: src/sesh.c:80 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "" -#: src/sesh.c:108 +#: src/sesh.c:106 +#, c-format +msgid "invalid file descriptor number: %s" +msgstr "" + +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "" -#: src/sesh.c:113 src/sudo.c:1186 +#: src/sesh.c:125 src/sudo.c:1274 #, c-format msgid "unable to execute %s" msgstr "" -#: src/signal.c:77 +#: src/signal.c:68 #, c-format msgid "unable to save handler for signal %d" msgstr "" -#: src/solaris.c:88 +#: src/solaris.c:76 msgid "resource control limit has been reached" msgstr "" -#: src/solaris.c:91 +#: src/solaris.c:79 #, c-format msgid "user \"%s\" is not a member of project \"%s\"" msgstr "" -#: src/solaris.c:95 +#: src/solaris.c:83 msgid "the invoking task is final" msgstr "" -#: src/solaris.c:98 +#: src/solaris.c:86 #, c-format msgid "could not join project \"%s\"" msgstr "" -#: src/solaris.c:103 +#: src/solaris.c:91 #, c-format msgid "no resource pool accepting default bindings exists for project \"%s\"" msgstr "" -#: src/solaris.c:107 +#: src/solaris.c:95 #, c-format msgid "specified resource pool does not exist for project \"%s\"" msgstr "" -#: src/solaris.c:111 +#: src/solaris.c:99 #, c-format msgid "could not bind to default resource pool for project \"%s\"" msgstr "" -#: src/solaris.c:117 +#: src/solaris.c:105 #, c-format msgid "setproject failed for project \"%s\"" msgstr "" -#: src/solaris.c:119 +#: src/solaris.c:107 #, c-format msgid "warning, resource control assignment failed for project \"%s\"" msgstr "" -#: src/sudo.c:209 +#: src/sudo.c:212 #, c-format msgid "Sudo version %s\n" msgstr "" -#: src/sudo.c:211 +#: src/sudo.c:214 #, c-format msgid "Configure options: %s\n" msgstr "" -#: src/sudo.c:216 +#: src/sudo.c:222 msgid "fatal error, unable to load plugins" msgstr "" -#: src/sudo.c:224 +#: src/sudo.c:230 msgid "unable to initialize policy plugin" msgstr "" -#: src/sudo.c:280 +#: src/sudo.c:276 +msgid "plugin did not return a command to execute" +msgstr "" + +#: src/sudo.c:292 #, c-format msgid "error initializing I/O plugin %s" msgstr "" -#: src/sudo.c:306 +#: src/sudo.c:318 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "" -#: src/sudo.c:426 +#: src/sudo.c:461 msgid "unable to get group vector" msgstr "" -#: src/sudo.c:478 +#: src/sudo.c:522 #, c-format msgid "unknown uid %u: who are you?" msgstr "" -#: src/sudo.c:785 +#: src/sudo.c:859 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "" -#: src/sudo.c:788 +#: src/sudo.c:862 #, 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:794 +#: src/sudo.c:868 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "" -#: src/sudo.c:923 +#: src/sudo.c:999 #, c-format msgid "unknown login class %s" msgstr "" -#: src/sudo.c:936 +#: src/sudo.c:1012 msgid "unable to set user context" msgstr "" -#: src/sudo.c:950 +#: src/sudo.c:1026 msgid "unable to set supplementary group IDs" msgstr "" -#: src/sudo.c:957 +#: src/sudo.c:1033 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "" -#: src/sudo.c:963 +#: src/sudo.c:1039 #, c-format msgid "unable to set gid to runas gid %u" msgstr "" -#: src/sudo.c:970 +#: src/sudo.c:1046 msgid "unable to set process priority" msgstr "" -#: src/sudo.c:978 +#: src/sudo.c:1054 #, c-format msgid "unable to change root to %s" msgstr "" -#: src/sudo.c:991 src/sudo.c:997 src/sudo.c:1003 +#: src/sudo.c:1067 src/sudo.c:1073 src/sudo.c:1080 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "" -#: src/sudo.c:1021 +#: src/sudo.c:1098 #, c-format msgid "unable to change directory to %s" msgstr "" -#: src/sudo.c:1082 +#: src/sudo.c:1156 #, c-format msgid "unexpected child termination condition: %d" msgstr "" -#: src/sudo.c:1214 +#: src/sudo.c:1302 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "" -#: src/sudo.c:1232 +#: src/sudo.c:1320 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "" -#: src/sudo.c:1249 +#: src/sudo.c:1337 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "" -#: src/sudo.c:1264 +#: src/sudo.c:1352 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "" -#: src/sudo_edit.c:203 src/sudo_edit.c:294 +#: src/sudo_edit.c:181 +msgid "unable to restore current working directory" +msgstr "" + +#: src/sudo_edit.c:526 src/sudo_edit.c:630 #, c-format msgid "%s: not a regular file" msgstr "" -#: src/sudo_edit.c:230 src/sudo_edit.c:332 +#: src/sudo_edit.c:533 +#, c-format +msgid "%s: editing symbolic links is not permitted" +msgstr "" + +#: src/sudo_edit.c:536 +#, c-format +msgid "%s: editing files in a writable directory is not permitted" +msgstr "" + +#: src/sudo_edit.c:567 src/sudo_edit.c:669 #, c-format msgid "%s: short write" msgstr "" -#: src/sudo_edit.c:295 +#: src/sudo_edit.c:631 #, c-format msgid "%s left unmodified" msgstr "" -#: src/sudo_edit.c:308 src/sudo_edit.c:483 +#: src/sudo_edit.c:644 src/sudo_edit.c:830 #, c-format msgid "%s unchanged" msgstr "" -#: src/sudo_edit.c:321 src/sudo_edit.c:343 +#: src/sudo_edit.c:658 src/sudo_edit.c:680 #, c-format msgid "unable to write to %s" msgstr "" -#: src/sudo_edit.c:322 src/sudo_edit.c:341 src/sudo_edit.c:344 -#: src/sudo_edit.c:508 src/sudo_edit.c:512 +#: src/sudo_edit.c:659 src/sudo_edit.c:678 src/sudo_edit.c:681 +#: src/sudo_edit.c:855 src/sudo_edit.c:859 #, c-format msgid "contents of edit session left in %s" msgstr "" -#: src/sudo_edit.c:340 +#: src/sudo_edit.c:677 msgid "unable to read temporary file" msgstr "" -#: src/sudo_edit.c:417 +#: src/sudo_edit.c:760 msgid "sesh: internal error: odd number of paths" msgstr "" -#: src/sudo_edit.c:419 +#: src/sudo_edit.c:762 msgid "sesh: unable to create temporary files" msgstr "" -#: src/sudo_edit.c:421 src/sudo_edit.c:515 +#: src/sudo_edit.c:764 src/sudo_edit.c:862 #, c-format msgid "sesh: unknown error %d" msgstr "" -#: src/sudo_edit.c:507 +#: src/sudo_edit.c:854 msgid "unable to copy temporary files back to their original location" msgstr "" -#: src/sudo_edit.c:511 +#: src/sudo_edit.c:858 msgid "" "unable to copy some of the temporary files back to their original location" msgstr "" -#: src/sudo_edit.c:554 +#: src/sudo_edit.c:901 #, c-format msgid "unable to change uid to root (%u)" msgstr "" -#: src/sudo_edit.c:571 +#: src/sudo_edit.c:918 msgid "plugin error: missing file list for sudoedit" msgstr "" -#: src/tgetpass.c:91 +#: src/sudo_edit.c:959 src/sudo_edit.c:972 +msgid "unable to read the clock" +msgstr "" + +#: src/tgetpass.c:107 msgid "no tty present and no askpass program specified" msgstr "" -#: src/tgetpass.c:100 +#: src/tgetpass.c:116 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "" -#: src/tgetpass.c:234 +#: src/tgetpass.c:276 #, c-format msgid "unable to set gid to %u" msgstr "" -#: src/tgetpass.c:238 +#: src/tgetpass.c:280 #, c-format msgid "unable to set uid to %u" msgstr "" -#: src/tgetpass.c:243 +#: src/tgetpass.c:285 #, c-format msgid "unable to run %s" msgstr "" -#: src/utmp.c:278 +#: src/utmp.c:266 msgid "unable to save stdin" msgstr "" -#: src/utmp.c:280 +#: src/utmp.c:268 msgid "unable to dup2 stdin" msgstr "" -#: src/utmp.c:283 +#: src/utmp.c:271 msgid "unable to restore stdin" msgstr "" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/po/tr.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/po/tr.mo differ diff -Nru sudo-1.8.12/po/tr.po sudo-1.8.16/po/tr.po --- sudo-1.8.12/po/tr.po 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/po/tr.po 2015-10-31 23:35:00.000000000 +0000 @@ -1,14 +1,14 @@ # This file is put in the public domain. # This file is distributed under the same license as the sudo package. # -# Volkan Gezer , 2013. +# Volkan Gezer , 2013, 2015. msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.7b1\n" +"Project-Id-Version: sudo 1.8.12b1\n" "Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2013-04-02 10:40-0400\n" -"PO-Revision-Date: 2013-04-03 19:11+0100\n" -"Last-Translator: Volkan Gezer \n" +"POT-Creation-Date: 2014-10-27 12:35-0600\n" +"PO-Revision-Date: 2015-02-15 20:11+0100\n" +"Last-Translator: Volkan Gezer \n" "Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" @@ -17,309 +17,305 @@ "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Lokalize 1.5\n" -#: common/aix.c:150 -#, c-format +#: lib/util/aix.c:92 lib/util/aix.c:151 msgid "unable to open userdb" msgstr "userdb açılamıyor" -#: common/aix.c:153 +#: lib/util/aix.c:156 #, c-format msgid "unable to switch to registry \"%s\" for %s" msgstr "\"%s\" kaydına %s için geçiş yapılamıyor" -#: common/aix.c:170 -#, c-format +#: lib/util/aix.c:175 msgid "unable to restore registry" msgstr "kayıt geri yüklenemiyor" -#: common/alloc.c:82 -msgid "internal error, tried to emalloc(0)" +#: lib/util/alloc.c:68 lib/util/alloc.c:85 lib/util/alloc.c:106 +#: lib/util/alloc.c:128 lib/util/alloc.c:147 lib/util/alloc.c:170 +#, fuzzy +#| msgid "internal error, tried to emalloc(0)" +msgid "internal error, tried allocate zero bytes" msgstr "dahili hata, emalloc(0) denendi" -#: common/alloc.c:99 -msgid "internal error, tried to emalloc2(0)" -msgstr "dahili hata, emalloc2(0) denendi" - -#: common/alloc.c:101 common/alloc.c:123 common/alloc.c:163 common/alloc.c:187 +#: lib/util/alloc.c:87 lib/util/alloc.c:109 lib/util/alloc.c:149 +#: lib/util/alloc.c:172 src/net_ifs.c:174 src/net_ifs.c:191 src/net_ifs.c:325 #, c-format msgid "internal error, %s overflow" msgstr "dahili hata, %s taşması" -#: common/alloc.c:120 -msgid "internal error, tried to ecalloc(0)" -msgstr "dahili hata, ecalloc() denendi" - -#: common/alloc.c:142 -msgid "internal error, tried to erealloc(0)" -msgstr "dahili hata, erealloc() denendi" - -#: common/alloc.c:161 -msgid "internal error, tried to erealloc3(0)" -msgstr "dahili hata, erealloc3() denendi" +#: lib/util/gidlist.c:78 src/load_plugins.c:61 src/load_plugins.c:74 +#: src/sudo.c:572 src/sudo.c:591 src/sudo.c:618 src/sudo.c:627 src/sudo.c:636 +#: src/sudo.c:653 src/sudo.c:700 src/sudo.c:710 +#, c-format +msgid "%s: %s" +msgstr "%s: %s" -#: common/alloc.c:185 -msgid "internal error, tried to erecalloc(0)" -msgstr "dahili hata, erecalloc() denendi" +#: lib/util/strsignal.c:50 +msgid "Unknown signal" +msgstr "Bilinmeyen sinyal" -#: common/error.c:154 -#, c-format -msgid "%s: %s: %s\n" -msgstr "%s: %s: %s\n" +#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 +#: lib/util/strtonum.c:65 lib/util/strtonum.c:183 +msgid "invalid value" +msgstr "geçersiz değer" + +#: lib/util/strtoid.c:90 lib/util/strtoid.c:118 lib/util/strtomode.c:61 +#: lib/util/strtonum.c:68 lib/util/strtonum.c:195 +msgid "value too large" +msgstr "değer çok büyük" + +#: lib/util/strtoid.c:96 lib/util/strtomode.c:61 lib/util/strtonum.c:68 +#: lib/util/strtonum.c:189 +msgid "value too small" +msgstr "değer çok küçük" + +#: lib/util/sudo_conf.c:181 +#, fuzzy, c-format +#| msgid "invalid max groups `%s' in %s, line %d" +msgid "invalid Path value `%s' in %s, line %u" +msgstr "`%s' geçersiz azami grubu, %s içinde, satır %d" -#: common/error.c:157 common/error.c:161 -#, c-format -msgid "%s: %s\n" -msgstr "%s: %s\n" +#: lib/util/sudo_conf.c:335 lib/util/sudo_conf.c:388 +#, fuzzy, c-format +#| msgid "invalid max groups `%s' in %s, line %d" +msgid "invalid value for %s `%s' in %s, line %u" +msgstr "`%s' geçersiz azami grubu, %s içinde, satır %d" -#: common/sudo_conf.c:172 -#, c-format -msgid "unsupported group source `%s' in %s, line %d" +#: lib/util/sudo_conf.c:356 +#, fuzzy, c-format +#| msgid "unsupported group source `%s' in %s, line %d" +msgid "unsupported group source `%s' in %s, line %u" msgstr "`%s' desteklenmeyen grup kaynağı, %s içinde, satır %d" -#: common/sudo_conf.c:186 -#, c-format -msgid "invalid max groups `%s' in %s, line %d" +#: lib/util/sudo_conf.c:372 +#, fuzzy, c-format +#| msgid "invalid max groups `%s' in %s, line %d" +msgid "invalid max groups `%s' in %s, line %u" msgstr "`%s' geçersiz azami grubu, %s içinde, satır %d" -#: common/sudo_conf.c:382 +#: lib/util/sudo_conf.c:522 #, c-format msgid "unable to stat %s" msgstr "%s durumlanamıyor" -#: common/sudo_conf.c:385 +#: lib/util/sudo_conf.c:525 #, c-format msgid "%s is not a regular file" msgstr "%s düzenli bir dosya değil" -#: common/sudo_conf.c:388 +#: lib/util/sudo_conf.c:528 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s, %u kullanıcı kimliği tarafından sahiplenmiş, %u olmalı" -#: common/sudo_conf.c:392 +#: lib/util/sudo_conf.c:532 #, c-format msgid "%s is world writable" msgstr "%s genel yazılabilir" -#: common/sudo_conf.c:395 +#: lib/util/sudo_conf.c:535 #, c-format msgid "%s is group writable" msgstr "%s grup yazılabilir" -#: common/sudo_conf.c:405 src/selinux.c:196 src/selinux.c:209 src/sudo.c:328 +#: lib/util/sudo_conf.c:545 src/selinux.c:196 src/selinux.c:209 src/sudo.c:341 #, c-format msgid "unable to open %s" msgstr "%s açılamıyor" -#: compat/strsignal.c:50 -msgid "Unknown signal" -msgstr "Bilinmeyen sinyal" +#: src/exec.c:123 src/exec.c:128 src/exec.c:423 src/exec.c:425 src/exec.c:427 +#: src/exec.c:429 src/exec.c:431 src/exec.c:433 src/exec.c:436 src/exec.c:453 +#: src/exec.c:455 src/exec.c:457 src/exec.c:605 src/exec.c:800 +#: src/exec_pty.c:480 src/exec_pty.c:736 src/exec_pty.c:806 src/exec_pty.c:808 +#: src/exec_pty.c:820 src/exec_pty.c:1308 src/exec_pty.c:1310 +#: src/exec_pty.c:1315 src/exec_pty.c:1317 src/exec_pty.c:1331 +#: src/exec_pty.c:1342 src/exec_pty.c:1344 src/exec_pty.c:1346 +#: src/exec_pty.c:1348 src/exec_pty.c:1350 src/exec_pty.c:1352 +#: src/exec_pty.c:1354 src/signal.c:156 +#, fuzzy, c-format +#| msgid "unable to get default type for role %s" +msgid "unable to set handler for signal %d" +msgstr "%s görevi için öntanımlı tür alınamıyor" -#: src/exec.c:127 src/exec_pty.c:685 -#, c-format +#: src/exec.c:135 src/exec_pty.c:845 msgid "policy plugin failed session initialization" msgstr "oturum başlatma için ilke eklentisi başarısız" -#: src/exec.c:132 src/exec_pty.c:701 src/exec_pty.c:1066 src/tgetpass.c:220 -#, c-format +#: src/exec.c:140 src/exec_pty.c:861 src/exec_pty.c:1392 src/tgetpass.c:221 msgid "unable to fork" msgstr "çatallanamıyor" -#: src/exec.c:259 -#, c-format +#: src/exec.c:318 src/exec.c:326 src/exec.c:877 src/exec_pty.c:604 +#: src/exec_pty.c:609 src/exec_pty.c:667 src/exec_pty.c:674 src/exec_pty.c:965 +#: src/exec_pty.c:975 src/exec_pty.c:1020 src/exec_pty.c:1027 +#: src/exec_pty.c:1457 src/exec_pty.c:1464 src/exec_pty.c:1471 +msgid "unable to add event to queue" +msgstr "olay kuyruğa eklenemedi" + +#: src/exec.c:406 msgid "unable to create sockets" msgstr "soket oluşturulamıyor" -#: src/exec.c:347 src/exec_pty.c:1130 src/exec_pty.c:1268 -#, c-format -msgid "select failed" -msgstr "seçim başarısız" +#: src/exec.c:502 +msgid "error in event loop" +msgstr "olay döngüsünde hata" -#: src/exec.c:449 -#, c-format +#: src/exec.c:520 msgid "unable to restore tty label" msgstr "tty etiketi geri yüklenemiyor" -#: src/exec_common.c:70 -#, c-format +#: src/exec.c:613 src/exec_pty.c:514 src/signal.c:95 +#, fuzzy, c-format +#| msgid "unable to restore context for %s" +msgid "unable to restore handler for signal %d" +msgstr "%s için bağlam geri yüklenemiyor" + +#: src/exec.c:731 src/exec_pty.c:1199 +msgid "error reading from signal pipe" +msgstr "sinyal tünelinden okuma hatası" + +#: src/exec_common.c:73 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "PRIV_LIMIT'ten PRIV_PROC_EXEC kaldırılamıyor" -#: src/exec_pty.c:183 -#, c-format +#: src/exec_pty.c:200 msgid "unable to allocate pty" msgstr "pty ayırma başarısız" -#: src/exec_pty.c:623 src/exec_pty.c:632 src/exec_pty.c:640 src/exec_pty.c:986 -#: src/exec_pty.c:1063 src/signal.c:126 src/tgetpass.c:217 -#, c-format +#: src/exec_pty.c:780 src/exec_pty.c:789 src/exec_pty.c:797 +#: src/exec_pty.c:1300 src/exec_pty.c:1389 src/signal.c:137 src/tgetpass.c:218 msgid "unable to create pipe" msgstr "iletişim tüneli oluşturulamıyor" -#: src/exec_pty.c:676 -#, c-format +#: src/exec_pty.c:836 msgid "unable to set terminal to raw mode" msgstr "uçbirim ham kipine ayarlanamıyor" -#: src/exec_pty.c:1042 -#, c-format -msgid "unable to set controlling tty" -msgstr "tty denetleme ayarlaması başarısız" - -#: src/exec_pty.c:1139 -#, c-format -msgid "error reading from signal pipe" -msgstr "sinyal tünelinden okuma hatası" - -#: src/exec_pty.c:1160 -#, c-format +#: src/exec_pty.c:1232 msgid "error reading from pipe" msgstr "tünelden okuma hatası" -#: src/exec_pty.c:1176 -#, c-format +#: src/exec_pty.c:1257 msgid "error reading from socketpair" msgstr "sockerpair'den okuma hatası" -#: src/exec_pty.c:1180 +#: src/exec_pty.c:1266 #, c-format msgid "unexpected reply type on backchannel: %d" msgstr "backchannel'da beklenmeyen yanıt türü: %d" -#: src/load_plugins.c:70 src/load_plugins.c:79 src/load_plugins.c:132 -#: src/load_plugins.c:138 src/load_plugins.c:144 src/load_plugins.c:185 -#: src/load_plugins.c:192 src/load_plugins.c:199 src/load_plugins.c:205 +#: src/exec_pty.c:1368 +msgid "unable to set controlling tty" +msgstr "tty denetleme ayarlaması başarısız" + +#: src/load_plugins.c:59 src/load_plugins.c:72 src/load_plugins.c:89 +#: src/load_plugins.c:142 src/load_plugins.c:148 src/load_plugins.c:154 +#: src/load_plugins.c:195 src/load_plugins.c:202 src/load_plugins.c:209 +#: src/load_plugins.c:215 #, c-format msgid "error in %s, line %d while loading plugin `%s'" msgstr "%s içerisinde, satır %d, `%s' eklentisi yüklenirken hata" -#: src/load_plugins.c:72 -#, c-format -msgid "%s: %s" -msgstr "%s: %s" - -#: src/load_plugins.c:81 +#: src/load_plugins.c:91 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" -#: src/load_plugins.c:140 +#: src/load_plugins.c:150 #, c-format msgid "%s must be owned by uid %d" msgstr "%s, %d kullanıcı kimliği tarafından sahiplenmeli" -#: src/load_plugins.c:146 +#: src/load_plugins.c:156 #, c-format msgid "%s must be only be writable by owner" msgstr "%s sadece sahibi tarafından yazılabilir olmalı" -#: src/load_plugins.c:187 +#: src/load_plugins.c:197 #, c-format -msgid "unable to dlopen %s: %s" -msgstr "dlopen %s yapılamıyor: %s" +msgid "unable to load %s: %s" +msgstr "%s yüklenemedi: %s" -#: src/load_plugins.c:194 +#: src/load_plugins.c:204 #, c-format msgid "unable to find symbol `%s' in %s" msgstr "%s içerisinde `%s' sembolü bulunamıyor" -#: src/load_plugins.c:201 +#: src/load_plugins.c:211 #, c-format msgid "unknown policy type %d found in %s" msgstr "bilinmeyen ilke türü %d bulundu: %s içerisinde" -#: src/load_plugins.c:207 +#: src/load_plugins.c:217 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "uyumsuz temel ilke sürümü %d bulundu (beklenen %d): %s içerisinde" -#: src/load_plugins.c:216 +#: src/load_plugins.c:226 #, c-format msgid "ignoring policy plugin `%s' in %s, line %d" msgstr "`%s' ilke eklentisi yoksayılıyor, %s içinde, satır %d" -#: src/load_plugins.c:218 -#, c-format +#: src/load_plugins.c:228 msgid "only a single policy plugin may be specified" msgstr "sadece tek ilke eklentisi belirtilebilir" -#: src/load_plugins.c:221 +#: src/load_plugins.c:231 #, c-format msgid "ignoring duplicate policy plugin `%s' in %s, line %d" msgstr "yinelenmiş `%s' ilke eklentisi yoksayılıyor, %s içinde, satır %d" -#: src/load_plugins.c:236 +#: src/load_plugins.c:249 #, c-format msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" msgstr "yinelenmiş `%s' G/Ç eklentisi yoksayılıyor, %s içinde, satır %d" -#: src/load_plugins.c:313 +#: src/load_plugins.c:338 #, 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:156 src/net_ifs.c:165 src/net_ifs.c:177 src/net_ifs.c:186 -#: src/net_ifs.c:297 src/net_ifs.c:321 -#, c-format -msgid "load_interfaces: overflow detected" -msgstr "load_interfaces: taşma tespit edildi" - -#: src/net_ifs.c:226 -#, c-format +#: src/net_ifs.c:236 msgid "unable to open socket" msgstr "soket açılamıyor" -#: src/parse_args.c:197 -#, c-format +#: src/parse_args.c:241 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:286 -#, c-format -msgid "unknown user: %s" -msgstr "bilinmeyen kullanıcı: %s" - -#: src/parse_args.c:345 -#, c-format +#: src/parse_args.c:403 msgid "you may not specify both the `-i' and `-s' options" msgstr "`-i' ve `-s' seçeneklerini aynı anda belirtemezsiniz" -#: src/parse_args.c:349 -#, c-format +#: src/parse_args.c:407 msgid "you may not specify both the `-i' and `-E' options" msgstr "`-i' ve `-E' seçeneklerini aynı anda belirtemezsiniz" -#: src/parse_args.c:359 -#, c-format +#: src/parse_args.c:417 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:361 -#, c-format +#: src/parse_args.c:419 msgid "you may not specify environment variables in edit mode" msgstr "düzenleme kipinde ortam değişkenlerini belirtemezsiniz" -#: src/parse_args.c:369 -#, c-format +#: src/parse_args.c:427 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:373 -#, c-format +#: src/parse_args.c:431 msgid "the `-A' and `-S' options may not be used together" msgstr "`-A' ve `-S' seçenekleri birlikte kullanılamaz" -#: src/parse_args.c:456 -#, c-format +#: src/parse_args.c:497 msgid "sudoedit is not supported on this platform" msgstr "sudoedit bu platformda desteklenmiyor" -#: src/parse_args.c:529 -#, c-format +#: src/parse_args.c:570 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:543 +#: src/parse_args.c:584 #, c-format msgid "" "%s - edit files as another user\n" @@ -328,7 +324,7 @@ "%s - dosyaları farklı kullanıcı olarak düzenle\n" "\n" -#: src/parse_args.c:545 +#: src/parse_args.c:586 #, c-format msgid "" "%s - execute a command as another user\n" @@ -337,7 +333,7 @@ "%s - bir komutu farklı kullanıcı olarak çalıştır\n" "\n" -#: src/parse_args.c:550 +#: src/parse_args.c:591 #, c-format msgid "" "\n" @@ -346,113 +342,119 @@ "\n" "Seçenekler:\n" -#: src/parse_args.c:552 -msgid "use helper program for password prompting\n" -msgstr "parola istemi için yardımcı programı kullan\n" - -#: src/parse_args.c:555 -msgid "use specified BSD authentication type\n" -msgstr "belirtilen BSD yetkilendirme türü kullan\n" - -#: src/parse_args.c:558 -msgid "run command in the background\n" -msgstr "komutu arkaplanda çalıştır\n" - -#: src/parse_args.c:560 -msgid "close all file descriptors >= fd\n" -msgstr "tüm dosya tanımlayıcılarını kapat >= fd\n" - -#: src/parse_args.c:563 -msgid "run command with specified login class\n" -msgstr "komutu belirtilen oturum sınıfında çalıştır\n" - -#: src/parse_args.c:566 -msgid "preserve user environment when executing command\n" -msgstr "komutu çalıştırırken kullanıcı ortamını koru\n" - -#: src/parse_args.c:568 -msgid "edit files instead of running a command\n" -msgstr "komut çalıştırmak yerine dosyaları düzenle\n" - -#: src/parse_args.c:570 -msgid "execute command as the specified group\n" -msgstr "komutu belirtilen grup olarak çalıştır\n" - -#: src/parse_args.c:572 -msgid "set HOME variable to target user's home dir.\n" -msgstr "hedef kullanıcının ev dizinine HOME değişkeni ata.\n" - -#: src/parse_args.c:574 -msgid "display help message and exit\n" -msgstr "yardım iletisini göster ve çık\n" - -#: src/parse_args.c:576 -msgid "run a login shell as target user\n" -msgstr "hedef kullanıcı olarak bir oturum kabuğu çalıştır\n" - -#: src/parse_args.c:578 -msgid "remove timestamp file completely\n" -msgstr "dosyadan zaman damgasını tamamen kaldır\n" - -#: src/parse_args.c:580 -msgid "invalidate timestamp file\n" -msgstr "zaman damgası dosyasını geçersiz kıl\n" - -#: src/parse_args.c:582 -msgid "list user's available commands\n" -msgstr "kullanıcının kullanılabilir komutlarını listele\n" - -#: src/parse_args.c:584 -msgid "non-interactive mode, will not prompt user\n" -msgstr "etkileşimsiz kip, kullanıcı istemi yapılmayacak\n" - -#: src/parse_args.c:586 -msgid "preserve group vector instead of setting to target's\n" -msgstr "hedefe ayarlamak yerine grup vektörünü koru\n" - -#: src/parse_args.c:588 -msgid "use specified password prompt\n" -msgstr "belirtilen parola istemini kullan\n" - -#: src/parse_args.c:591 src/parse_args.c:599 -msgid "create SELinux security context with specified role\n" -msgstr "belirtilen görev ile SELinux güvenlik bağlamı oluştur\n" - -#: src/parse_args.c:594 -msgid "read password from standard input\n" -msgstr "parolayı standart girdiden oku\n" +#: src/parse_args.c:593 +msgid "use a helper program for password prompting" +msgstr "parola sorgulaması için bir yardımcı program kullan" #: src/parse_args.c:596 -msgid "run a shell as target user\n" -msgstr "hedef kullanıcı olarak bir kabuk çalıştır\n" +msgid "use specified BSD authentication type" +msgstr "belirtilen BSD kimlik doğrulama türünü kullan" -#: src/parse_args.c:602 -msgid "when listing, list specified user's privileges\n" -msgstr "listelerken, belirtilen kullanıcının haklarını listele\n" +#: src/parse_args.c:599 +msgid "run command in the background" +msgstr "Arkaplanda komut çalıştır" + +#: src/parse_args.c:601 +msgid "close all file descriptors >= num" +msgstr ">= sayı olan tüm dosya tanımlayıcılarını kapat" #: src/parse_args.c:604 -msgid "run command (or edit file) as specified user\n" -msgstr "belirtilen kullanıcı olarak komut çalıştır (veya dosya düzenle)\n" +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:606 -msgid "display version information and exit\n" -msgstr "sürüm bilgisini görüntüle ve çık\n" - -#: src/parse_args.c:608 -msgid "update user's timestamp without running a command\n" -msgstr "bir komut çalıştırmadan kullanıcının zaman damgasını güncelle\n" - -#: src/parse_args.c:610 -msgid "stop processing command line arguments\n" -msgstr "komut satırı argümanlarını işlemeyi durdur\n" +#: src/parse_args.c:607 +msgid "preserve user environment when running command" +msgstr "komut çalıştırılırken kullanıcı ortamını koru" + +#: src/parse_args.c:609 +msgid "edit files instead of running a command" +msgstr "Komut çalıştırmak yerine dosyaları düzenleyiniz" + +#: src/parse_args.c:611 +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:613 +msgid "set HOME variable to target user's home dir" +msgstr "HOME değişkenini kullanıcının ev dizinine hedefle" + +#: src/parse_args.c:615 +msgid "display help message and exit" +msgstr "Yardım mesajını görüntüle ve çık" + +#: src/parse_args.c:617 +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:619 +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:621 +msgid "remove timestamp file completely" +msgstr "zaman damgası dosyasını kalıcı olarak kaldır" + +#: src/parse_args.c:623 +msgid "invalidate timestamp file" +msgstr "zaman damgası dosyasının geçerliliğini kaldır" + +#: src/parse_args.c:625 +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:627 +msgid "non-interactive mode, no prompts are used" +msgstr "etkileşimsiz kip, sorgu yapılmaz" + +#: src/parse_args.c:629 +msgid "preserve group vector instead of setting to target's" +msgstr "hedefe atamak yerine grup vektörünü koru" + +#: src/parse_args.c:631 +msgid "use the specified password prompt" +msgstr "belirtilen parola sorgusunu kullan" + +#: src/parse_args.c:634 +msgid "create SELinux security context with specified role" +msgstr "SELinux güvenlik bağlamını belirtilen rol ile oluştur" + +#: src/parse_args.c:637 +msgid "read password from standard input" +msgstr "standart girdiden şifreyi okuyun" + +#: src/parse_args.c:639 +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:642 +msgid "create SELinux security context with specified type" +msgstr "SELinux güvenlik bağlamını belirtilen tür ile oluştur" + +#: src/parse_args.c:645 +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:647 +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:649 +msgid "display version information and exit" +msgstr "sürüm bilgisini göster ve çık" + +#: src/parse_args.c:651 +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:653 +msgid "stop processing command line arguments" +msgstr "komut satırı argümanlarını işlemeyi durdur" #: src/selinux.c:77 -#, c-format msgid "unable to open audit system" msgstr "denetim sistemi açılamıyor" #: src/selinux.c:85 -#, c-format msgid "unable to send audit message" msgstr "denetim iletisi gönderilemiyor" @@ -477,17 +479,14 @@ msgstr "%s açılamadı, tty yeniden etiketlenemiyor" #: src/selinux.c:172 -#, c-format msgid "unable to get current tty context, not relabeling tty" msgstr "geçerli tty bağlamı alınamadı, tty yeniden etiketlenemiyor" #: src/selinux.c:179 -#, c-format msgid "unable to get new tty context, not relabeling tty" msgstr "yeni tty bağlamı alınamadı, tty yeniden etiketlenemiyor" #: src/selinux.c:186 -#, c-format msgid "unable to set new tty context" msgstr "yeni tty bağlamı alınamıyor" @@ -517,42 +516,50 @@ msgstr "%s geçerli bir bağlam değil" #: src/selinux.c:324 -#, c-format msgid "failed to get old_context" msgstr "old_context alınamadı" #: src/selinux.c:330 -#, c-format msgid "unable to determine enforcing mode." msgstr "zorlama kipini belirleme başarısız." -#: src/selinux.c:342 +#: src/selinux.c:347 #, c-format -msgid "unable to setup tty context for %s" -msgstr "%s için tty bağlamı ayarlanamıyor" +msgid "unable to set tty context to %s" +msgstr "tty bağlamı %s olarak ayarlanamadı" -#: src/selinux.c:381 +#: src/selinux.c:386 #, c-format msgid "unable to set exec context to %s" msgstr "%s için exec bağlamı ayarlanamıyor" -#: src/selinux.c:388 +#: src/selinux.c:393 #, c-format msgid "unable to set key creation context to %s" msgstr "%s için anahtar oluşturma bağlamı ayarlanamıyor" -#: src/sesh.c:57 -#, c-format +#: src/sesh.c:80 msgid "requires at least one argument" msgstr "en az bir argüman gerektirir" -#: src/sesh.c:78 src/sudo.c:1126 +#: src/sesh.c:109 +#, fuzzy, c-format +#| msgid "unable to run %s" +msgid "unable to run %s as a login shell" +msgstr "%s çalıştırılamıyor" + +#: src/sesh.c:114 src/sudo.c:1186 #, c-format msgid "unable to execute %s" msgstr "%s çalıştırılamıyor" +#: src/signal.c:77 +#, fuzzy, c-format +#| msgid "unable to save stdin" +msgid "unable to save handler for signal %d" +msgstr "stdin kaydedilemiyor" + #: src/solaris.c:88 -#, c-format msgid "resource control limit has been reached" msgstr "kaynak denetim sınırına ulaşıldı" @@ -562,7 +569,6 @@ msgstr "\"%s\", bir \"%s\" projesi üyesi değil" #: src/solaris.c:95 -#, c-format msgid "the invoking task is final" msgstr "çağırılan görev son" @@ -596,216 +602,264 @@ 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:196 +#: src/sudo.c:209 #, c-format msgid "Sudo version %s\n" msgstr "Sudo sürüm %s\n" -#: src/sudo.c:198 +#: src/sudo.c:211 #, c-format msgid "Configure options: %s\n" msgstr "Yapılandırma seçenekleri: %s\n" -#: src/sudo.c:203 -#, c-format +#: src/sudo.c:216 msgid "fatal error, unable to load plugins" msgstr "ölümcül hata, eklentiler yüklenemiyor" -#: src/sudo.c:211 -#, c-format +#: src/sudo.c:224 msgid "unable to initialize policy plugin" msgstr "ilke eklentisi başlatılamıyor" -#: src/sudo.c:268 +#: src/sudo.c:280 #, c-format msgid "error initializing I/O plugin %s" msgstr "G/Ç eklentisi %s başlatılırken hata" -#: src/sudo.c:293 +#: src/sudo.c:306 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "beklenmeyen 0x%x sudo kipi" -#: src/sudo.c:413 -#, c-format +#: src/sudo.c:426 msgid "unable to get group vector" msgstr "grup vektörü alınamıyor" -#: src/sudo.c:465 +#: src/sudo.c:478 #, c-format msgid "unknown uid %u: who are you?" msgstr "bilinmeyen kullanıcı kimliği %u: kimsiniz?" -#: src/sudo.c:802 +#: src/sudo.c:785 #, 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:805 +#: src/sudo.c:788 #, 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:811 +#: src/sudo.c:794 #, 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:915 +#: src/sudo.c:923 #, c-format msgid "unknown login class %s" msgstr "bilinmeyen \"%s\" oturum sınıfı" -#: src/sudo.c:929 src/sudo.c:932 -#, c-format +#: src/sudo.c:936 msgid "unable to set user context" msgstr "kullanıcı bağlamı ayarlama başarısız" -#: src/sudo.c:944 -#, c-format +#: src/sudo.c:950 msgid "unable to set supplementary group IDs" msgstr "ek grup kimlikleri ayarlanamıyor" -#: src/sudo.c:951 +#: src/sudo.c:957 #, 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:957 +#: src/sudo.c:963 #, c-format msgid "unable to set gid to runas gid %u" msgstr "grup kimliği, runas gid %u olarak ayarlanamıyor" -#: src/sudo.c:964 -#, c-format +#: src/sudo.c:970 msgid "unable to set process priority" msgstr "süreç önceliği ayarlanamıyor" -#: src/sudo.c:972 +#: src/sudo.c:978 #, c-format msgid "unable to change root to %s" msgstr "kök %s olarak değiştirilemiyor" -#: src/sudo.c:979 src/sudo.c:985 src/sudo.c:991 +#: src/sudo.c:991 src/sudo.c:997 src/sudo.c:1003 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "runas uid (%u, %u) olarak değiştirilemiyor" -#: src/sudo.c:1005 +#: src/sudo.c:1021 #, c-format msgid "unable to change directory to %s" msgstr "%s dizinine değiştirilemiyor" -#: src/sudo.c:1089 +#: src/sudo.c:1082 #, c-format msgid "unexpected child termination condition: %d" msgstr "beklenmeyen alt sonlandırma şartı: %d" -#: src/sudo.c:1146 +#: src/sudo.c:1214 #, 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:1159 +#: src/sudo.c:1232 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "%s ilke eklentisi listeleme yetkilerini desteklemiyor" -#: src/sudo.c:1171 +#: src/sudo.c:1249 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "%s ilke eklentisi -v seçeneğini desteklemiyor" -#: src/sudo.c:1183 +#: src/sudo.c:1264 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "%s ilke eklentisi -k/-K seçeneklerini desteklemiyor" -#: src/sudo_edit.c:110 -#, 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:142 -#, c-format -msgid "plugin error: missing file list for sudoedit" -msgstr "eklenti hatası: sudoedit için eksik dosya listesi" - -#: src/sudo_edit.c:170 src/sudo_edit.c:270 +#: src/sudo_edit.c:203 src/sudo_edit.c:294 #, c-format msgid "%s: not a regular file" msgstr "%s: düzenli bir dosya değil" -#: src/sudo_edit.c:204 src/sudo_edit.c:306 +#: src/sudo_edit.c:230 src/sudo_edit.c:332 #, c-format msgid "%s: short write" msgstr "%s: kısa yazım" -#: src/sudo_edit.c:271 +#: src/sudo_edit.c:295 #, c-format msgid "%s left unmodified" msgstr "%s düzenlenmemiş olarak bırakıldı" -#: src/sudo_edit.c:284 +#: src/sudo_edit.c:308 src/sudo_edit.c:483 #, c-format msgid "%s unchanged" msgstr "%s değiştirilmemiş" -#: src/sudo_edit.c:296 src/sudo_edit.c:317 +#: src/sudo_edit.c:321 src/sudo_edit.c:343 #, c-format msgid "unable to write to %s" msgstr "%s dosyasına yazılamıyor" -#: src/sudo_edit.c:297 src/sudo_edit.c:315 src/sudo_edit.c:318 +#: src/sudo_edit.c:322 src/sudo_edit.c:341 src/sudo_edit.c:344 +#: src/sudo_edit.c:508 src/sudo_edit.c:512 #, c-format msgid "contents of edit session left in %s" msgstr "düzenleme oturumu içerikleri %s içinde bırakıldı" -#: src/sudo_edit.c:314 -#, c-format +#: src/sudo_edit.c:340 msgid "unable to read temporary file" msgstr "geçici dosya okunamıyor" -#: src/tgetpass.c:89 +#: src/sudo_edit.c:417 +msgid "sesh: internal error: odd number of paths" +msgstr "" + +#: src/sudo_edit.c:419 +#, fuzzy +#| msgid "unable to read temporary file" +msgid "sesh: unable to create temporary files" +msgstr "geçici dosya okunamıyor" + +#: src/sudo_edit.c:421 src/sudo_edit.c:515 +#, fuzzy, c-format +#| msgid "unknown user: %s" +msgid "sesh: unknown error %d" +msgstr "bilinmeyen kullanıcı: %s" + +#: src/sudo_edit.c:507 +msgid "unable to copy temporary files back to their original location" +msgstr "" + +#: src/sudo_edit.c:511 +msgid "unable to copy some of the temporary files back to their original location" +msgstr "" + +#: src/sudo_edit.c:554 #, 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:571 +msgid "plugin error: missing file list for sudoedit" +msgstr "eklenti hatası: sudoedit için eksik dosya listesi" + +#: src/tgetpass.c:90 msgid "no tty present and no askpass program specified" msgstr "tty bulunmuyor ve askpass programı belirtilmemiş" -#: src/tgetpass.c:98 -#, c-format +#: src/tgetpass.c:99 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "askpass programı belirtilmemiş, SUDO_ASKPASS ayarlamayı deneyin" -#: src/tgetpass.c:230 +#: src/tgetpass.c:232 #, c-format msgid "unable to set gid to %u" msgstr "grup kimliği %u olarak ayarlanamıyor" -#: src/tgetpass.c:234 +#: src/tgetpass.c:236 #, c-format msgid "unable to set uid to %u" msgstr "kullanıcı kimliği %u olarak ayarlanamıyor" -#: src/tgetpass.c:239 +#: src/tgetpass.c:241 #, c-format msgid "unable to run %s" msgstr "%s çalıştırılamıyor" #: src/utmp.c:278 -#, c-format msgid "unable to save stdin" msgstr "stdin kaydedilemiyor" #: src/utmp.c:280 -#, c-format msgid "unable to dup2 stdin" msgstr "dup2 stdin yapılamıyor" #: src/utmp.c:283 -#, c-format msgid "unable to restore stdin" msgstr "stdin geri yüklenemiyor" +#~ msgid "internal error, tried to emalloc2(0)" +#~ msgstr "dahili hata, emalloc2(0) denendi" + +#~ msgid "internal error, tried to ecalloc(0)" +#~ msgstr "dahili hata, ecalloc() denendi" + +#~ msgid "internal error, tried to erealloc(0)" +#~ msgstr "dahili hata, erealloc() denendi" + +#~ msgid "internal error, tried to erealloc3(0)" +#~ msgstr "dahili hata, erealloc3() denendi" + +#~ msgid "internal error, tried to erecalloc(0)" +#~ msgstr "dahili hata, erecalloc() denendi" + +#~ msgid "%s: %s: %s\n" +#~ msgstr "%s: %s: %s\n" + +#~ msgid "%s: %s\n" +#~ msgstr "%s: %s\n" + +#~ msgid "select failed" +#~ msgstr "seçim başarısız" + +#~ msgid "load_interfaces: overflow detected" +#~ msgstr "load_interfaces: taşma tespit edildi" + +#~ msgid "list user's available commands\n" +#~ msgstr "kullanıcının kullanılabilir komutlarını listele\n" + +#~ msgid "run a shell as target user\n" +#~ msgstr "hedef kullanıcı olarak bir kabuk çalıştır\n" + +#~ msgid "when listing, list specified user's privileges\n" +#~ msgstr "listelerken, belirtilen kullanıcının haklarını listele\n" + #~ msgid "unable to allocate memory" #~ msgstr "bellek ayırma başarısız" Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/po/uk.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/po/uk.mo differ diff -Nru sudo-1.8.12/po/uk.po sudo-1.8.16/po/uk.po --- sudo-1.8.12/po/uk.po 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/po/uk.po 2016-03-17 16:13:10.000000000 +0000 @@ -1,13 +1,13 @@ # Ukrainian translation for sudo. # This file is put in the public domain. # -# Yuri Chornoivan , 2011, 2012, 2013, 2014. +# Yuri Chornoivan , 2011, 2012, 2013, 2014, 2015, 2016. msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.12b1\n" -"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-10-27 12:35-0600\n" -"PO-Revision-Date: 2014-11-08 17:54+0200\n" +"Project-Id-Version: sudo 1.8.16b1\n" +"Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" +"POT-Creation-Date: 2016-02-19 15:48-0700\n" +"PO-Revision-Date: 2016-02-25 20:29+0200\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" "Language: uk\n" @@ -17,297 +17,312 @@ "X-Generator: Lokalize 1.5\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: lib/util/aix.c:92 lib/util/aix.c:151 +#: lib/util/aix.c:85 lib/util/aix.c:164 msgid "unable to open userdb" msgstr "не вдалося відкрити userdb" -#: lib/util/aix.c:156 +#: lib/util/aix.c:219 #, c-format msgid "unable to switch to registry \"%s\" for %s" msgstr "не вдалося перемкнутися на регістр «%s» для %s" -#: lib/util/aix.c:175 +#: lib/util/aix.c:244 msgid "unable to restore registry" msgstr "не вдалося відновити регістр" -#: lib/util/alloc.c:68 lib/util/alloc.c:85 lib/util/alloc.c:106 -#: lib/util/alloc.c:128 lib/util/alloc.c:147 lib/util/alloc.c:170 -msgid "internal error, tried allocate zero bytes" -msgstr "внутрішня помилка, спроба розміщення нуля байтів" - -#: lib/util/alloc.c:87 lib/util/alloc.c:109 lib/util/alloc.c:149 -#: lib/util/alloc.c:172 src/net_ifs.c:174 src/net_ifs.c:191 src/net_ifs.c:325 -#, c-format -msgid "internal error, %s overflow" -msgstr "внутрішня помилка, переповнення %s" - -#: lib/util/gidlist.c:78 src/load_plugins.c:61 src/load_plugins.c:74 -#: src/sudo.c:572 src/sudo.c:591 src/sudo.c:618 src/sudo.c:627 src/sudo.c:636 -#: src/sudo.c:653 src/sudo.c:700 src/sudo.c:710 +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/gidlist.c:74 +#: lib/util/sudo_conf.c:207 lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 +#: lib/util/sudo_conf.c:569 src/conversation.c:75 src/exec.c:863 +#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 +#: src/exec_pty.c:684 src/exec_pty.c:692 src/load_plugins.c:52 +#: src/load_plugins.c:65 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:655 src/sudo.c:665 src/sudo.c:685 src/sudo.c:704 src/sudo.c:713 +#: src/sudo.c:722 src/sudo.c:739 src/sudo.c:780 src/sudo.c:790 src/sudo.c:810 +#: src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 src/sudo.c:1492 +#: src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/util/strsignal.c:50 +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/sudo_conf.c:208 +#: lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 lib/util/sudo_conf.c:569 +#: src/conversation.c:76 src/exec.c:863 src/exec_common.c:107 +#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:684 +#: src/exec_pty.c:692 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:810 src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 +#: src/sudo.c:1492 src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 +msgid "unable to allocate memory" +msgstr "не вдалося отримати потрібний об’єм пам’яті" + +#: lib/util/strsignal.c:48 msgid "Unknown signal" msgstr "Невідомий сигнал" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:65 lib/util/strtonum.c:183 +#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:48 +#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "некоректне значення" -#: lib/util/strtoid.c:90 lib/util/strtoid.c:118 lib/util/strtomode.c:61 -#: lib/util/strtonum.c:68 lib/util/strtonum.c:195 +#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:54 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "надто велике значення" -#: lib/util/strtoid.c:96 lib/util/strtomode.c:61 lib/util/strtonum.c:68 -#: lib/util/strtonum.c:189 +#: lib/util/strtoid.c:89 lib/util/strtomode.c:54 lib/util/strtonum.c:61 +#: lib/util/strtonum.c:182 msgid "value too small" msgstr "надто мале значення" -#: lib/util/sudo_conf.c:181 +#: lib/util/sudo_conf.c:223 #, c-format msgid "invalid Path value `%s' in %s, line %u" msgstr "некоректне значення Path, «%s», у %s, рядок %u" -#: lib/util/sudo_conf.c:335 lib/util/sudo_conf.c:388 +#: lib/util/sudo_conf.c:389 lib/util/sudo_conf.c:442 #, c-format msgid "invalid value for %s `%s' in %s, line %u" msgstr "некоректне значення %s, «%s», у %s, рядок %u" -#: lib/util/sudo_conf.c:356 +#: lib/util/sudo_conf.c:410 #, c-format msgid "unsupported group source `%s' in %s, line %u" msgstr "непідтримуване джерело групи, «%s», у %s, рядок %u" -#: lib/util/sudo_conf.c:372 +#: lib/util/sudo_conf.c:426 #, c-format msgid "invalid max groups `%s' in %s, line %u" msgstr "некоректна максимальна кількість груп, «%s», у %s, рядок %u" -#: lib/util/sudo_conf.c:522 +#: lib/util/sudo_conf.c:585 #, c-format msgid "unable to stat %s" msgstr "не вдалося виконати stat для %s" -#: lib/util/sudo_conf.c:525 +#: lib/util/sudo_conf.c:588 #, c-format msgid "%s is not a regular file" msgstr "%s не є звичайним файлом" -#: lib/util/sudo_conf.c:528 +#: lib/util/sudo_conf.c:591 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s належить uid %u, має належати %u" -#: lib/util/sudo_conf.c:532 +#: lib/util/sudo_conf.c:595 #, c-format msgid "%s is world writable" msgstr "Запис до «%s» можливий для довільного користувача" -#: lib/util/sudo_conf.c:535 +#: lib/util/sudo_conf.c:598 #, c-format msgid "%s is group writable" msgstr "Запис до «%s» може здійснювати будь-який користувач з групи" -#: lib/util/sudo_conf.c:545 src/selinux.c:196 src/selinux.c:209 src/sudo.c:341 +#: lib/util/sudo_conf.c:608 src/selinux.c:199 src/selinux.c:212 src/sudo.c:367 #, c-format msgid "unable to open %s" msgstr "не вдалося відкрити %s" -#: src/exec.c:123 src/exec.c:128 src/exec.c:423 src/exec.c:425 src/exec.c:427 -#: src/exec.c:429 src/exec.c:431 src/exec.c:433 src/exec.c:436 src/exec.c:453 -#: src/exec.c:455 src/exec.c:457 src/exec.c:605 src/exec.c:800 -#: src/exec_pty.c:480 src/exec_pty.c:736 src/exec_pty.c:806 src/exec_pty.c:808 -#: src/exec_pty.c:820 src/exec_pty.c:1308 src/exec_pty.c:1310 -#: src/exec_pty.c:1315 src/exec_pty.c:1317 src/exec_pty.c:1331 -#: src/exec_pty.c:1342 src/exec_pty.c:1344 src/exec_pty.c:1346 -#: src/exec_pty.c:1348 src/exec_pty.c:1350 src/exec_pty.c:1352 -#: src/exec_pty.c:1354 src/signal.c:156 +#: src/exec.c:114 src/exec.c:116 src/exec.c:121 src/exec.c:409 src/exec.c:411 +#: src/exec.c:413 src/exec.c:415 src/exec.c:417 src/exec.c:419 src/exec.c:422 +#: src/exec.c:438 src/exec.c:440 src/exec.c:595 src/exec.c:790 +#: src/exec_pty.c:466 src/exec_pty.c:722 src/exec_pty.c:792 src/exec_pty.c:794 +#: src/exec_pty.c:806 src/exec_pty.c:808 src/exec_pty.c:1289 +#: src/exec_pty.c:1291 src/exec_pty.c:1296 src/exec_pty.c:1298 +#: src/exec_pty.c:1312 src/exec_pty.c:1323 src/exec_pty.c:1325 +#: src/exec_pty.c:1327 src/exec_pty.c:1329 src/exec_pty.c:1331 +#: src/exec_pty.c:1333 src/exec_pty.c:1335 src/signal.c:147 #, c-format msgid "unable to set handler for signal %d" msgstr "не вдалося встановити обробник для сигналу %d" -#: src/exec.c:135 src/exec_pty.c:845 -msgid "policy plugin failed session initialization" -msgstr "не вдалося виконати ініціалізацію сеансу через додаток правил" - -#: src/exec.c:140 src/exec_pty.c:861 src/exec_pty.c:1392 src/tgetpass.c:221 +#: src/exec.c:126 src/exec_pty.c:838 src/exec_pty.c:1373 src/tgetpass.c:265 msgid "unable to fork" msgstr "не вдалося створити відгалуження" -#: src/exec.c:318 src/exec.c:326 src/exec.c:877 src/exec_pty.c:604 -#: src/exec_pty.c:609 src/exec_pty.c:667 src/exec_pty.c:674 src/exec_pty.c:965 -#: src/exec_pty.c:975 src/exec_pty.c:1020 src/exec_pty.c:1027 -#: src/exec_pty.c:1457 src/exec_pty.c:1464 src/exec_pty.c:1471 +#: src/exec.c:304 src/exec.c:312 src/exec.c:868 src/exec_pty.c:604 +#: src/exec_pty.c:611 src/exec_pty.c:654 src/exec_pty.c:659 src/exec_pty.c:946 +#: src/exec_pty.c:956 src/exec_pty.c:1001 src/exec_pty.c:1008 +#: src/exec_pty.c:1438 src/exec_pty.c:1445 src/exec_pty.c:1452 msgid "unable to add event to queue" msgstr "не вдалося додати подію до черги обробки" -#: src/exec.c:406 +#: src/exec.c:392 msgid "unable to create sockets" msgstr "не вдалося створити сокети" -#: src/exec.c:502 +#: src/exec.c:447 +msgid "policy plugin failed session initialization" +msgstr "не вдалося виконати ініціалізацію сеансу через додаток правил" + +#: src/exec.c:492 msgid "error in event loop" msgstr "помилка у циклі обробки подій" -#: src/exec.c:520 +#: src/exec.c:510 msgid "unable to restore tty label" msgstr "не вдалося відновити позначку tty" -#: src/exec.c:613 src/exec_pty.c:514 src/signal.c:95 +#: src/exec.c:603 src/exec_pty.c:498 src/signal.c:86 #, c-format msgid "unable to restore handler for signal %d" msgstr "не вдалося відновити обробник для сигналу %d" -#: src/exec.c:731 src/exec_pty.c:1199 +#: src/exec.c:721 src/exec_pty.c:1180 msgid "error reading from signal pipe" msgstr "помилка під час спроби читання з каналу сигналів" -#: src/exec_common.c:73 +#: src/exec_common.c:166 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "не вдалося вилучити PRIV_PROC_EXEC з PRIV_LIMIT" -#: src/exec_pty.c:200 +#: src/exec_pty.c:188 msgid "unable to allocate pty" msgstr "не вдалося розмістити pty" -#: src/exec_pty.c:780 src/exec_pty.c:789 src/exec_pty.c:797 -#: src/exec_pty.c:1300 src/exec_pty.c:1389 src/signal.c:137 src/tgetpass.c:218 +#: src/exec_pty.c:766 src/exec_pty.c:775 src/exec_pty.c:783 +#: src/exec_pty.c:1281 src/exec_pty.c:1370 src/signal.c:128 src/tgetpass.c:261 msgid "unable to create pipe" msgstr "не вдалося створити канал" -#: src/exec_pty.c:836 -msgid "unable to set terminal to raw mode" -msgstr "не вдалося перевести термінал у режим без обробки" - -#: src/exec_pty.c:1232 +#: src/exec_pty.c:1213 msgid "error reading from pipe" msgstr "помилка під час спроби читання з каналу" -#: src/exec_pty.c:1257 +#: src/exec_pty.c:1238 msgid "error reading from socketpair" msgstr "помилка під час спроби читання з пари сокетів" -#: src/exec_pty.c:1266 +#: src/exec_pty.c:1247 #, c-format msgid "unexpected reply type on backchannel: %d" msgstr "неочікуваний тип відповіді на зворотному каналі: %d" -#: src/exec_pty.c:1368 +#: src/exec_pty.c:1349 msgid "unable to set controlling tty" msgstr "не вдалося встановити tty для керування" -#: src/load_plugins.c:59 src/load_plugins.c:72 src/load_plugins.c:89 -#: src/load_plugins.c:142 src/load_plugins.c:148 src/load_plugins.c:154 -#: src/load_plugins.c:195 src/load_plugins.c:202 src/load_plugins.c:209 -#: src/load_plugins.c:215 +#: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 +#: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 +#: src/load_plugins.c:170 src/load_plugins.c:178 src/load_plugins.c:185 +#: src/load_plugins.c:191 #, c-format msgid "error in %s, line %d while loading plugin `%s'" msgstr "помилка у %s, рядок %d під час спроби завантаження додатка «%s»" -#: src/load_plugins.c:91 +#: src/load_plugins.c:87 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" -#: src/load_plugins.c:150 +#: src/load_plugins.c:125 #, c-format msgid "%s must be owned by uid %d" msgstr "%s має належати користувачеві з uid %d" -#: src/load_plugins.c:156 +#: src/load_plugins.c:131 #, c-format msgid "%s must be only be writable by owner" msgstr "%s має бути доступним до запису лише для власника" -#: src/load_plugins.c:197 +#: src/load_plugins.c:172 #, c-format msgid "unable to load %s: %s" msgstr "не вдалося завантажити %s: %s" -#: src/load_plugins.c:204 +#: src/load_plugins.c:180 #, c-format msgid "unable to find symbol `%s' in %s" msgstr "у %2$s не вдалося знайти символ «%1$s»" -#: src/load_plugins.c:211 +#: src/load_plugins.c:187 #, c-format msgid "unknown policy type %d found in %s" msgstr "у %2$s виявлено невідомий тип правил, %1$d" -#: src/load_plugins.c:217 +#: src/load_plugins.c:193 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "несумісна основна версія додатка, %d, (мало бути %d) у %s" -#: src/load_plugins.c:226 +#: src/load_plugins.c:202 #, c-format msgid "ignoring policy plugin `%s' in %s, line %d" msgstr "ігноруємо додаток правил, «%s», у %s, рядок %d" -#: src/load_plugins.c:228 +#: src/load_plugins.c:204 msgid "only a single policy plugin may be specified" msgstr "можна визначати лише один додаток обробки правил" -#: src/load_plugins.c:231 +#: src/load_plugins.c:207 #, c-format msgid "ignoring duplicate policy plugin `%s' in %s, line %d" msgstr "ігноруємо повторний запис додатка правил, «%s», у %s, рядок %d" -#: src/load_plugins.c:249 +#: src/load_plugins.c:228 #, c-format msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" msgstr "ігноруємо повторний запис додатка введення-виведення, «%s», у %s, рядок %d" -#: src/load_plugins.c:338 +#: src/load_plugins.c:331 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "до додатка правил %s не включено метод check_policy" -#: src/net_ifs.c:236 -msgid "unable to open socket" -msgstr "не вдалося відкрити сокет" +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:476 +#, c-format +msgid "internal error, %s overflow" +msgstr "внутрішня помилка, переповнення %s" -#: src/parse_args.c:241 +#: src/parse_args.c:239 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "аргументом параметра -C mмає бути число не менше за 3" -#: src/parse_args.c:403 +#: src/parse_args.c:406 msgid "you may not specify both the `-i' and `-s' options" msgstr "не можна одночасно вказувати параметри «-i» і «-s»" -#: src/parse_args.c:407 +#: src/parse_args.c:410 msgid "you may not specify both the `-i' and `-E' options" msgstr "не можна одночасно вказувати параметри «-i» і «-E»" -#: src/parse_args.c:417 +#: src/parse_args.c:420 msgid "the `-E' option is not valid in edit mode" msgstr "не можна використовувати «-E» у режимі редагування" -#: src/parse_args.c:419 +#: src/parse_args.c:422 msgid "you may not specify environment variables in edit mode" msgstr "не можна вказувати змінні середовища у режимі редагування" -#: src/parse_args.c:427 +#: src/parse_args.c:430 msgid "the `-U' option may only be used with the `-l' option" msgstr "параметр «-U» можна використовувати лише разом з параметром «-l»" -#: src/parse_args.c:431 +#: src/parse_args.c:434 msgid "the `-A' and `-S' options may not be used together" msgstr "параметри «-A» і «-S» не можна використовувати одночасно" -#: src/parse_args.c:497 +#: src/parse_args.c:504 msgid "sudoedit is not supported on this platform" msgstr "підтримки sudoedit для цієї платформи не передбачено" -#: src/parse_args.c:570 +#: src/parse_args.c:577 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:584 +#: src/parse_args.c:591 #, c-format msgid "" "%s - edit files as another user\n" @@ -316,7 +331,7 @@ "%s — редагувати файли від імені іншого користувача\n" "\n" -#: src/parse_args.c:586 +#: src/parse_args.c:593 #, c-format msgid "" "%s - execute a command as another user\n" @@ -325,7 +340,7 @@ "%s — виконати команду від імені іншого користувача\n" "\n" -#: src/parse_args.c:591 +#: src/parse_args.c:598 #, c-format msgid "" "\n" @@ -334,483 +349,519 @@ "\n" "Параметри:\n" -#: src/parse_args.c:593 +#: src/parse_args.c:600 msgid "use a helper program for password prompting" msgstr "використовувати допоміжну програму для запитів щодо пароля" -#: src/parse_args.c:596 +#: src/parse_args.c:603 msgid "use specified BSD authentication type" msgstr "використовувати вказаний тип розпізнавання BSD" -#: src/parse_args.c:599 +#: src/parse_args.c:606 msgid "run command in the background" msgstr "виконати команду у фоновому режимі" -#: src/parse_args.c:601 +#: src/parse_args.c:608 msgid "close all file descriptors >= num" msgstr "закрити всі дескриптори файлів >= num" -#: src/parse_args.c:604 +#: src/parse_args.c:611 msgid "run command with the specified BSD login class" msgstr "виконати команду з вказаним класом доступу BSD" -#: src/parse_args.c:607 +#: src/parse_args.c:614 msgid "preserve user environment when running command" msgstr "зберегти середовище користувача на час виконання команди" -#: src/parse_args.c:609 +#: src/parse_args.c:616 msgid "edit files instead of running a command" msgstr "редагувати файли замість виконання команди" -#: src/parse_args.c:611 +#: src/parse_args.c:618 msgid "run command as the specified group name or ID" msgstr "виконати команду від імені групи користувачів, вказаної за назвою або ідентифікатором" -#: src/parse_args.c:613 +#: src/parse_args.c:620 msgid "set HOME variable to target user's home dir" msgstr "встановити для змінної HOME значення домашнього каталогу вказаного користувача." -#: src/parse_args.c:615 +#: src/parse_args.c:622 msgid "display help message and exit" msgstr "показати довідкове повідомлення і завершити роботу" -#: src/parse_args.c:617 +#: src/parse_args.c:624 msgid "run command on host (if supported by plugin)" msgstr "виконати команду на комп’ютері (якщо підтримується додатком)" -#: src/parse_args.c:619 +#: src/parse_args.c:626 msgid "run login shell as the target user; a command may also be specified" msgstr "запустити оболонку для входу до системи від імені вказаного користувача; слід вказати команду запуску" -#: src/parse_args.c:621 +#: src/parse_args.c:628 msgid "remove timestamp file completely" msgstr "повністю вилучити файл часової позначки" -#: src/parse_args.c:623 +#: src/parse_args.c:630 msgid "invalidate timestamp file" msgstr "позбавити чинності файл часової позначки" -#: src/parse_args.c:625 +#: src/parse_args.c:632 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "показати список прав доступу користувача або перевірити певну команду; подвоєння параметра призводить до виведення додаткових даних" -#: src/parse_args.c:627 +#: src/parse_args.c:634 msgid "non-interactive mode, no prompts are used" msgstr "неінтерактивний режим, не просити користувача відповідати на питання" -#: src/parse_args.c:629 +#: src/parse_args.c:636 msgid "preserve group vector instead of setting to target's" msgstr "зберегти вектор групи, не встановлювати вектор вказаного користувача" -#: src/parse_args.c:631 +#: src/parse_args.c:638 msgid "use the specified password prompt" msgstr "використовувати вказаний інструмент отримання паролів" -#: src/parse_args.c:634 +#: src/parse_args.c:641 msgid "create SELinux security context with specified role" msgstr "створити контекст захисту SELinux з вказаною роллю" -#: src/parse_args.c:637 +#: src/parse_args.c:644 msgid "read password from standard input" msgstr "прочитати пароль зі стандартного джерела вхідних даних" -#: src/parse_args.c:639 +#: src/parse_args.c:646 msgid "run shell as the target user; a command may also be specified" msgstr "виконати командну оболонку від імені вказаного користувача; слід також вказати команду" -#: src/parse_args.c:642 +#: src/parse_args.c:649 msgid "create SELinux security context with specified type" msgstr "створити контекст захисту SELinux вказаного типу" -#: src/parse_args.c:645 +#: src/parse_args.c:652 msgid "in list mode, display privileges for user" msgstr "у режимі списку, показати права доступу користувача" -#: src/parse_args.c:647 +#: src/parse_args.c:654 msgid "run command (or edit file) as specified user name or ID" msgstr "виконати команду (або редагувати файл) від імені користувача, вказаного за іменем або ідентифікатором" -#: src/parse_args.c:649 +#: src/parse_args.c:656 msgid "display version information and exit" msgstr "показати дані щодо версії і завершити роботу" -#: src/parse_args.c:651 +#: src/parse_args.c:658 msgid "update user's timestamp without running a command" msgstr "оновити штамп часу користувача без виконання команди" -#: src/parse_args.c:653 +#: src/parse_args.c:660 msgid "stop processing command line arguments" msgstr "зупинити обробку аргументів командного рядка" -#: src/selinux.c:77 +#: src/selinux.c:78 msgid "unable to open audit system" msgstr "не вдалося відкрити систему аудита" -#: src/selinux.c:85 +#: src/selinux.c:88 msgid "unable to send audit message" msgstr "не вдалося надіслати повідомлення аудита" -#: src/selinux.c:113 +#: src/selinux.c:116 #, c-format msgid "unable to fgetfilecon %s" msgstr "не вдалося виконати fgetfilecon %s" -#: src/selinux.c:118 +#: src/selinux.c:121 #, c-format msgid "%s changed labels" msgstr "%s змінено позначки" -#: src/selinux.c:123 +#: src/selinux.c:126 #, c-format msgid "unable to restore context for %s" msgstr "не вдалося відновити контекст %s" -#: src/selinux.c:163 +#: src/selinux.c:166 #, c-format msgid "unable to open %s, not relabeling tty" msgstr "не вдалося відкрити %s, не змінюємо позначки tty" -#: src/selinux.c:172 +#: src/selinux.c:175 msgid "unable to get current tty context, not relabeling tty" msgstr "не вдалося отримати поточний контекст tty, не змінюємо позначки tty" -#: src/selinux.c:179 +#: src/selinux.c:182 msgid "unable to get new tty context, not relabeling tty" msgstr "не вдалося отримати новий контекст tty, не змінюємо позначки tty" -#: src/selinux.c:186 +#: src/selinux.c:189 msgid "unable to set new tty context" msgstr "не вдалося встановити новий контекст tty" -#: src/selinux.c:252 +#: src/selinux.c:255 #, c-format msgid "you must specify a role for type %s" msgstr "вам слід вказати роль для типу %s" -#: src/selinux.c:258 +#: src/selinux.c:261 #, c-format msgid "unable to get default type for role %s" msgstr "не вдалося отримати типовий тип для ролі %s" -#: src/selinux.c:276 +#: src/selinux.c:279 #, c-format msgid "failed to set new role %s" msgstr "не вдалося встановити нову роль %s" -#: src/selinux.c:280 +#: src/selinux.c:283 #, c-format msgid "failed to set new type %s" msgstr "не вдалося встановити новий тип %s" -#: src/selinux.c:289 +#: src/selinux.c:295 #, c-format msgid "%s is not a valid context" msgstr "%s не є коректним контекстом" -#: src/selinux.c:324 +#: src/selinux.c:330 msgid "failed to get old_context" msgstr "не вдалося отримати old_context" -#: src/selinux.c:330 +#: src/selinux.c:336 msgid "unable to determine enforcing mode." msgstr "не вдалося визначити режим примушення." -#: src/selinux.c:347 +#: src/selinux.c:353 #, c-format msgid "unable to set tty context to %s" msgstr "не вдалося встановити контекст tty у значення %s" -#: src/selinux.c:386 +#: src/selinux.c:392 #, c-format msgid "unable to set exec context to %s" msgstr "не вдалося встановити контекст виконання у значення %s" -#: src/selinux.c:393 +#: src/selinux.c:399 #, c-format msgid "unable to set key creation context to %s" msgstr "не вдалося встановити контекст ключа створення у значення %s" -#: src/sesh.c:80 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "потребує принаймні одного аргументу" -#: src/sesh.c:109 +#: src/sesh.c:106 +#, c-format +msgid "invalid file descriptor number: %s" +msgstr "некоректний номер дескриптора файла: %s" + +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "%s не можна працювати як оболонка для входу" -#: src/sesh.c:114 src/sudo.c:1186 +#: src/sesh.c:125 src/sudo.c:1274 #, c-format msgid "unable to execute %s" msgstr "не вдалося виконати %s" -#: src/signal.c:77 +#: src/signal.c:68 #, c-format msgid "unable to save handler for signal %d" msgstr "не вдалося зберегти обробник для сигналу %d" -#: src/solaris.c:88 +#: src/solaris.c:76 msgid "resource control limit has been reached" msgstr "перевищено обмеження керування ресурсами" -#: src/solaris.c:91 +#: src/solaris.c:79 #, c-format msgid "user \"%s\" is not a member of project \"%s\"" msgstr "користувач «%s» не є учасником проекту «%s»" -#: src/solaris.c:95 +#: src/solaris.c:83 msgid "the invoking task is final" msgstr "викликане завдання є завершальним" -#: src/solaris.c:98 +#: src/solaris.c:86 #, c-format msgid "could not join project \"%s\"" msgstr "не вдалося приєднатися до проекту «%s»" -#: src/solaris.c:103 +#: src/solaris.c:91 #, c-format msgid "no resource pool accepting default bindings exists for project \"%s\"" msgstr "для проекту «%s» не існує сховища ресурсів, яке приймає типові прив’язки" -#: src/solaris.c:107 +#: src/solaris.c:95 #, c-format msgid "specified resource pool does not exist for project \"%s\"" msgstr "у проекті «%s» не існує вказаного сховища ресурсів" -#: src/solaris.c:111 +#: src/solaris.c:99 #, c-format msgid "could not bind to default resource pool for project \"%s\"" msgstr "не вдалося виконати прив’язку до типового сховища ресурсів проекту «%s»" -#: src/solaris.c:117 +#: src/solaris.c:105 #, c-format msgid "setproject failed for project \"%s\"" msgstr "помилка під час виконання setproject для проекту «%s»" -#: src/solaris.c:119 +#: src/solaris.c:107 #, c-format msgid "warning, resource control assignment failed for project \"%s\"" msgstr "попередження, помилка призначення керування ресурсами проекту «%s»" -#: src/sudo.c:209 +#: src/sudo.c:212 #, c-format msgid "Sudo version %s\n" msgstr "Версія sudo %s\n" -#: src/sudo.c:211 +#: src/sudo.c:214 #, c-format msgid "Configure options: %s\n" msgstr "Параметри налаштування: %s\n" -#: src/sudo.c:216 +#: src/sudo.c:222 msgid "fatal error, unable to load plugins" msgstr "критична помилка, не вдалося завантажити додатки" -#: src/sudo.c:224 +#: src/sudo.c:230 msgid "unable to initialize policy plugin" msgstr "не вдалося ініціалізувати додаток правил" -#: src/sudo.c:280 +#: src/sudo.c:276 +msgid "plugin did not return a command to execute" +msgstr "додатком не повернуто команди, яку слід виконати" + +#: src/sudo.c:292 #, c-format msgid "error initializing I/O plugin %s" msgstr "помилка під час спроби ініціалізації додатка введення/виведення даних %s" -#: src/sudo.c:306 +#: src/sudo.c:318 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "неочікуваний режим sudo 0x%x" -#: src/sudo.c:426 +#: src/sudo.c:461 msgid "unable to get group vector" msgstr "не вдалося отримати вектор групи" -#: src/sudo.c:478 +#: src/sudo.c:522 #, c-format msgid "unknown uid %u: who are you?" msgstr "невідомий uid %u: хто ви такий?" -#: src/sudo.c:785 +#: src/sudo.c:859 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s має належати користувачеві з uid %d, крім того, має бути встановлено біт setuid" -#: src/sudo.c:788 +#: src/sudo.c:862 #, 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:794 +#: src/sudo.c:868 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "поточним uid не є %d, sudo встановлено з ідентифікатором користувача root?" -#: src/sudo.c:923 +#: src/sudo.c:999 #, c-format msgid "unknown login class %s" msgstr "невідомий клас входу %s" -#: src/sudo.c:936 +#: src/sudo.c:1012 msgid "unable to set user context" msgstr "не вдалося встановити контекст користувача" -#: src/sudo.c:950 +#: src/sudo.c:1026 msgid "unable to set supplementary group IDs" msgstr "не вдалося встановити ідентифікатори додаткових груп" -#: src/sudo.c:957 +#: src/sudo.c:1033 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "не вдалося встановити ефективний ідентифікатор групи для ідентифікатора групи запуску %u" -#: src/sudo.c:963 +#: src/sudo.c:1039 #, c-format msgid "unable to set gid to runas gid %u" msgstr "не вдалося встановити ідентифікатор групи для ідентифікатора групи запуску %u" -#: src/sudo.c:970 +#: src/sudo.c:1046 msgid "unable to set process priority" msgstr "не вдалося встановити пріоритет процесу" -#: src/sudo.c:978 +#: src/sudo.c:1054 #, c-format msgid "unable to change root to %s" msgstr "не вдалося змінити root на %s" -#: src/sudo.c:991 src/sudo.c:997 src/sudo.c:1003 +#: src/sudo.c:1067 src/sudo.c:1073 src/sudo.c:1080 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "не вдалося змінити uid користувача, від імені якого відбувається виконання (%u, %u)" -#: src/sudo.c:1021 +#: src/sudo.c:1098 #, c-format msgid "unable to change directory to %s" msgstr "не вдалося змінити каталог на %s" -#: src/sudo.c:1082 +#: src/sudo.c:1156 #, c-format msgid "unexpected child termination condition: %d" msgstr "неочікувана умова переривання дочірнього процесу: %d" -#: src/sudo.c:1214 +#: src/sudo.c:1302 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "до додатка правил %s не включено метод «check_policy»" -#: src/sudo.c:1232 +#: src/sudo.c:1320 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "у додатку правил %s не передбачено підтримки побудови списку прав доступу" -#: src/sudo.c:1249 +#: src/sudo.c:1337 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "у додатку правил %s не передбачено підтримки параметра -v" -#: src/sudo.c:1264 +#: src/sudo.c:1352 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "у додатку правил %s не передбачено підтримки параметрів -k/-K" -#: src/sudo_edit.c:203 src/sudo_edit.c:294 +#: src/sudo_edit.c:181 +msgid "unable to restore current working directory" +msgstr "не вдалося відновити поточний робочий каталог" + +#: src/sudo_edit.c:526 src/sudo_edit.c:630 #, c-format msgid "%s: not a regular file" msgstr "%s: не є звичайним файлом" -#: src/sudo_edit.c:230 src/sudo_edit.c:332 +#: src/sudo_edit.c:533 +#, c-format +msgid "%s: editing symbolic links is not permitted" +msgstr "%s: не можна редагувати символічні посилання" + +#: src/sudo_edit.c:536 +#, c-format +msgid "%s: editing files in a writable directory is not permitted" +msgstr "%s: не можна редагувати файли у непридатному до запису каталозі" + +#: src/sudo_edit.c:567 src/sudo_edit.c:669 #, c-format msgid "%s: short write" msgstr "%s: короткий запис" -#: src/sudo_edit.c:295 +#: src/sudo_edit.c:631 #, c-format msgid "%s left unmodified" msgstr "%s залишено без змін" -#: src/sudo_edit.c:308 src/sudo_edit.c:483 +#: src/sudo_edit.c:644 src/sudo_edit.c:830 #, c-format msgid "%s unchanged" msgstr "%s не змінено" -#: src/sudo_edit.c:321 src/sudo_edit.c:343 +#: src/sudo_edit.c:658 src/sudo_edit.c:680 #, c-format msgid "unable to write to %s" msgstr "не вдалося виконати запис до %s" -#: src/sudo_edit.c:322 src/sudo_edit.c:341 src/sudo_edit.c:344 -#: src/sudo_edit.c:508 src/sudo_edit.c:512 +#: src/sudo_edit.c:659 src/sudo_edit.c:678 src/sudo_edit.c:681 +#: src/sudo_edit.c:855 src/sudo_edit.c:859 #, c-format msgid "contents of edit session left in %s" msgstr "дані сеансу редагування залишилися у %s" -#: src/sudo_edit.c:340 +#: src/sudo_edit.c:677 msgid "unable to read temporary file" msgstr "не вдалося виконати читання з файла тимчасових даних" -#: src/sudo_edit.c:417 +#: src/sudo_edit.c:760 msgid "sesh: internal error: odd number of paths" msgstr "sesh: внутрішня помилка: непарна кількість шляхів" -#: src/sudo_edit.c:419 +#: src/sudo_edit.c:762 msgid "sesh: unable to create temporary files" msgstr "sesh: не вдалося створити тимчасові файли" -#: src/sudo_edit.c:421 src/sudo_edit.c:515 +#: src/sudo_edit.c:764 src/sudo_edit.c:862 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: невідома помилка %d" -#: src/sudo_edit.c:507 +#: src/sudo_edit.c:854 msgid "unable to copy temporary files back to their original location" msgstr "не вдалося скопіювати тимчасові файли назад до початкового місця зберігання" -#: src/sudo_edit.c:511 +#: src/sudo_edit.c:858 msgid "unable to copy some of the temporary files back to their original location" msgstr "не вдалося скопіювати деякі з тимчасових файлів назад до початкового місця зберігання" -#: src/sudo_edit.c:554 +#: src/sudo_edit.c:901 #, c-format msgid "unable to change uid to root (%u)" msgstr "не вдалося змінити значення uid на значення root (%u)" -#: src/sudo_edit.c:571 +#: src/sudo_edit.c:918 msgid "plugin error: missing file list for sudoedit" msgstr "помилка додатка: не вистачає списку файлів для sudoedit" -#: src/tgetpass.c:90 +#: src/sudo_edit.c:959 src/sudo_edit.c:972 +msgid "unable to read the clock" +msgstr "не вдалося прочитати час на годиннику" + +#: src/tgetpass.c:107 msgid "no tty present and no askpass program specified" msgstr "не виявлено tty і не вказано програми askpass" -#: src/tgetpass.c:99 +#: src/tgetpass.c:116 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "не вказано програми askpass, спробуйте встановити значення змінної SUDO_ASKPASS" -#: src/tgetpass.c:232 +#: src/tgetpass.c:276 #, c-format msgid "unable to set gid to %u" msgstr "не вдалося встановити gid у значення %u" -#: src/tgetpass.c:236 +#: src/tgetpass.c:280 #, c-format msgid "unable to set uid to %u" msgstr "не вдалося встановити uid у значення %u" -#: src/tgetpass.c:241 +#: src/tgetpass.c:285 #, c-format msgid "unable to run %s" msgstr "не вдалося виконати %s" -#: src/utmp.c:278 +#: src/utmp.c:266 msgid "unable to save stdin" msgstr "не вдалося зберегти stdin" -#: src/utmp.c:280 +#: src/utmp.c:268 msgid "unable to dup2 stdin" msgstr "не вдалося виконати dup2 для stdin" -#: src/utmp.c:283 +#: src/utmp.c:271 msgid "unable to restore stdin" msgstr "не вдалося відновити stdin" +#~ msgid "internal error, tried allocate zero bytes" +#~ msgstr "внутрішня помилка, спроба розміщення нуля байтів" + +#~ msgid "unable to set terminal to raw mode" +#~ msgstr "не вдалося перевести термінал у режим без обробки" + +#~ msgid "unable to open socket" +#~ msgstr "не вдалося відкрити сокет" + #~ msgid "%s: %s: %s\n" #~ msgstr "%s: %s: %s\n" @@ -850,9 +901,6 @@ #~ msgid "when listing, list specified user's privileges\n" #~ msgstr "у списку показати права доступу вказаного користувача\n" -#~ msgid "unable to allocate memory" -#~ msgstr "не вдалося отримати потрібний об’єм пам’яті" - #~ msgid ": " #~ msgstr ": " Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/po/vi.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/po/vi.mo differ diff -Nru sudo-1.8.12/po/vi.po sudo-1.8.16/po/vi.po --- sudo-1.8.12/po/vi.po 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/po/vi.po 2016-03-17 16:13:10.000000000 +0000 @@ -1,14 +1,14 @@ # Vietnamese translation for sudo. # Bản dịch tiếng Việt dành cho sudo. # This file is put in the public domain. -# Trần Ngọc Quân , 2012-2014. +# Trần Ngọc Quân , 2012-2014, 2015, 2016. # msgid "" msgstr "" -"Project-Id-Version: sudo 1.8.12b1\n" -"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-10-27 12:35-0600\n" -"PO-Revision-Date: 2014-11-09 08:25+0700\n" +"Project-Id-Version: sudo 1.8.16b1\n" +"Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" +"POT-Creation-Date: 2016-02-19 15:48-0700\n" +"PO-Revision-Date: 2016-02-26 13:25+0700\n" "Last-Translator: Trần Ngọc Quân \n" "Language-Team: Vietnamese \n" "Language: vi\n" @@ -17,302 +17,317 @@ "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Language-Team-Website: \n" -"X-Generator: LocFactoryEditor 1.8\n" +"X-Generator: Gtranslator 2.91.7\n" "X-Poedit-SourceCharset: UTF-8\n" "X-Poedit-Language: Vietnamese\n" "X-Poedit-Country: VIET NAM\n" -#: lib/util/aix.c:92 lib/util/aix.c:151 +#: lib/util/aix.c:85 lib/util/aix.c:164 msgid "unable to open userdb" -msgstr "không thể mở userdb" +msgstr "không thể mở cơ sở dữ liệu người dùng userdb" -#: lib/util/aix.c:156 +#: lib/util/aix.c:219 #, c-format msgid "unable to switch to registry \"%s\" for %s" msgstr "không thể chuyển đến sổ đăng ký “%s” cho %s" -#: lib/util/aix.c:175 +#: lib/util/aix.c:244 msgid "unable to restore registry" msgstr "không thể phục hồi sổ đăng ký" -#: lib/util/alloc.c:68 lib/util/alloc.c:85 lib/util/alloc.c:106 -#: lib/util/alloc.c:128 lib/util/alloc.c:147 lib/util/alloc.c:170 -msgid "internal error, tried allocate zero bytes" -msgstr "lỗi nội bộ, đã phân bổ 0 byte bộ nhớ" - -#: lib/util/alloc.c:87 lib/util/alloc.c:109 lib/util/alloc.c:149 -#: lib/util/alloc.c:172 src/net_ifs.c:174 src/net_ifs.c:191 src/net_ifs.c:325 -#, c-format -msgid "internal error, %s overflow" -msgstr "lỗi nội bộ, %s bị tràn" - -#: lib/util/gidlist.c:78 src/load_plugins.c:61 src/load_plugins.c:74 -#: src/sudo.c:572 src/sudo.c:591 src/sudo.c:618 src/sudo.c:627 src/sudo.c:636 -#: src/sudo.c:653 src/sudo.c:700 src/sudo.c:710 +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/gidlist.c:74 +#: lib/util/sudo_conf.c:207 lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 +#: lib/util/sudo_conf.c:569 src/conversation.c:75 src/exec.c:863 +#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 +#: src/exec_pty.c:684 src/exec_pty.c:692 src/load_plugins.c:52 +#: src/load_plugins.c:65 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:655 src/sudo.c:665 src/sudo.c:685 src/sudo.c:704 src/sudo.c:713 +#: src/sudo.c:722 src/sudo.c:739 src/sudo.c:780 src/sudo.c:790 src/sudo.c:810 +#: src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 src/sudo.c:1492 +#: src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 #, c-format msgid "%s: %s" msgstr "%s: %s" -#: lib/util/strsignal.c:50 +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/sudo_conf.c:208 +#: lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 lib/util/sudo_conf.c:569 +#: src/conversation.c:76 src/exec.c:863 src/exec_common.c:107 +#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:684 +#: src/exec_pty.c:692 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:810 src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 +#: src/sudo.c:1492 src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 +msgid "unable to allocate memory" +msgstr "không thể cấp phát bộ nhớ" + +#: lib/util/strsignal.c:48 msgid "Unknown signal" msgstr "Không hiểu tín hiệu" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:65 lib/util/strtonum.c:183 +#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:48 +#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "giá trị không hợp lệ" -#: lib/util/strtoid.c:90 lib/util/strtoid.c:118 lib/util/strtomode.c:61 -#: lib/util/strtonum.c:68 lib/util/strtonum.c:195 +#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:54 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "giá trị quá lớn" -#: lib/util/strtoid.c:96 lib/util/strtomode.c:61 lib/util/strtonum.c:68 -#: lib/util/strtonum.c:189 +#: lib/util/strtoid.c:89 lib/util/strtomode.c:54 lib/util/strtonum.c:61 +#: lib/util/strtonum.c:182 msgid "value too small" msgstr "giá trị quá nhỏ" -#: lib/util/sudo_conf.c:181 +#: lib/util/sudo_conf.c:223 #, c-format msgid "invalid Path value `%s' in %s, line %u" msgstr "Đường dẫn không hợp lệ “%s” trong %s, dòng %u" -#: lib/util/sudo_conf.c:335 lib/util/sudo_conf.c:388 +#: lib/util/sudo_conf.c:389 lib/util/sudo_conf.c:442 #, c-format msgid "invalid value for %s `%s' in %s, line %u" msgstr "giá trị không hợp lệ cho %s “%s” trong %s, dòng %u" -#: lib/util/sudo_conf.c:356 +#: lib/util/sudo_conf.c:410 #, c-format msgid "unsupported group source `%s' in %s, line %u" msgstr "nguồn nhóm không được hỗ trợ “%s” trong %s, dòng %u" -#: lib/util/sudo_conf.c:372 +#: lib/util/sudo_conf.c:426 #, c-format msgid "invalid max groups `%s' in %s, line %u" msgstr "nhóm tối đa không hợp lệ “%s” trong %s, dòng %u" -#: lib/util/sudo_conf.c:522 +#: lib/util/sudo_conf.c:585 #, c-format msgid "unable to stat %s" msgstr "không thể lấy thống kê về %s" -#: lib/util/sudo_conf.c:525 +#: lib/util/sudo_conf.c:588 #, c-format msgid "%s is not a regular file" msgstr "%s không phải tập tin thường" -#: lib/util/sudo_conf.c:528 +#: lib/util/sudo_conf.c:591 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s được sở hữu bởi uid %u, nên là %u" -#: lib/util/sudo_conf.c:532 +#: lib/util/sudo_conf.c:595 #, c-format msgid "%s is world writable" -msgstr "%s ai ghi cũng được" +msgstr "%s là ai ghi cũng được" -#: lib/util/sudo_conf.c:535 +#: lib/util/sudo_conf.c:598 #, c-format msgid "%s is group writable" msgstr "%s là nhóm có thể ghi" -#: lib/util/sudo_conf.c:545 src/selinux.c:196 src/selinux.c:209 src/sudo.c:341 +#: lib/util/sudo_conf.c:608 src/selinux.c:199 src/selinux.c:212 src/sudo.c:367 #, c-format msgid "unable to open %s" -msgstr "không mở được %s" +msgstr "không thể mở “%s”" -#: src/exec.c:123 src/exec.c:128 src/exec.c:423 src/exec.c:425 src/exec.c:427 -#: src/exec.c:429 src/exec.c:431 src/exec.c:433 src/exec.c:436 src/exec.c:453 -#: src/exec.c:455 src/exec.c:457 src/exec.c:605 src/exec.c:800 -#: src/exec_pty.c:480 src/exec_pty.c:736 src/exec_pty.c:806 src/exec_pty.c:808 -#: src/exec_pty.c:820 src/exec_pty.c:1308 src/exec_pty.c:1310 -#: src/exec_pty.c:1315 src/exec_pty.c:1317 src/exec_pty.c:1331 -#: src/exec_pty.c:1342 src/exec_pty.c:1344 src/exec_pty.c:1346 -#: src/exec_pty.c:1348 src/exec_pty.c:1350 src/exec_pty.c:1352 -#: src/exec_pty.c:1354 src/signal.c:156 +#: src/exec.c:114 src/exec.c:116 src/exec.c:121 src/exec.c:409 src/exec.c:411 +#: src/exec.c:413 src/exec.c:415 src/exec.c:417 src/exec.c:419 src/exec.c:422 +#: src/exec.c:438 src/exec.c:440 src/exec.c:595 src/exec.c:790 +#: src/exec_pty.c:466 src/exec_pty.c:722 src/exec_pty.c:792 src/exec_pty.c:794 +#: src/exec_pty.c:806 src/exec_pty.c:808 src/exec_pty.c:1289 +#: src/exec_pty.c:1291 src/exec_pty.c:1296 src/exec_pty.c:1298 +#: src/exec_pty.c:1312 src/exec_pty.c:1323 src/exec_pty.c:1325 +#: src/exec_pty.c:1327 src/exec_pty.c:1329 src/exec_pty.c:1331 +#: src/exec_pty.c:1333 src/exec_pty.c:1335 src/signal.c:147 #, c-format msgid "unable to set handler for signal %d" msgstr "không thể đặt bộ tiếp hợp cho tín hiệu %d" -#: src/exec.c:135 src/exec_pty.c:845 -msgid "policy plugin failed session initialization" -msgstr "phần bổ xung chính sách gặp lỗi khi khởi tạo phiên" - -#: src/exec.c:140 src/exec_pty.c:861 src/exec_pty.c:1392 src/tgetpass.c:221 +#: src/exec.c:126 src/exec_pty.c:838 src/exec_pty.c:1373 src/tgetpass.c:265 msgid "unable to fork" msgstr "không thể tạo tiến trình con" -#: src/exec.c:318 src/exec.c:326 src/exec.c:877 src/exec_pty.c:604 -#: src/exec_pty.c:609 src/exec_pty.c:667 src/exec_pty.c:674 src/exec_pty.c:965 -#: src/exec_pty.c:975 src/exec_pty.c:1020 src/exec_pty.c:1027 -#: src/exec_pty.c:1457 src/exec_pty.c:1464 src/exec_pty.c:1471 +#: src/exec.c:304 src/exec.c:312 src/exec.c:868 src/exec_pty.c:604 +#: src/exec_pty.c:611 src/exec_pty.c:654 src/exec_pty.c:659 src/exec_pty.c:946 +#: src/exec_pty.c:956 src/exec_pty.c:1001 src/exec_pty.c:1008 +#: src/exec_pty.c:1438 src/exec_pty.c:1445 src/exec_pty.c:1452 msgid "unable to add event to queue" msgstr "không thể thêm sự kiện vào hàng đợi" -#: src/exec.c:406 +#: src/exec.c:392 msgid "unable to create sockets" -msgstr "không thể tạo sockets" +msgstr "không thể tạo các ổ cắm mạng" + +#: src/exec.c:447 +msgid "policy plugin failed session initialization" +msgstr "phần bổ sung chính sách gặp lỗi khi khởi tạo phiên" -#: src/exec.c:502 +#: src/exec.c:492 msgid "error in event loop" msgstr "có lỗi trong vòng lặp sự kiện" -#: src/exec.c:520 +#: src/exec.c:510 msgid "unable to restore tty label" msgstr "không thể phục hồi nhãn cho tty" -#: src/exec.c:613 src/exec_pty.c:514 src/signal.c:95 +#: src/exec.c:603 src/exec_pty.c:498 src/signal.c:86 #, c-format msgid "unable to restore handler for signal %d" msgstr "không thể phục hồi bộ tiếp hợp cho tín hiệu %d" -#: src/exec.c:731 src/exec_pty.c:1199 +#: src/exec.c:721 src/exec_pty.c:1180 msgid "error reading from signal pipe" msgstr "lỗi khi đọc từ đường ống dẫn tín hiệu" -#: src/exec_common.c:73 +#: src/exec_common.c:166 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "không thể xóa bỏ PRIV_PROC_EXEC từ PRIV_LIMIT" -#: src/exec_pty.c:200 +#: src/exec_pty.c:188 msgid "unable to allocate pty" msgstr "không thể phân bổ pty" -#: src/exec_pty.c:780 src/exec_pty.c:789 src/exec_pty.c:797 -#: src/exec_pty.c:1300 src/exec_pty.c:1389 src/signal.c:137 src/tgetpass.c:218 +#: src/exec_pty.c:766 src/exec_pty.c:775 src/exec_pty.c:783 +#: src/exec_pty.c:1281 src/exec_pty.c:1370 src/signal.c:128 src/tgetpass.c:261 msgid "unable to create pipe" msgstr "không tạo được đường ống pipe" -#: src/exec_pty.c:836 -msgid "unable to set terminal to raw mode" -msgstr "không thể đặt thiết bị cuối sang chế độ thô" - -#: src/exec_pty.c:1232 +#: src/exec_pty.c:1213 msgid "error reading from pipe" msgstr "gặp lỗi khi đọc từ một đường ống dẫn lệnh" -#: src/exec_pty.c:1257 +#: src/exec_pty.c:1238 msgid "error reading from socketpair" msgstr "gặp lỗi khi đọc từ socketpair" -#: src/exec_pty.c:1266 +#: src/exec_pty.c:1247 #, c-format msgid "unexpected reply type on backchannel: %d" msgstr "kiểu trả về không như mong đợi từ backchannel: %d" -#: src/exec_pty.c:1368 +#: src/exec_pty.c:1349 msgid "unable to set controlling tty" msgstr "không thể đặt điều khiển cho tty" -#: src/load_plugins.c:59 src/load_plugins.c:72 src/load_plugins.c:89 -#: src/load_plugins.c:142 src/load_plugins.c:148 src/load_plugins.c:154 -#: src/load_plugins.c:195 src/load_plugins.c:202 src/load_plugins.c:209 -#: src/load_plugins.c:215 +#: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 +#: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 +#: src/load_plugins.c:170 src/load_plugins.c:178 src/load_plugins.c:185 +#: src/load_plugins.c:191 #, c-format msgid "error in %s, line %d while loading plugin `%s'" msgstr "lỗi trong %s, dòng %d, trong khi tải phần bổ sung “%s”" -#: src/load_plugins.c:91 +#: src/load_plugins.c:87 #, c-format msgid "%s%s: %s" msgstr "%s%s: %s" -#: src/load_plugins.c:150 +#: src/load_plugins.c:125 #, c-format msgid "%s must be owned by uid %d" msgstr "%s phải được sở hữu bởi uid %d" -#: src/load_plugins.c:156 +#: src/load_plugins.c:131 #, c-format msgid "%s must be only be writable by owner" msgstr "%s phải là những thứ chỉ có thể ghi bởi chủ sở hữu" -#: src/load_plugins.c:197 +#: src/load_plugins.c:172 #, c-format msgid "unable to load %s: %s" msgstr "không thể tải %s: %s" -#: src/load_plugins.c:204 +#: src/load_plugins.c:180 #, c-format msgid "unable to find symbol `%s' in %s" msgstr "không tìm thấy ký hiệu “%s” trong %s" -#: src/load_plugins.c:211 +#: src/load_plugins.c:187 #, c-format msgid "unknown policy type %d found in %s" msgstr "không hiểu kiểu chính sách %d tìm thấy trong %s" -#: src/load_plugins.c:217 +#: src/load_plugins.c:193 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "không tương thích số hiệu phiên bản lớn %d (cần %d) tìm thấy trong %s" -#: src/load_plugins.c:226 +#: src/load_plugins.c:202 #, c-format msgid "ignoring policy plugin `%s' in %s, line %d" -msgstr "lờ đi phần bổ xung chính sách “%s” trong %s, dòng %d" +msgstr "lờ đi phần bổ sung chính sách “%s” trong %s, dòng %d" -#: src/load_plugins.c:228 +#: src/load_plugins.c:204 msgid "only a single policy plugin may be specified" -msgstr "chỉ được phép chỉ định một phần bổ xung chính sách" +msgstr "chỉ được phép chỉ định một phần bổ sung chính sách" -#: src/load_plugins.c:231 +#: src/load_plugins.c:207 #, c-format msgid "ignoring duplicate policy plugin `%s' in %s, line %d" -msgstr "lờ đi phần bổ xung chính sách bị trùng lặp “%s” trong %s, dòng %d" +msgstr "lờ đi phần bổ sung chính sách bị trùng lặp “%s” trong %s, dòng %d" -#: src/load_plugins.c:249 +#: src/load_plugins.c:228 #, c-format msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" -msgstr "lờ đi phần bổ xung I/O trùng lặp “%s” trong %s, dòng %d" +msgstr "lờ đi phần bổ sung I/O trùng lặp “%s” trong %s, dòng %d" -#: src/load_plugins.c:338 +#: src/load_plugins.c:331 #, c-format msgid "policy plugin %s does not include a check_policy method" -msgstr "phần bổ xung chính sách %s không bao gồm phương thức kiểm tra chính sách" +msgstr "phần bổ sung chính sách %s không bao gồm phương thức kiểm tra chính sách" -#: src/net_ifs.c:236 -msgid "unable to open socket" -msgstr "không mở được socket" +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:476 +#, c-format +msgid "internal error, %s overflow" +msgstr "lỗi nội bộ, %s bị tràn" -#: src/parse_args.c:241 +#: src/parse_args.c:239 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "đối số cho -C phải là một số lớn hơn hoặc bằng 3" -#: src/parse_args.c:403 +#: src/parse_args.c:406 msgid "you may not specify both the `-i' and `-s' options" msgstr "bạn không thể chỉ định đồng thời cả hai tùy chọn “-i” và “-s”" -#: src/parse_args.c:407 +#: src/parse_args.c:410 msgid "you may not specify both the `-i' and `-E' options" msgstr "bạn không thể chỉ định cả hai tùy chọn “-i” và “-E”" -#: src/parse_args.c:417 +#: src/parse_args.c:420 msgid "the `-E' option is not valid in edit mode" msgstr "tùy chọn “-E” không hợp lệ trong chế độ chỉnh sửa" -#: src/parse_args.c:419 +#: src/parse_args.c:422 msgid "you may not specify environment variables in edit mode" msgstr "bạn có lẽ không được chỉ định biến môi trường trong chế độ soạn thảo" -#: src/parse_args.c:427 +#: src/parse_args.c:430 msgid "the `-U' option may only be used with the `-l' option" msgstr "tùy chọn “-U” chỉ sử dụng cùng với tùy chọn “-l”" -#: src/parse_args.c:431 +#: src/parse_args.c:434 msgid "the `-A' and `-S' options may not be used together" msgstr "tùy chọn “-A” và “-S” không thể dùng cùng một lúc với nhau" -#: src/parse_args.c:497 +#: src/parse_args.c:504 msgid "sudoedit is not supported on this platform" msgstr "sudoedit không được hỗ trợ trên nền tảng này" -#: src/parse_args.c:570 +#: src/parse_args.c:577 msgid "Only one of the -e, -h, -i, -K, -l, -s, -v or -V options may be specified" msgstr "Chỉ được phép chỉ định một trong số các tùy chọn -e, -h, -i, -K, -l, -s, -v hay -V" -#: src/parse_args.c:584 +#: src/parse_args.c:591 #, c-format msgid "" "%s - edit files as another user\n" @@ -321,7 +336,7 @@ "%s - sửa chữa các tập tin trên danh nghĩa người dùng khác\n" "\n" -#: src/parse_args.c:586 +#: src/parse_args.c:593 #, c-format msgid "" "%s - execute a command as another user\n" @@ -330,7 +345,7 @@ "%s - thực hiện câu lệnh trên danh nghĩa người dùng khác\n" "\n" -#: src/parse_args.c:591 +#: src/parse_args.c:598 #, c-format msgid "" "\n" @@ -339,483 +354,519 @@ "\n" "Tùy chọn:\n" -#: src/parse_args.c:593 +#: src/parse_args.c:600 msgid "use a helper program for password prompting" msgstr "sử dụng chương trình trợ giúp cho hỏi đáp mật khẩu" -#: src/parse_args.c:596 +#: src/parse_args.c:603 msgid "use specified BSD authentication type" msgstr "sử dụng kiểu xác thực BSD được chỉ ra" -#: src/parse_args.c:599 +#: src/parse_args.c:606 msgid "run command in the background" msgstr "chạy lệnh ở chế độ nền" -#: src/parse_args.c:601 +#: src/parse_args.c:608 msgid "close all file descriptors >= num" msgstr "đóng tất cả các mô tả của tập tin >= số" -#: src/parse_args.c:604 +#: src/parse_args.c:611 msgid "run command with the specified BSD login class" msgstr "chạy lệnh với một lớp đăng nhập BSD được chỉ ra" -#: src/parse_args.c:607 +#: src/parse_args.c:614 msgid "preserve user environment when running command" msgstr "bảo tồn môi trường người dùng khi thi hành lệnh" -#: src/parse_args.c:609 +#: src/parse_args.c:616 msgid "edit files instead of running a command" msgstr "chỉnh sửa các tập tin thay vì chạy lệnh" -#: src/parse_args.c:611 +#: src/parse_args.c:618 msgid "run command as the specified group name or ID" msgstr "thực hiện câu lệnh với tư cách là tên hay ID của nhóm được chỉ định" -#: src/parse_args.c:613 +#: src/parse_args.c:620 msgid "set HOME variable to target user's home dir" msgstr "đặt biến HOME cho thư mục riêng của người dùng đích" -#: src/parse_args.c:615 +#: src/parse_args.c:622 msgid "display help message and exit" msgstr "hiển thị trợ giúp này rồi thoát" -#: src/parse_args.c:617 +#: src/parse_args.c:624 msgid "run command on host (if supported by plugin)" -msgstr "chạy câu lệnh trên máy chủ (nếu được hỗ trợ bởi phần bổ xung)" +msgstr "chạy câu lệnh trên máy chủ (nếu được hỗ trợ bởi phần bổ sung)" -#: src/parse_args.c:619 +#: src/parse_args.c:626 msgid "run login shell as the target user; a command may also be specified" msgstr "chạy shell đăng nhập như là người dùng đích; có thể đồng thời chỉ định một câu lệnh" -#: src/parse_args.c:621 +#: src/parse_args.c:628 msgid "remove timestamp file completely" msgstr "gỡ bỏ hoàn toàn dấu vết thời gian của tập tin" -#: src/parse_args.c:623 +#: src/parse_args.c:630 msgid "invalidate timestamp file" msgstr "làm mất hiệu lực dấu vết thời gian (timestamp) của tập tin" -#: src/parse_args.c:625 +#: src/parse_args.c:632 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "liệt kê đặc quyền của người dùng hay kiểm tra câu lệnh xác định; dùng hai lần cho định dạng dài" -#: src/parse_args.c:627 +#: src/parse_args.c:634 msgid "non-interactive mode, no prompts are used" msgstr "chế độ không-tương-tác, sẽ không hỏi tên người dùng" -#: src/parse_args.c:629 +#: src/parse_args.c:636 msgid "preserve group vector instead of setting to target's" msgstr "bảo tồn véc-tơ nhóm thay vì các cài đặt cho đích" -#: src/parse_args.c:631 +#: src/parse_args.c:638 msgid "use the specified password prompt" msgstr "sử dụng nhắc nhập mật khẩu đã chỉ ra" -#: src/parse_args.c:634 +#: src/parse_args.c:641 msgid "create SELinux security context with specified role" msgstr "tạo ngữ cảnh an ninh SELinux với vai trò đã chỉ ra" -#: src/parse_args.c:637 +#: src/parse_args.c:644 msgid "read password from standard input" msgstr "đọc mật khẩu từ đầu vào tiêu chuẩn" -#: src/parse_args.c:639 +#: src/parse_args.c:646 msgid "run shell as the target user; a command may also be specified" msgstr "chạy hệ vỏ dưới danh nghĩa người dùng đích; cũng có thể chỉ định thêm câu lệnh" -#: src/parse_args.c:642 +#: src/parse_args.c:649 msgid "create SELinux security context with specified type" msgstr "tạo ngữ cảnh an ninh SELinux với kiểu đã chỉ ra" -#: src/parse_args.c:645 +#: src/parse_args.c:652 msgid "in list mode, display privileges for user" msgstr "ở chế độ liệt kê, hiển thị đặc quyền cho người dùng" -#: src/parse_args.c:647 +#: src/parse_args.c:654 msgid "run command (or edit file) as specified user name or ID" msgstr "chạy lệnh (hay sửa chữa tập tin) trên tư cách của người dùng hay ID đã chỉ ra" -#: src/parse_args.c:649 +#: src/parse_args.c:656 msgid "display version information and exit" msgstr "hiển thị thông tin phiên bản rồi thoát" -#: src/parse_args.c:651 +#: src/parse_args.c:658 msgid "update user's timestamp without running a command" msgstr "cập nhật dấu vết thời gian (timestamp) của người dùng mà không chạy một lệnh" -#: src/parse_args.c:653 +#: src/parse_args.c:660 msgid "stop processing command line arguments" msgstr "dừng việc xử lý đối số dòng lệnh" -#: src/selinux.c:77 +#: src/selinux.c:78 msgid "unable to open audit system" msgstr "không thể mở hệ thống audit" -#: src/selinux.c:85 +#: src/selinux.c:88 msgid "unable to send audit message" msgstr "không thể gửi thông tin audit" -#: src/selinux.c:113 +#: src/selinux.c:116 #, c-format msgid "unable to fgetfilecon %s" msgstr "không thể fgetfilecon %s" -#: src/selinux.c:118 +#: src/selinux.c:121 #, c-format msgid "%s changed labels" msgstr "%s nhãn đã thay đổi" -#: src/selinux.c:123 +#: src/selinux.c:126 #, c-format msgid "unable to restore context for %s" msgstr "Không thể phục hồi ngữ cảnh cho %s" -#: src/selinux.c:163 +#: src/selinux.c:166 #, c-format msgid "unable to open %s, not relabeling tty" msgstr "không thể mở %s, không phải là tty liên quan" -#: src/selinux.c:172 +#: src/selinux.c:175 msgid "unable to get current tty context, not relabeling tty" msgstr "không thể lấy ngữ cảnh tty hiện hành, không phải là tty có liên quan" -#: src/selinux.c:179 +#: src/selinux.c:182 msgid "unable to get new tty context, not relabeling tty" msgstr "không thể lấy ngữ cảnh tty mới, không phải là tty có liên quan" -#: src/selinux.c:186 +#: src/selinux.c:189 msgid "unable to set new tty context" msgstr "không thể đặt ngữ cảnh tty mới" -#: src/selinux.c:252 +#: src/selinux.c:255 #, c-format msgid "you must specify a role for type %s" msgstr "bạn phải chỉ định một kiểu vai trò cho %s" -#: src/selinux.c:258 +#: src/selinux.c:261 #, c-format msgid "unable to get default type for role %s" msgstr "không thể lấy kiểu mặc định cho vai trò %s" -#: src/selinux.c:276 +#: src/selinux.c:279 #, c-format msgid "failed to set new role %s" msgstr "gặp lỗi khi đặt đặt vai trò mới %s" -#: src/selinux.c:280 +#: src/selinux.c:283 #, c-format msgid "failed to set new type %s" msgstr "gặp lỗi khi đặt kiểu mới %s" -#: src/selinux.c:289 +#: src/selinux.c:295 #, c-format msgid "%s is not a valid context" msgstr "%s không phải là một ngữ cảnh hợp lệ" -#: src/selinux.c:324 +#: src/selinux.c:330 msgid "failed to get old_context" msgstr "gặp lỗi khi lấy ngữ cảnh cũ" -#: src/selinux.c:330 +#: src/selinux.c:336 msgid "unable to determine enforcing mode." msgstr "không thể xác định rõ chế độ ép buộc." -#: src/selinux.c:347 +#: src/selinux.c:353 #, c-format msgid "unable to set tty context to %s" msgstr "không thể cài đặt ngữ cảnh tty mới cho %s" -#: src/selinux.c:386 +#: src/selinux.c:392 #, c-format msgid "unable to set exec context to %s" msgstr "không thể đặt ngữ cảnh bảo thực thi thành %s" -#: src/selinux.c:393 +#: src/selinux.c:399 #, c-format msgid "unable to set key creation context to %s" msgstr "không thể đặt ngữ cảnh tạo khóa thành %s" -#: src/sesh.c:80 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "cần thiết ít nhất một đối số" -#: src/sesh.c:109 +#: src/sesh.c:106 +#, c-format +msgid "invalid file descriptor number: %s" +msgstr "số mô tả của tập tin không hợp lệ: %s" + +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "không thể chạy %s như là hệ vỏ đăng nhập" -#: src/sesh.c:114 src/sudo.c:1186 +#: src/sesh.c:125 src/sudo.c:1274 #, c-format msgid "unable to execute %s" msgstr "không thể thực thi %s" -#: src/signal.c:77 +#: src/signal.c:68 #, c-format msgid "unable to save handler for signal %d" msgstr "không thể ghi lại bộ tiếp hợp cho tín hiệu %d" -#: src/solaris.c:88 +#: src/solaris.c:76 msgid "resource control limit has been reached" msgstr "giới hạn điều khiển tài nguyên đã tới hạn" -#: src/solaris.c:91 +#: src/solaris.c:79 #, c-format msgid "user \"%s\" is not a member of project \"%s\"" msgstr "người dùng “%s” không phải là thành viên của dự án “%s”" -#: src/solaris.c:95 +#: src/solaris.c:83 msgid "the invoking task is final" msgstr "tác vụ được gọi là cuối cùng" -#: src/solaris.c:98 +#: src/solaris.c:86 #, c-format msgid "could not join project \"%s\"" msgstr "không thể gia nhập dự án “%s”" -#: src/solaris.c:103 +#: src/solaris.c:91 #, c-format msgid "no resource pool accepting default bindings exists for project \"%s\"" msgstr "không kho tài nguyên chung nào được thừa nhận ràng buộc đã tồn tại sẵn cho dự án “%s”" -#: src/solaris.c:107 +#: src/solaris.c:95 #, c-format msgid "specified resource pool does not exist for project \"%s\"" msgstr "nguồn tài nguyên chung được chỉ ra chưa tồn tại cho dự án “%s”" -#: src/solaris.c:111 +#: src/solaris.c:99 #, c-format msgid "could not bind to default resource pool for project \"%s\"" msgstr "không thể buộc phần tài nguyên chung mặc định cho dự án “%s”" -#: src/solaris.c:117 +#: src/solaris.c:105 #, c-format msgid "setproject failed for project \"%s\"" msgstr "đặt dự án cho dự án “%s” gặp lỗi" -#: src/solaris.c:119 +#: src/solaris.c:107 #, c-format msgid "warning, resource control assignment failed for project \"%s\"" msgstr "cảnh báo, nguồn điều khiển gán gặp lỗi cho dự án “%s”" -#: src/sudo.c:209 +#: src/sudo.c:212 #, c-format msgid "Sudo version %s\n" -msgstr "sudo phiên bản %s\n" +msgstr "Sudo phiên bản %s\n" -#: src/sudo.c:211 +#: src/sudo.c:214 #, c-format msgid "Configure options: %s\n" msgstr "Các tùy chọn cấu hình: %s\n" -#: src/sudo.c:216 +#: src/sudo.c:222 msgid "fatal error, unable to load plugins" -msgstr "lỗi nghiêm trọng, không thể tải plugins" +msgstr "lỗi nghiêm trọng, không thể tải các phần bổ sung" -#: src/sudo.c:224 +#: src/sudo.c:230 msgid "unable to initialize policy plugin" -msgstr "không thể khởi tạo phần bổ xung chính sách" +msgstr "không thể khởi tạo phần bổ sung chính sách" + +#: src/sudo.c:276 +msgid "plugin did not return a command to execute" +msgstr "phần bổ sung không trả về một lệnh để thực thi" -#: src/sudo.c:280 +#: src/sudo.c:292 #, c-format msgid "error initializing I/O plugin %s" msgstr "Gặp lỗi khi nạp phần bổ sung I/O %s" -#: src/sudo.c:306 +#: src/sudo.c:318 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "không mong đợi chế độ sudo 0x%x" -#: src/sudo.c:426 +#: src/sudo.c:461 msgid "unable to get group vector" msgstr "không thể lấy véc-tơ nhóm" -#: src/sudo.c:478 +#: src/sudo.c:522 #, c-format msgid "unknown uid %u: who are you?" -msgstr "không hiểu uid %u: bạn là ai?" +msgstr "không hiểu mã số người dùng %u: bạn là ai?" -#: src/sudo.c:785 +#: src/sudo.c:859 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s phải được sở hữu bởi uid %d và bít setuid phải được đặt" -#: src/sudo.c:788 +#: src/sudo.c:862 #, 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 chịu tác động hiện tại không phải là %d, có phải là %s trên hệ thống tập tin với tuỳ chọn “nosuid” được đặt, hay một hệ thống tập tin NFS không có đặc quyền của root không?" +msgstr "uid chịu tác động hiện tại không phải là %d, có phải là %s trên hệ thống tập tin với tùy chọn “nosuid” được đặt, hay một hệ thống tập tin NFS không có đặc quyền của root không?" -#: src/sudo.c:794 +#: src/sudo.c:868 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "uid chịu tác động hiện tại không phải là %d, chương trình sudo có được cài với setuid root không?" -#: src/sudo.c:923 +#: src/sudo.c:999 #, c-format msgid "unknown login class %s" msgstr "không hiểu lớp đăng nhập %s" -#: src/sudo.c:936 +#: src/sudo.c:1012 msgid "unable to set user context" msgstr "không thể đặt ngữ cảnh người dùng" -#: src/sudo.c:950 +#: src/sudo.c:1026 msgid "unable to set supplementary group IDs" msgstr "không thể đặt nhóm phụ IDs" -#: src/sudo.c:957 +#: src/sudo.c:1033 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "không thể đặt hiệu ứng gid chạy như là gid %u" -#: src/sudo.c:963 +#: src/sudo.c:1039 #, c-format msgid "unable to set gid to runas gid %u" msgstr "không thể thay đổi gid thành runas gid %u" -#: src/sudo.c:970 +#: src/sudo.c:1046 msgid "unable to set process priority" msgstr "không thể đặt ưu tiên cho quá trình" -#: src/sudo.c:978 +#: src/sudo.c:1054 #, c-format msgid "unable to change root to %s" msgstr "không thể chuyển đổi thư mục gốc thành %s" -#: src/sudo.c:991 src/sudo.c:997 src/sudo.c:1003 +#: src/sudo.c:1067 src/sudo.c:1073 src/sudo.c:1080 #, c-format msgid "unable to change to runas uid (%u, %u)" -msgstr "không thể thay đổi thành runas uid (%u, %u)" +msgstr "không thể thay đổi thành chạy như là mã người dùng này (%u, %u)" -#: src/sudo.c:1021 +#: src/sudo.c:1098 #, c-format msgid "unable to change directory to %s" msgstr "không thể thay đổi thư mục thành %s" -#: src/sudo.c:1082 +#: src/sudo.c:1156 #, c-format msgid "unexpected child termination condition: %d" msgstr "biểu thức điều kiện con kết thúc không như mong đợi: %d" -#: src/sudo.c:1214 +#: src/sudo.c:1302 #, c-format msgid "policy plugin %s is missing the `check_policy' method" -msgstr "phần bổ xung chính sách %s bị thiếu phương thức kiểm tra chính sách “check_policy”" +msgstr "phần bổ sung chính sách %s bị thiếu phương thức kiểm tra chính sách “check_policy”" -#: src/sudo.c:1232 +#: src/sudo.c:1320 #, c-format msgid "policy plugin %s does not support listing privileges" -msgstr "phần bổ xung chính sách %s không hỗ trợ liệt kê đặc quyền" +msgstr "phần bổ sung chính sách %s không hỗ trợ liệt kê đặc quyền" -#: src/sudo.c:1249 +#: src/sudo.c:1337 #, c-format msgid "policy plugin %s does not support the -v option" -msgstr "phần bổ xung chính sách %s không hỗ trợ tùy chọn -v" +msgstr "phần bổ sung chính sách %s không hỗ trợ tùy chọn -v" -#: src/sudo.c:1264 +#: src/sudo.c:1352 #, c-format msgid "policy plugin %s does not support the -k/-K options" -msgstr "phần bổ xung chính sách %s không hỗ trợ tùy chọn -k/-K" +msgstr "phần bổ sung chính sách %s không hỗ trợ tùy chọn -k/-K" + +#: src/sudo_edit.c:181 +msgid "unable to restore current working directory" +msgstr "không thể phục hồi thư mục làm việc hiện tại" -#: src/sudo_edit.c:203 src/sudo_edit.c:294 +#: src/sudo_edit.c:526 src/sudo_edit.c:630 #, c-format msgid "%s: not a regular file" msgstr "%s: không phải là tập tin thường" -#: src/sudo_edit.c:230 src/sudo_edit.c:332 +#: src/sudo_edit.c:533 +#, c-format +msgid "%s: editing symbolic links is not permitted" +msgstr "%s: sửa các liên kết mềm là không được phép" + +#: src/sudo_edit.c:536 +#, c-format +msgid "%s: editing files in a writable directory is not permitted" +msgstr "%s: sửa các tập tin trong thư mục ghi được là là không được phép" + +#: src/sudo_edit.c:567 src/sudo_edit.c:669 #, c-format msgid "%s: short write" msgstr "%s: ghi ngắn" -#: src/sudo_edit.c:295 +#: src/sudo_edit.c:631 #, c-format msgid "%s left unmodified" msgstr "%s còn lại chưa thay đổi" -#: src/sudo_edit.c:308 src/sudo_edit.c:483 +#: src/sudo_edit.c:644 src/sudo_edit.c:830 #, c-format msgid "%s unchanged" msgstr "%s không thay đổi" -#: src/sudo_edit.c:321 src/sudo_edit.c:343 +#: src/sudo_edit.c:658 src/sudo_edit.c:680 #, c-format msgid "unable to write to %s" msgstr "không thể ghi vào %s" -#: src/sudo_edit.c:322 src/sudo_edit.c:341 src/sudo_edit.c:344 -#: src/sudo_edit.c:508 src/sudo_edit.c:512 +#: src/sudo_edit.c:659 src/sudo_edit.c:678 src/sudo_edit.c:681 +#: src/sudo_edit.c:855 src/sudo_edit.c:859 #, c-format msgid "contents of edit session left in %s" msgstr "nội dung của phiên chỉnh sửa chỉ còn %s" -#: src/sudo_edit.c:340 +#: src/sudo_edit.c:677 msgid "unable to read temporary file" msgstr "không thể đọc tập tin tạm thời" -#: src/sudo_edit.c:417 +#: src/sudo_edit.c:760 msgid "sesh: internal error: odd number of paths" msgstr "sesh: lỗi nội tại: số cũ của đường dẫn" -#: src/sudo_edit.c:419 +#: src/sudo_edit.c:762 msgid "sesh: unable to create temporary files" msgstr "sesh: không thể tạo tập tin tạm thời" -#: src/sudo_edit.c:421 src/sudo_edit.c:515 +#: src/sudo_edit.c:764 src/sudo_edit.c:862 #, c-format msgid "sesh: unknown error %d" msgstr "sesh: không hiểu lỗi %d" -#: src/sudo_edit.c:507 +#: src/sudo_edit.c:854 msgid "unable to copy temporary files back to their original location" msgstr "không thể chép các tập tin tạm trở lại vị trí gốc của chúng" -#: src/sudo_edit.c:511 +#: src/sudo_edit.c:858 msgid "unable to copy some of the temporary files back to their original location" msgstr "không thể chép một số tập tin tạm trở lại vị trí gốc của chúng" -#: src/sudo_edit.c:554 +#: src/sudo_edit.c:901 #, c-format msgid "unable to change uid to root (%u)" msgstr "không thể thay đổi uid thành root (%u)" -#: src/sudo_edit.c:571 +#: src/sudo_edit.c:918 msgid "plugin error: missing file list for sudoedit" -msgstr "lỗi phần bổ xung: thiếu danh sách tập tin cho sudoedit" +msgstr "lỗi phần bổ sung: thiếu danh sách tập tin cho sudoedit" + +#: src/sudo_edit.c:959 src/sudo_edit.c:972 +msgid "unable to read the clock" +msgstr "không thể đọc khóa" -#: src/tgetpass.c:90 +#: src/tgetpass.c:107 msgid "no tty present and no askpass program specified" msgstr "không có tty hiện diện và không có chương trình hỏi mật khẩu nào được chỉ ra" -#: src/tgetpass.c:99 +#: src/tgetpass.c:116 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "không có chương trình hỏi mật khẩu nào được chỉ ra, hãy thử đặt SUDO_ASKPASS" -#: src/tgetpass.c:232 +#: src/tgetpass.c:276 #, c-format msgid "unable to set gid to %u" msgstr "không thể đặt mã số nhóm thành %u" -#: src/tgetpass.c:236 +#: src/tgetpass.c:280 #, c-format msgid "unable to set uid to %u" msgstr "không thể đặt mã số người dùng thành %u" -#: src/tgetpass.c:241 +#: src/tgetpass.c:285 #, c-format msgid "unable to run %s" msgstr "không thể chạy %s" -#: src/utmp.c:278 +#: src/utmp.c:266 msgid "unable to save stdin" msgstr "không thể ghi lại đầu vào tiêu chuẩn" -#: src/utmp.c:280 +#: src/utmp.c:268 msgid "unable to dup2 stdin" msgstr "không thể dup2 (nhân đôi) đầu vào tiêu chuẩn" -#: src/utmp.c:283 +#: src/utmp.c:271 msgid "unable to restore stdin" msgstr "không thể phục hồi đầu vào tiêu chuẩn" +#~ msgid "internal error, tried allocate zero bytes" +#~ msgstr "lỗi nội bộ, đã phân bổ 0 byte bộ nhớ" + +#~ msgid "unable to set terminal to raw mode" +#~ msgstr "không thể đặt thiết bị cuối sang chế độ thô" + +#~ msgid "unable to open socket" +#~ msgstr "không mở được socket" + #~ msgid "%s: %s: %s\n" #~ msgstr "%s: %s: %s\n" @@ -855,9 +906,6 @@ #~ msgid "when listing, list specified user's privileges\n" #~ msgstr "khi liệt kê, liệt kê các đặc quyền của người dùng\n" -#~ msgid "unable to allocate memory" -#~ msgstr "không thể cấp phát vùng nhớ" - #~ msgid ": " #~ msgstr ": " Binary files /tmp/tmptthiRs/aO48KriU4w/sudo-1.8.12/po/zh_CN.mo and /tmp/tmptthiRs/I14WQlLKr_/sudo-1.8.16/po/zh_CN.mo differ diff -Nru sudo-1.8.12/po/zh_CN.po sudo-1.8.16/po/zh_CN.po --- sudo-1.8.12/po/zh_CN.po 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/po/zh_CN.po 2016-03-17 16:13:10.000000000 +0000 @@ -1,14 +1,14 @@ # Chinese simplified translation for sudo. # sudo 的简体中文翻译。 # This file is put in the public domain. -# Wylmer Wang , 2011, 2012, 2013, 2014. +# Wylmer Wang , 2011, 2012, 2013, 2014, 2015, 2016. # msgid "" msgstr "" -"Project-Id-Version: sudo-1.8.12b1\n" -"Report-Msgid-Bugs-To: http://www.sudo.ws/bugs\n" -"POT-Creation-Date: 2014-10-27 12:35-0600\n" -"PO-Revision-Date: 2014-11-09 16:30+0800\n" +"Project-Id-Version: sudo-1.8.16b1\n" +"Report-Msgid-Bugs-To: https://bugzilla.sudo.ws\n" +"POT-Creation-Date: 2016-02-19 15:48-0700\n" +"PO-Revision-Date: 2016-02-26 08:39+0800\n" "Last-Translator: Wylmer Wang \n" "Language-Team: Chinese (simplified) \n" "Language: zh_CN\n" @@ -16,297 +16,312 @@ "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -#: lib/util/aix.c:92 lib/util/aix.c:151 +#: lib/util/aix.c:85 lib/util/aix.c:164 msgid "unable to open userdb" msgstr "无法打开 userdb" -#: lib/util/aix.c:156 +#: lib/util/aix.c:219 #, c-format msgid "unable to switch to registry \"%s\" for %s" msgstr "无法为 %2$s 切换到注册表“%1$s”" -#: lib/util/aix.c:175 +#: lib/util/aix.c:244 msgid "unable to restore registry" msgstr "无法恢复注册表" -#: lib/util/alloc.c:68 lib/util/alloc.c:85 lib/util/alloc.c:106 -#: lib/util/alloc.c:128 lib/util/alloc.c:147 lib/util/alloc.c:170 -msgid "internal error, tried allocate zero bytes" -msgstr "内部错误,试图分配 0 个字节" - -#: lib/util/alloc.c:87 lib/util/alloc.c:109 lib/util/alloc.c:149 -#: lib/util/alloc.c:172 src/net_ifs.c:174 src/net_ifs.c:191 src/net_ifs.c:325 -#, c-format -msgid "internal error, %s overflow" -msgstr "内部错误,%s 溢出" - -#: lib/util/gidlist.c:78 src/load_plugins.c:61 src/load_plugins.c:74 -#: src/sudo.c:572 src/sudo.c:591 src/sudo.c:618 src/sudo.c:627 src/sudo.c:636 -#: src/sudo.c:653 src/sudo.c:700 src/sudo.c:710 +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/gidlist.c:74 +#: lib/util/sudo_conf.c:207 lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 +#: lib/util/sudo_conf.c:569 src/conversation.c:75 src/exec.c:863 +#: src/exec_common.c:107 src/exec_common.c:123 src/exec_common.c:132 +#: src/exec_pty.c:684 src/exec_pty.c:692 src/load_plugins.c:52 +#: src/load_plugins.c:65 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:655 src/sudo.c:665 src/sudo.c:685 src/sudo.c:704 src/sudo.c:713 +#: src/sudo.c:722 src/sudo.c:739 src/sudo.c:780 src/sudo.c:790 src/sudo.c:810 +#: src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 src/sudo.c:1492 +#: src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 #, c-format msgid "%s: %s" msgstr "%s:%s" -#: lib/util/strsignal.c:50 +#: lib/util/aix.c:267 lib/util/gidlist.c:64 lib/util/sudo_conf.c:208 +#: lib/util/sudo_conf.c:290 lib/util/sudo_conf.c:367 lib/util/sudo_conf.c:569 +#: src/conversation.c:76 src/exec.c:863 src/exec_common.c:107 +#: src/exec_common.c:124 src/exec_common.c:133 src/exec_pty.c:684 +#: src/exec_pty.c:692 src/load_plugins.c:215 src/load_plugins.c:238 +#: src/load_plugins.c:303 src/load_plugins.c:318 src/parse_args.c:180 +#: src/parse_args.c:202 src/parse_args.c:370 src/parse_args.c:466 +#: src/parse_args.c:485 src/preserve_fds.c:47 src/preserve_fds.c:130 +#: src/selinux.c:84 src/selinux.c:291 src/selinux.c:416 src/selinux.c:425 +#: src/sesh.c:115 src/sudo.c:201 src/sudo.c:398 src/sudo.c:417 src/sudo.c:481 +#: src/sudo.c:810 src/sudo.c:1215 src/sudo.c:1236 src/sudo.c:1398 +#: src/sudo.c:1492 src/sudo_edit.c:151 src/sudo_edit.c:716 src/sudo_edit.c:813 +#: src/sudo_edit.c:925 src/sudo_edit.c:945 +msgid "unable to allocate memory" +msgstr "无法分配内存" + +#: lib/util/strsignal.c:48 msgid "Unknown signal" msgstr "未知信号" -#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:55 -#: lib/util/strtonum.c:65 lib/util/strtonum.c:183 +#: lib/util/strtoid.c:76 lib/util/strtoid.c:104 lib/util/strtomode.c:48 +#: lib/util/strtonum.c:58 lib/util/strtonum.c:176 msgid "invalid value" msgstr "值无效" -#: lib/util/strtoid.c:90 lib/util/strtoid.c:118 lib/util/strtomode.c:61 -#: lib/util/strtonum.c:68 lib/util/strtonum.c:195 +#: lib/util/strtoid.c:83 lib/util/strtoid.c:111 lib/util/strtomode.c:54 +#: lib/util/strtonum.c:61 lib/util/strtonum.c:188 msgid "value too large" msgstr "值过大" -#: lib/util/strtoid.c:96 lib/util/strtomode.c:61 lib/util/strtonum.c:68 -#: lib/util/strtonum.c:189 +#: lib/util/strtoid.c:89 lib/util/strtomode.c:54 lib/util/strtonum.c:61 +#: lib/util/strtonum.c:182 msgid "value too small" msgstr "值过小" -#: lib/util/sudo_conf.c:181 +#: lib/util/sudo_conf.c:223 #, c-format msgid "invalid Path value `%s' in %s, line %u" msgstr "%2$s 第 %3$u 行的路径值“%1$s”无效" -#: lib/util/sudo_conf.c:335 lib/util/sudo_conf.c:388 +#: lib/util/sudo_conf.c:389 lib/util/sudo_conf.c:442 #, c-format msgid "invalid value for %s `%s' in %s, line %u" msgstr "%3$s 第 %4$u 行的 %1$s 的值“%2$s”无效" -#: lib/util/sudo_conf.c:356 +#: lib/util/sudo_conf.c:410 #, c-format msgid "unsupported group source `%s' in %s, line %u" msgstr "不支持 %2$s 第 %3$u 行的组来源“%1$s”" -#: lib/util/sudo_conf.c:372 +#: lib/util/sudo_conf.c:426 #, c-format msgid "invalid max groups `%s' in %s, line %u" msgstr "%2$s 第 %3$u 行的最大组数“%1$s”无效" -#: lib/util/sudo_conf.c:522 +#: lib/util/sudo_conf.c:585 #, c-format msgid "unable to stat %s" msgstr "无法 stat %s" -#: lib/util/sudo_conf.c:525 +#: lib/util/sudo_conf.c:588 #, c-format msgid "%s is not a regular file" msgstr "%s 不是常规文件" -#: lib/util/sudo_conf.c:528 +#: lib/util/sudo_conf.c:591 #, c-format msgid "%s is owned by uid %u, should be %u" msgstr "%s 属于用户 ID %u,应为 %u" -#: lib/util/sudo_conf.c:532 +#: lib/util/sudo_conf.c:595 #, c-format msgid "%s is world writable" msgstr "%s 可被任何人写" -#: lib/util/sudo_conf.c:535 +#: lib/util/sudo_conf.c:598 #, c-format msgid "%s is group writable" msgstr "%s 可被用户组写" -#: lib/util/sudo_conf.c:545 src/selinux.c:196 src/selinux.c:209 src/sudo.c:341 +#: lib/util/sudo_conf.c:608 src/selinux.c:199 src/selinux.c:212 src/sudo.c:367 #, c-format msgid "unable to open %s" msgstr "打不开 %s" -#: src/exec.c:123 src/exec.c:128 src/exec.c:423 src/exec.c:425 src/exec.c:427 -#: src/exec.c:429 src/exec.c:431 src/exec.c:433 src/exec.c:436 src/exec.c:453 -#: src/exec.c:455 src/exec.c:457 src/exec.c:605 src/exec.c:800 -#: src/exec_pty.c:480 src/exec_pty.c:736 src/exec_pty.c:806 src/exec_pty.c:808 -#: src/exec_pty.c:820 src/exec_pty.c:1308 src/exec_pty.c:1310 -#: src/exec_pty.c:1315 src/exec_pty.c:1317 src/exec_pty.c:1331 -#: src/exec_pty.c:1342 src/exec_pty.c:1344 src/exec_pty.c:1346 -#: src/exec_pty.c:1348 src/exec_pty.c:1350 src/exec_pty.c:1352 -#: src/exec_pty.c:1354 src/signal.c:156 +#: src/exec.c:114 src/exec.c:116 src/exec.c:121 src/exec.c:409 src/exec.c:411 +#: src/exec.c:413 src/exec.c:415 src/exec.c:417 src/exec.c:419 src/exec.c:422 +#: src/exec.c:438 src/exec.c:440 src/exec.c:595 src/exec.c:790 +#: src/exec_pty.c:466 src/exec_pty.c:722 src/exec_pty.c:792 src/exec_pty.c:794 +#: src/exec_pty.c:806 src/exec_pty.c:808 src/exec_pty.c:1289 +#: src/exec_pty.c:1291 src/exec_pty.c:1296 src/exec_pty.c:1298 +#: src/exec_pty.c:1312 src/exec_pty.c:1323 src/exec_pty.c:1325 +#: src/exec_pty.c:1327 src/exec_pty.c:1329 src/exec_pty.c:1331 +#: src/exec_pty.c:1333 src/exec_pty.c:1335 src/signal.c:147 #, c-format msgid "unable to set handler for signal %d" msgstr "无法设置 %d 信号的处理程序" -#: src/exec.c:135 src/exec_pty.c:845 -msgid "policy plugin failed session initialization" -msgstr "策略插件会话初始化失败" - -#: src/exec.c:140 src/exec_pty.c:861 src/exec_pty.c:1392 src/tgetpass.c:221 +#: src/exec.c:126 src/exec_pty.c:838 src/exec_pty.c:1373 src/tgetpass.c:265 msgid "unable to fork" msgstr "无法执行 fork" -#: src/exec.c:318 src/exec.c:326 src/exec.c:877 src/exec_pty.c:604 -#: src/exec_pty.c:609 src/exec_pty.c:667 src/exec_pty.c:674 src/exec_pty.c:965 -#: src/exec_pty.c:975 src/exec_pty.c:1020 src/exec_pty.c:1027 -#: src/exec_pty.c:1457 src/exec_pty.c:1464 src/exec_pty.c:1471 +#: src/exec.c:304 src/exec.c:312 src/exec.c:868 src/exec_pty.c:604 +#: src/exec_pty.c:611 src/exec_pty.c:654 src/exec_pty.c:659 src/exec_pty.c:946 +#: src/exec_pty.c:956 src/exec_pty.c:1001 src/exec_pty.c:1008 +#: src/exec_pty.c:1438 src/exec_pty.c:1445 src/exec_pty.c:1452 msgid "unable to add event to queue" msgstr "无法将事件添加到队列" -#: src/exec.c:406 +#: src/exec.c:392 msgid "unable to create sockets" msgstr "无法创建套接字" -#: src/exec.c:502 +#: src/exec.c:447 +msgid "policy plugin failed session initialization" +msgstr "策略插件会话初始化失败" + +#: src/exec.c:492 msgid "error in event loop" msgstr "事件循环中有错误" -#: src/exec.c:520 +#: src/exec.c:510 msgid "unable to restore tty label" msgstr "无法恢复终端标签" -#: src/exec.c:613 src/exec_pty.c:514 src/signal.c:95 +#: src/exec.c:603 src/exec_pty.c:498 src/signal.c:86 #, c-format msgid "unable to restore handler for signal %d" msgstr "无法恢复 %d 信号的处理程序" -#: src/exec.c:731 src/exec_pty.c:1199 +#: src/exec.c:721 src/exec_pty.c:1180 msgid "error reading from signal pipe" msgstr "从单管道读取出错" -#: src/exec_common.c:73 +#: src/exec_common.c:166 msgid "unable to remove PRIV_PROC_EXEC from PRIV_LIMIT" msgstr "无法从 PRIV_LIMIT 中移除 PRIV_PROC_EXEC" -#: src/exec_pty.c:200 +#: src/exec_pty.c:188 msgid "unable to allocate pty" msgstr "无法分配伪终端" -#: src/exec_pty.c:780 src/exec_pty.c:789 src/exec_pty.c:797 -#: src/exec_pty.c:1300 src/exec_pty.c:1389 src/signal.c:137 src/tgetpass.c:218 +#: src/exec_pty.c:766 src/exec_pty.c:775 src/exec_pty.c:783 +#: src/exec_pty.c:1281 src/exec_pty.c:1370 src/signal.c:128 src/tgetpass.c:261 msgid "unable to create pipe" msgstr "无法创建管道" -#: src/exec_pty.c:836 -msgid "unable to set terminal to raw mode" -msgstr "无法将终端设为原始模式" - -#: src/exec_pty.c:1232 +#: src/exec_pty.c:1213 msgid "error reading from pipe" msgstr "从管道读取出错" -#: src/exec_pty.c:1257 +#: src/exec_pty.c:1238 msgid "error reading from socketpair" msgstr "从套接字对读取出错" -#: src/exec_pty.c:1266 +#: src/exec_pty.c:1247 #, c-format msgid "unexpected reply type on backchannel: %d" msgstr "联络通道的回应类型异常:%d" -#: src/exec_pty.c:1368 +#: src/exec_pty.c:1349 msgid "unable to set controlling tty" msgstr "无法设置控制终端" -#: src/load_plugins.c:59 src/load_plugins.c:72 src/load_plugins.c:89 -#: src/load_plugins.c:142 src/load_plugins.c:148 src/load_plugins.c:154 -#: src/load_plugins.c:195 src/load_plugins.c:202 src/load_plugins.c:209 -#: src/load_plugins.c:215 +#: src/load_plugins.c:50 src/load_plugins.c:63 src/load_plugins.c:85 +#: src/load_plugins.c:115 src/load_plugins.c:123 src/load_plugins.c:129 +#: src/load_plugins.c:170 src/load_plugins.c:178 src/load_plugins.c:185 +#: src/load_plugins.c:191 #, c-format msgid "error in %s, line %d while loading plugin `%s'" msgstr "在加载插件“%3$s”时在 %1$s 第 %2$d 行出错" -#: src/load_plugins.c:91 +#: src/load_plugins.c:87 #, c-format msgid "%s%s: %s" msgstr "%s%s:%s" -#: src/load_plugins.c:150 +#: src/load_plugins.c:125 #, c-format msgid "%s must be owned by uid %d" msgstr "%s 必须属于用户 ID %d(的用户)" -#: src/load_plugins.c:156 +#: src/load_plugins.c:131 #, c-format msgid "%s must be only be writable by owner" msgstr "%s 必须只对其所有者可写" -#: src/load_plugins.c:197 +#: src/load_plugins.c:172 #, c-format msgid "unable to load %s: %s" msgstr "无法加载 %s:%s" -#: src/load_plugins.c:204 +#: src/load_plugins.c:180 #, c-format msgid "unable to find symbol `%s' in %s" msgstr "在 %2$s 中找不到符号“%1$s”" -#: src/load_plugins.c:211 +#: src/load_plugins.c:187 #, c-format msgid "unknown policy type %d found in %s" msgstr "%2$s 中的策略类型 %1$d 未知" -#: src/load_plugins.c:217 +#: src/load_plugins.c:193 #, c-format msgid "incompatible plugin major version %d (expected %d) found in %s" msgstr "%3$s 中发现不兼容的插件主版本号 %1$d(应为 %2$d)" -#: src/load_plugins.c:226 +#: src/load_plugins.c:202 #, c-format msgid "ignoring policy plugin `%s' in %s, line %d" msgstr "忽略位于 %2$s 第 %3$d 行的策略插件“%1$s”" -#: src/load_plugins.c:228 +#: src/load_plugins.c:204 msgid "only a single policy plugin may be specified" msgstr "只能指定一个策略插件" -#: src/load_plugins.c:231 +#: src/load_plugins.c:207 #, c-format msgid "ignoring duplicate policy plugin `%s' in %s, line %d" msgstr "忽略位于 %2$s 第 %3$d 行的重复策略插件“%1$s”" -#: src/load_plugins.c:249 +#: src/load_plugins.c:228 #, c-format msgid "ignoring duplicate I/O plugin `%s' in %s, line %d" msgstr "忽略位于 %2$s 第 %3$d 行的重复 I/O 插件“%1$s”" -#: src/load_plugins.c:338 +#: src/load_plugins.c:331 #, c-format msgid "policy plugin %s does not include a check_policy method" msgstr "策略插件 %s 不包含 check_policy 方法" -#: src/net_ifs.c:236 -msgid "unable to open socket" -msgstr "无法打开套接字" +#: src/net_ifs.c:173 src/net_ifs.c:190 src/net_ifs.c:335 src/sudo.c:476 +#, c-format +msgid "internal error, %s overflow" +msgstr "内部错误,%s 溢出" -#: src/parse_args.c:241 +#: src/parse_args.c:239 msgid "the argument to -C must be a number greater than or equal to 3" msgstr "-C 选项的参数必须是一个大于等于 3 的数字" -#: src/parse_args.c:403 +#: src/parse_args.c:406 msgid "you may not specify both the `-i' and `-s' options" msgstr "您不能同时指定“-i”和“-s”选项" -#: src/parse_args.c:407 +#: src/parse_args.c:410 msgid "you may not specify both the `-i' and `-E' options" msgstr "您不能同时指定“-i”和“-E”选项" -#: src/parse_args.c:417 +#: src/parse_args.c:420 msgid "the `-E' option is not valid in edit mode" msgstr "“-E”选项在编辑模式中无效" -#: src/parse_args.c:419 +#: src/parse_args.c:422 msgid "you may not specify environment variables in edit mode" msgstr "在编辑模式中您不能指定环境变量" -#: src/parse_args.c:427 +#: src/parse_args.c:430 msgid "the `-U' option may only be used with the `-l' option" msgstr "“-U”选项只能与“-l”选项一起使用" -#: src/parse_args.c:431 +#: src/parse_args.c:434 msgid "the `-A' and `-S' options may not be used together" msgstr "“-A”和“-S”选项不可同时使用" -#: src/parse_args.c:497 +#: src/parse_args.c:504 msgid "sudoedit is not supported on this platform" msgstr "此平台不支持 sudoedit" -#: src/parse_args.c:570 +#: src/parse_args.c:577 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:584 +#: src/parse_args.c:591 #, c-format msgid "" "%s - edit files as another user\n" @@ -315,7 +330,7 @@ "%s - 以其他用户身份编辑文件\n" "\n" -#: src/parse_args.c:586 +#: src/parse_args.c:593 #, c-format msgid "" "%s - execute a command as another user\n" @@ -324,7 +339,7 @@ "%s - 以其他用户身份执行一条命令\n" "\n" -#: src/parse_args.c:591 +#: src/parse_args.c:598 #, c-format msgid "" "\n" @@ -333,483 +348,519 @@ "\n" "选项:\n" -#: src/parse_args.c:593 +#: src/parse_args.c:600 msgid "use a helper program for password prompting" msgstr "使用助手程序进行密码提示" -#: src/parse_args.c:596 +#: src/parse_args.c:603 msgid "use specified BSD authentication type" msgstr "使用指定的 BSD 认证类型" -#: src/parse_args.c:599 +#: src/parse_args.c:606 msgid "run command in the background" msgstr "在后台运行命令" -#: src/parse_args.c:601 +#: src/parse_args.c:608 msgid "close all file descriptors >= num" msgstr "关闭所有 >= num 的文件描述符" -#: src/parse_args.c:604 +#: src/parse_args.c:611 msgid "run command with the specified BSD login class" msgstr "以指定的 BSD 登录类别运行命令" -#: src/parse_args.c:607 +#: src/parse_args.c:614 msgid "preserve user environment when running command" msgstr "在执行命令时保留用户环境" -#: src/parse_args.c:609 +#: src/parse_args.c:616 msgid "edit files instead of running a command" msgstr "编辑文件而非执行命令" -#: src/parse_args.c:611 +#: src/parse_args.c:618 msgid "run command as the specified group name or ID" msgstr "以指定的用户组或 ID 执行命令" -#: src/parse_args.c:613 +#: src/parse_args.c:620 msgid "set HOME variable to target user's home dir" msgstr "将 HOME 变量设为目标用户的主目录。" -#: src/parse_args.c:615 +#: src/parse_args.c:622 msgid "display help message and exit" msgstr "显示帮助消息并退出" -#: src/parse_args.c:617 +#: src/parse_args.c:624 msgid "run command on host (if supported by plugin)" msgstr "在主机上运行命令(如果插件支持)" -#: src/parse_args.c:619 +#: src/parse_args.c:626 msgid "run login shell as the target user; a command may also be specified" msgstr "以目标用户身份运行一个登录 shell;可同时指定一条命令" -#: src/parse_args.c:621 +#: src/parse_args.c:628 msgid "remove timestamp file completely" msgstr "完全移除时间戳文件" -#: src/parse_args.c:623 +#: src/parse_args.c:630 msgid "invalidate timestamp file" msgstr "无效的时间戳文件" -#: src/parse_args.c:625 +#: src/parse_args.c:632 msgid "list user's privileges or check a specific command; use twice for longer format" msgstr "列出用户权限或检查某个特定命令;对于长格式,使用两次" -#: src/parse_args.c:627 +#: src/parse_args.c:634 msgid "non-interactive mode, no prompts are used" msgstr "非交互模式,不提示" -#: src/parse_args.c:629 +#: src/parse_args.c:636 msgid "preserve group vector instead of setting to target's" msgstr "保留组向量,而非设置为目标的组向量" -#: src/parse_args.c:631 +#: src/parse_args.c:638 msgid "use the specified password prompt" msgstr "使用指定的密码提示" -#: src/parse_args.c:634 +#: src/parse_args.c:641 msgid "create SELinux security context with specified role" msgstr "以指定的角色创建 SELinux 安全环境" -#: src/parse_args.c:637 +#: src/parse_args.c:644 msgid "read password from standard input" msgstr "从标准输入读取密码" -#: src/parse_args.c:639 +#: src/parse_args.c:646 msgid "run shell as the target user; a command may also be specified" msgstr "以目标用户运行 shell;可同时指定一条命令" -#: src/parse_args.c:642 +#: src/parse_args.c:649 msgid "create SELinux security context with specified type" msgstr "以指定的类型创建 SELinux 安全环境" -#: src/parse_args.c:645 +#: src/parse_args.c:652 msgid "in list mode, display privileges for user" msgstr "在列表模式中显示用户的权限" -#: src/parse_args.c:647 +#: src/parse_args.c:654 msgid "run command (or edit file) as specified user name or ID" msgstr "以指定用户或 ID 运行命令(或编辑文件)" -#: src/parse_args.c:649 +#: src/parse_args.c:656 msgid "display version information and exit" msgstr "显示版本信息并退出" -#: src/parse_args.c:651 +#: src/parse_args.c:658 msgid "update user's timestamp without running a command" msgstr "更新用户的时间戳而不执行命令" -#: src/parse_args.c:653 +#: src/parse_args.c:660 msgid "stop processing command line arguments" msgstr "停止处理命令行参数" -#: src/selinux.c:77 +#: src/selinux.c:78 msgid "unable to open audit system" msgstr "无法打开审查系统" -#: src/selinux.c:85 +#: src/selinux.c:88 msgid "unable to send audit message" msgstr "无法发送审查消息" -#: src/selinux.c:113 +#: src/selinux.c:116 #, c-format msgid "unable to fgetfilecon %s" msgstr "无法 fgetfilecon %s" -#: src/selinux.c:118 +#: src/selinux.c:121 #, c-format msgid "%s changed labels" msgstr "%s 修改了标签" -#: src/selinux.c:123 +#: src/selinux.c:126 #, c-format msgid "unable to restore context for %s" msgstr "无法恢复 %s 的环境" -#: src/selinux.c:163 +#: src/selinux.c:166 #, c-format msgid "unable to open %s, not relabeling tty" msgstr "无法打开 %s,将不重新标记终端" -#: src/selinux.c:172 +#: src/selinux.c:175 msgid "unable to get current tty context, not relabeling tty" msgstr "无法获取当前终端的环境,将不重新标记终端" -#: src/selinux.c:179 +#: src/selinux.c:182 msgid "unable to get new tty context, not relabeling tty" msgstr "无法获取新终端的环境,将不重新标记终端" -#: src/selinux.c:186 +#: src/selinux.c:189 msgid "unable to set new tty context" msgstr "无法设置新终端的环境" -#: src/selinux.c:252 +#: src/selinux.c:255 #, c-format msgid "you must specify a role for type %s" msgstr "您必须为 %s 类型指定一个角色" -#: src/selinux.c:258 +#: src/selinux.c:261 #, c-format msgid "unable to get default type for role %s" msgstr "无法获取 %s 角色的默认类型" -#: src/selinux.c:276 +#: src/selinux.c:279 #, c-format msgid "failed to set new role %s" msgstr "设置新角色 %s 失败" -#: src/selinux.c:280 +#: src/selinux.c:283 #, c-format msgid "failed to set new type %s" msgstr "设置新类型 %s 失败" -#: src/selinux.c:289 +#: src/selinux.c:295 #, c-format msgid "%s is not a valid context" msgstr "%s 不是有效的环境" -#: src/selinux.c:324 +#: src/selinux.c:330 msgid "failed to get old_context" msgstr "无法获取 old_context" -#: src/selinux.c:330 +#: src/selinux.c:336 msgid "unable to determine enforcing mode." msgstr "无法确定强制模式。" -#: src/selinux.c:347 +#: src/selinux.c:353 #, c-format msgid "unable to set tty context to %s" msgstr "无法将终端环境设置为 %s" -#: src/selinux.c:386 +#: src/selinux.c:392 #, c-format msgid "unable to set exec context to %s" msgstr "无法向 %s 设置 exec 环境" -#: src/selinux.c:393 +#: src/selinux.c:399 #, c-format msgid "unable to set key creation context to %s" msgstr "无法向 %s 设置键创建环境" -#: src/sesh.c:80 +#: src/sesh.c:77 msgid "requires at least one argument" msgstr "要求至少有一个参数" -#: src/sesh.c:109 +#: src/sesh.c:106 +#, c-format +msgid "invalid file descriptor number: %s" +msgstr "无效的文件描述符数字:%s" + +#: src/sesh.c:120 #, c-format msgid "unable to run %s as a login shell" msgstr "无法以登录 shell 执行 %s" -#: src/sesh.c:114 src/sudo.c:1186 +#: src/sesh.c:125 src/sudo.c:1274 #, c-format msgid "unable to execute %s" msgstr "无法执行 %s" -#: src/signal.c:77 +#: src/signal.c:68 #, c-format msgid "unable to save handler for signal %d" msgstr "无法保存 %d 信号的处理程序" -#: src/solaris.c:88 +#: src/solaris.c:76 msgid "resource control limit has been reached" msgstr "达到了资源控制限制" -#: src/solaris.c:91 +#: src/solaris.c:79 #, c-format msgid "user \"%s\" is not a member of project \"%s\"" msgstr "用户“%s”不是项目“%s”的成员" -#: src/solaris.c:95 +#: src/solaris.c:83 msgid "the invoking task is final" msgstr "调用的任务是最终的(final)" -#: src/solaris.c:98 +#: src/solaris.c:86 #, c-format msgid "could not join project \"%s\"" msgstr "无法加入项目“%s”" -#: src/solaris.c:103 +#: src/solaris.c:91 #, c-format msgid "no resource pool accepting default bindings exists for project \"%s\"" msgstr "不存在对应于项目“%s”的、接受默认绑定的资源池" -#: src/solaris.c:107 +#: src/solaris.c:95 #, c-format msgid "specified resource pool does not exist for project \"%s\"" msgstr "指定的对应于项目“%s”的资源池不存在" -#: src/solaris.c:111 +#: src/solaris.c:99 #, c-format msgid "could not bind to default resource pool for project \"%s\"" msgstr "无法为项目“%s”绑定到默认的资源池" -#: src/solaris.c:117 +#: src/solaris.c:105 #, c-format msgid "setproject failed for project \"%s\"" msgstr "对项目“%s”执行 setproject 失败" -#: src/solaris.c:119 +#: src/solaris.c:107 #, c-format msgid "warning, resource control assignment failed for project \"%s\"" msgstr "警告,对项目“%s”的资源控制分配失败" -#: src/sudo.c:209 +#: src/sudo.c:212 #, c-format msgid "Sudo version %s\n" msgstr "Sudo 版本 %s\n" -#: src/sudo.c:211 +#: src/sudo.c:214 #, c-format msgid "Configure options: %s\n" msgstr "当前选项:%s\n" -#: src/sudo.c:216 +#: src/sudo.c:222 msgid "fatal error, unable to load plugins" msgstr "致命错误,无法加载插件" -#: src/sudo.c:224 +#: src/sudo.c:230 msgid "unable to initialize policy plugin" msgstr "无法初始化策略插件" -#: src/sudo.c:280 +#: src/sudo.c:276 +msgid "plugin did not return a command to execute" +msgstr "插件未返回能执行的命令" + +#: src/sudo.c:292 #, c-format msgid "error initializing I/O plugin %s" msgstr "初始化 I/O 插件 %s 出错" -#: src/sudo.c:306 +#: src/sudo.c:318 #, c-format msgid "unexpected sudo mode 0x%x" msgstr "异常的 sudo 模式 0x%x" -#: src/sudo.c:426 +#: src/sudo.c:461 msgid "unable to get group vector" msgstr "无法获取组向量" -#: src/sudo.c:478 +#: src/sudo.c:522 #, c-format msgid "unknown uid %u: who are you?" msgstr "未知的用户 ID %u:您是?" -#: src/sudo.c:785 +#: src/sudo.c:859 #, c-format msgid "%s must be owned by uid %d and have the setuid bit set" msgstr "%s 必须属于用户 ID %d(的用户)并且设置 setuid 位" -#: src/sudo.c:788 +#: src/sudo.c:862 #, 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:794 +#: src/sudo.c:868 #, c-format msgid "effective uid is not %d, is sudo installed setuid root?" msgstr "有效用户 ID 不是 %d,sudo 属于 root 并设置了 setuid 位吗?" -#: src/sudo.c:923 +#: src/sudo.c:999 #, c-format msgid "unknown login class %s" msgstr "未知的登录类别 %s" -#: src/sudo.c:936 +#: src/sudo.c:1012 msgid "unable to set user context" msgstr "无法设置用户环境" -#: src/sudo.c:950 +#: src/sudo.c:1026 msgid "unable to set supplementary group IDs" msgstr "无法设置补充组 ID" -#: src/sudo.c:957 +#: src/sudo.c:1033 #, c-format msgid "unable to set effective gid to runas gid %u" msgstr "无法设置有效组 ID 来以组 ID %u 运行" -#: src/sudo.c:963 +#: src/sudo.c:1039 #, c-format msgid "unable to set gid to runas gid %u" msgstr "无法设置组 ID 来以组 ID %u 运行" -#: src/sudo.c:970 +#: src/sudo.c:1046 msgid "unable to set process priority" msgstr "无法设置进程优先级" -#: src/sudo.c:978 +#: src/sudo.c:1054 #, c-format msgid "unable to change root to %s" msgstr "无法从 root 切换到 %s" -#: src/sudo.c:991 src/sudo.c:997 src/sudo.c:1003 +#: src/sudo.c:1067 src/sudo.c:1073 src/sudo.c:1080 #, c-format msgid "unable to change to runas uid (%u, %u)" msgstr "无法切换到以用户 ID(%u,%u)运行" -#: src/sudo.c:1021 +#: src/sudo.c:1098 #, c-format msgid "unable to change directory to %s" msgstr "无法将目录切换到 %s" -#: src/sudo.c:1082 +#: src/sudo.c:1156 #, c-format msgid "unexpected child termination condition: %d" msgstr "异常的子进程终止条件:%d" -#: src/sudo.c:1214 +#: src/sudo.c:1302 #, c-format msgid "policy plugin %s is missing the `check_policy' method" msgstr "“check_policy”方法中缺少策略插件 %s" -#: src/sudo.c:1232 +#: src/sudo.c:1320 #, c-format msgid "policy plugin %s does not support listing privileges" msgstr "策略插件 %s 不支持列出权限" -#: src/sudo.c:1249 +#: src/sudo.c:1337 #, c-format msgid "policy plugin %s does not support the -v option" msgstr "策略插件 %s不支持 -v 选项" -#: src/sudo.c:1264 +#: src/sudo.c:1352 #, c-format msgid "policy plugin %s does not support the -k/-K options" msgstr "策略插件 %s 不支持 -k/-K 选项" -#: src/sudo_edit.c:203 src/sudo_edit.c:294 +#: src/sudo_edit.c:181 +msgid "unable to restore current working directory" +msgstr "无法恢复当前工作目录" + +#: src/sudo_edit.c:526 src/sudo_edit.c:630 #, c-format msgid "%s: not a regular file" msgstr "%s:不是常规文件" -#: src/sudo_edit.c:230 src/sudo_edit.c:332 +#: src/sudo_edit.c:533 +#, c-format +msgid "%s: editing symbolic links is not permitted" +msgstr "%s:不允许编辑符号链接" + +#: src/sudo_edit.c:536 +#, c-format +msgid "%s: editing files in a writable directory is not permitted" +msgstr "%s:不允许编辑可写目录中的文件" + +#: src/sudo_edit.c:567 src/sudo_edit.c:669 #, c-format msgid "%s: short write" msgstr "%s:截短写入" -#: src/sudo_edit.c:295 +#: src/sudo_edit.c:631 #, c-format msgid "%s left unmodified" msgstr "%s 并未修改" -#: src/sudo_edit.c:308 src/sudo_edit.c:483 +#: src/sudo_edit.c:644 src/sudo_edit.c:830 #, c-format msgid "%s unchanged" msgstr "%s 已更改" -#: src/sudo_edit.c:321 src/sudo_edit.c:343 +#: src/sudo_edit.c:658 src/sudo_edit.c:680 #, c-format msgid "unable to write to %s" msgstr "无法写入 %s" -#: src/sudo_edit.c:322 src/sudo_edit.c:341 src/sudo_edit.c:344 -#: src/sudo_edit.c:508 src/sudo_edit.c:512 +#: src/sudo_edit.c:659 src/sudo_edit.c:678 src/sudo_edit.c:681 +#: src/sudo_edit.c:855 src/sudo_edit.c:859 #, c-format msgid "contents of edit session left in %s" msgstr "编辑会话的内容留在了 %s 中" -#: src/sudo_edit.c:340 +#: src/sudo_edit.c:677 msgid "unable to read temporary file" msgstr "无法读取临时文件" -#: src/sudo_edit.c:417 +#: src/sudo_edit.c:760 msgid "sesh: internal error: odd number of paths" msgstr "sesh:内部错误:路径数量异常" -#: src/sudo_edit.c:419 +#: src/sudo_edit.c:762 msgid "sesh: unable to create temporary files" msgstr "sesh:无法创建临时文件" -#: src/sudo_edit.c:421 src/sudo_edit.c:515 +#: src/sudo_edit.c:764 src/sudo_edit.c:862 #, c-format msgid "sesh: unknown error %d" msgstr "sesh:未知错误 %d" -#: src/sudo_edit.c:507 +#: src/sudo_edit.c:854 msgid "unable to copy temporary files back to their original location" msgstr "无法将临时文件复制回其原位置" -#: src/sudo_edit.c:511 +#: src/sudo_edit.c:858 msgid "unable to copy some of the temporary files back to their original location" msgstr "无法将某些临时文件复制回其原位置" -#: src/sudo_edit.c:554 +#: src/sudo_edit.c:901 #, c-format msgid "unable to change uid to root (%u)" msgstr "无法将用户 ID 切换到 root(%u)" -#: src/sudo_edit.c:571 +#: src/sudo_edit.c:918 msgid "plugin error: missing file list for sudoedit" msgstr "插件错误:缺少 sudoedit 的文件列表" -#: src/tgetpass.c:90 +#: src/sudo_edit.c:959 src/sudo_edit.c:972 +msgid "unable to read the clock" +msgstr "无法读取时钟" + +#: src/tgetpass.c:107 msgid "no tty present and no askpass program specified" msgstr "没有终端存在,且未指定 askpass 程序" -#: src/tgetpass.c:99 +#: src/tgetpass.c:116 msgid "no askpass program specified, try setting SUDO_ASKPASS" msgstr "没有指定 askpass 程序,尝试设置 SUDO_ASKPASS" -#: src/tgetpass.c:232 +#: src/tgetpass.c:276 #, c-format msgid "unable to set gid to %u" msgstr "无法将组 ID 设为 %u" -#: src/tgetpass.c:236 +#: src/tgetpass.c:280 #, c-format msgid "unable to set uid to %u" msgstr "无法将用户 ID 设为 %u" -#: src/tgetpass.c:241 +#: src/tgetpass.c:285 #, c-format msgid "unable to run %s" msgstr "无法执行 %s" -#: src/utmp.c:278 +#: src/utmp.c:266 msgid "unable to save stdin" msgstr "无法保存 stdin" -#: src/utmp.c:280 +#: src/utmp.c:268 msgid "unable to dup2 stdin" msgstr "无法 dup2 stdin" -#: src/utmp.c:283 +#: src/utmp.c:271 msgid "unable to restore stdin" msgstr "无法恢复 stdin" +#~ msgid "internal error, tried allocate zero bytes" +#~ msgstr "内部错误,试图分配 0 个字节" + +#~ msgid "unable to set terminal to raw mode" +#~ msgstr "无法将终端设为原始模式" + +#~ msgid "unable to open socket" +#~ msgstr "无法打开套接字" + #~ msgid "%s: %s: %s\n" #~ msgstr "%s:%s:%s\n" @@ -849,9 +900,6 @@ #~ msgid "when listing, list specified user's privileges\n" #~ msgstr "在列表时,列出指定用户的权限\n" -#~ msgid "unable to allocate memory" -#~ msgstr "无法分配内存" - #~ msgid ": " #~ msgstr ":" diff -Nru sudo-1.8.12/README sudo-1.8.16/README --- sudo-1.8.12/README 2015-02-09 18:40:11.000000000 +0000 +++ sudo-1.8.16/README 2016-03-17 16:13:10.000000000 +0000 @@ -9,7 +9,7 @@ Before you try and build sudo, *please* make sure you have the current version. The latest sudo may always be gotten via anonymous ftp from ftp.sudo.ws in the directory /pub/sudo/ or from the sudo web site, -http://www.sudo.ws/ +https://www.sudo.ws/ The distribution is sudo-M.m.tar.gz where `M' is the major version number and `m' is the minor version number. BETA versions of sudo may @@ -21,7 +21,7 @@ See the NEWS file for a list of major changes in this release. For a complete list of changes, see the ChangeLog file. For a summary of major changes to the current stable release, see the web -page, http://www.sudo.ws/sudo/stable.html. +page, https://www.sudo.ws/stable.html. If you are upgrading from an earlier version of Sudo, please see the UPGRADE file in the doc directory. @@ -43,17 +43,17 @@ ============= sudo-announce This list receives announcements whenever a new version of sudo is released. - http://www.sudo.ws/mailman/listinfo/sudo-announce + https://www.sudo.ws/mailman/listinfo/sudo-announce sudo-users This list is for questions and general discussion about sudo. - http://www.sudo.ws/mailman/listinfo/sudo-users + https://www.sudo.ws/mailman/listinfo/sudo-users sudo-workers This list is for people working on and porting sudo. - http://www.sudo.ws/mailman/listinfo/sudo-workers + https://www.sudo.ws/mailman/listinfo/sudo-workers sudo-commits This list receives a message for each commit made to the sudo source repository. - http://www.sudo.ws/mailman/listinfo/sudo-commits + https://www.sudo.ws/mailman/listinfo/sudo-commits To subscribe to a list, visit its url (as listed above) and enter your email address to subscribe. Digest versions are available but @@ -65,14 +65,14 @@ Web page ======== -There is a sudo web page at http://www.sudo.ws/ that contains an +There is a sudo web page at https://www.sudo.ws/ that contains an overview of sudo, documentation, downloads, a bug tracker, information about beta versions and other useful info. Bug reports =========== If you have found what you believe to be a bug, you can file a bug -report in the sudo bug database, on the web at http://www.sudo.ws/bugs/. +report in the sudo bug database, on the web at https://bugzilla.sudo.ws/. Please read over the `TROUBLESHOOTING' file in the doc directory *before* submitting a bug report. When reporting bugs, please be sure to include diff -Nru sudo-1.8.12/src/conversation.c sudo-1.8.16/src/conversation.c --- sudo-1.8.12/src/conversation.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/src/conversation.c 2015-10-31 23:35:24.000000000 +0000 @@ -22,26 +22,14 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include "sudo.h" @@ -55,32 +43,38 @@ */ int sudo_conversation(int num_msgs, const struct sudo_conv_message msgs[], - struct sudo_conv_reply replies[]) + struct sudo_conv_reply replies[], struct sudo_conv_callback *callback) { - struct sudo_conv_reply *repl; - const struct sudo_conv_message *msg; char *pass; - int n, flags = tgetpass_flags; + int n; + const int conv_debug_instance = sudo_debug_get_active_instance(); + + sudo_debug_set_active_instance(sudo_debug_instance); for (n = 0; n < num_msgs; n++) { - msg = &msgs[n]; - repl = &replies[n]; + const struct sudo_conv_message *msg = &msgs[n]; + struct sudo_conv_reply *repl = &replies[n]; + int flags = tgetpass_flags; + switch (msg->msg_type & 0xff) { case SUDO_CONV_PROMPT_ECHO_ON: + SET(flags, TGP_ECHO); + goto read_pass; case SUDO_CONV_PROMPT_MASK: - if (msg->msg_type == SUDO_CONV_PROMPT_ECHO_ON) - SET(flags, TGP_ECHO); - else - SET(flags, TGP_MASK); + SET(flags, TGP_MASK); /* FALLTHROUGH */ case SUDO_CONV_PROMPT_ECHO_OFF: if (ISSET(msg->msg_type, SUDO_CONV_PROMPT_ECHO_OK)) SET(flags, TGP_NOECHO_TRY); + read_pass: /* Read the password unless interrupted. */ - pass = tgetpass(msg->msg, msg->timeout, flags); + pass = tgetpass(msg->msg, msg->timeout, flags, callback); if (pass == NULL) goto err; - repl->reply = sudo_estrdup(pass); + if ((repl->reply = strdup(pass)) == NULL) { + sudo_fatalx_nodebug(U_("%s: %s"), "sudo_conversation", + U_("unable to allocate memory")); + } memset_s(pass, SUDO_CONV_REPL_MAX, 0, strlen(pass)); break; case SUDO_CONV_INFO_MSG: @@ -96,12 +90,13 @@ } } + sudo_debug_set_active_instance(conv_debug_instance); return 0; err: /* Zero and free allocated memory and return an error. */ do { - repl = &replies[n]; + struct sudo_conv_reply *repl = &replies[n]; if (repl->reply != NULL) { memset_s(repl->reply, SUDO_CONV_REPL_MAX, 0, strlen(repl->reply)); free(repl->reply); @@ -109,14 +104,25 @@ } } while (n--); + sudo_debug_set_active_instance(conv_debug_instance); return -1; } int +sudo_conversation_1_7(int num_msgs, const struct sudo_conv_message msgs[], + struct sudo_conv_reply replies[]) +{ + return sudo_conversation(num_msgs, msgs, replies, NULL); +} + +int sudo_conversation_printf(int msg_type, const char *fmt, ...) { va_list ap; int len; + const int conv_debug_instance = sudo_debug_get_active_instance(); + + sudo_debug_set_active_instance(sudo_debug_instance); switch (msg_type) { case SUDO_CONV_INFO_MSG: @@ -135,5 +141,6 @@ break; } + sudo_debug_set_active_instance(conv_debug_instance); return len; } diff -Nru sudo-1.8.12/src/env_hooks.c sudo-1.8.16/src/env_hooks.c --- sudo-1.8.12/src/env_hooks.c 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/src/env_hooks.c 2015-10-31 23:35:00.000000000 +0000 @@ -19,23 +19,13 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#if defined(HAVE_MALLOC_H) && !defined(STDC_HEADERS) -# include -#endif /* HAVE_MALLOC_H && !STDC_HEADERS */ #include #include "sudo.h" @@ -45,8 +35,13 @@ extern char **environ; /* global environment pointer */ static char **priv_environ; /* private environment pointer */ -static char * -rpl_getenv(const char *name) +/* + * NOTE: we don't use dlsym() to find the libc getenv() + * since this may allocate memory on some systems (glibc) + * which leads to a hang if malloc() calls getenv (jemalloc). + */ +char * +getenv_unhooked(const char *name) { char **ep, *val = NULL; size_t namelen = 0; @@ -63,19 +58,6 @@ return val; } -typedef char * (*sudo_fn_getenv_t)(const char *); - -char * -getenv_unhooked(const char *name) -{ - sudo_fn_getenv_t fn; - - fn = (sudo_fn_getenv_t)sudo_dso_findsym(SUDO_DSO_NEXT, "getenv"); - if (fn != NULL) - return fn(name); - return rpl_getenv(name); -} - __dso_public char * getenv(const char *name) { @@ -123,7 +105,9 @@ /* Append at the end if not already found. */ if (!found) { size_t env_len = (size_t)(ep - environ); - char **envp = sudo_ereallocarray(priv_environ, env_len + 2, sizeof(char *)); + char **envp = reallocarray(priv_environ, env_len + 2, sizeof(char *)); + if (envp == NULL) + return -1; if (environ != priv_environ) memcpy(envp, environ, env_len * sizeof(char *)); envp[env_len++] = (char *)string; @@ -198,7 +182,11 @@ free(envstr); return 0; } - return rpl_putenv(envstr); + if (rpl_putenv(envstr) == -1) { + free(envstr); + return -1; + } + return 0; } typedef int (*sudo_fn_setenv_t)(const char *, const char *, int); diff -Nru sudo-1.8.12/src/exec.c sudo-1.8.16/src/exec.c --- sudo-1.8.12/src/exec.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/src/exec.c 2016-03-17 16:13:10.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009-2015 Todd C. Miller + * Copyright (c) 2009-2016 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -23,23 +23,14 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #ifdef TIME_WITH_SYS_TIME # include #endif @@ -185,19 +176,19 @@ } #ifdef HAVE_SELINUX if (ISSET(details->flags, CD_RBAC_ENABLED)) { - selinux_execve(details->command, details->argv, details->envp, - ISSET(details->flags, CD_NOEXEC)); + selinux_execve(details->execfd, details->command, details->argv, + details->envp, ISSET(details->flags, CD_NOEXEC)); } else #endif { - sudo_execve(details->command, details->argv, details->envp, - ISSET(details->flags, CD_NOEXEC)); + sudo_execve(details->execfd, details->command, details->argv, + details->envp, ISSET(details->flags, CD_NOEXEC)); } - cstat->type = CMD_ERRNO; - cstat->val = errno; - sudo_debug_printf(SUDO_DEBUG_ERROR, "unable to exec %s: %s", - details->command, strerror(errno)); } + cstat->type = CMD_ERRNO; + cstat->val = errno; + sudo_debug_printf(SUDO_DEBUG_ERROR, "unable to exec %s: %s", + details->command, strerror(errno)); debug_return; } @@ -416,6 +407,8 @@ #endif if (sudo_sigaction(SIGTERM, &sa, NULL) != 0) sudo_warn(U_("unable to set handler for signal %d"), SIGTERM); + if (sudo_sigaction(SIGHUP, &sa, NULL) != 0) + sudo_warn(U_("unable to set handler for signal %d"), SIGHUP); if (sudo_sigaction(SIGALRM, &sa, NULL) != 0) sudo_warn(U_("unable to set handler for signal %d"), SIGALRM); if (sudo_sigaction(SIGPIPE, &sa, NULL) != 0) @@ -433,8 +426,7 @@ * When not running the command in a pty, we do not want to * forward signals generated by the kernel that the child will * already have received either by virtue of being in the - * controlling tty's process group (SIGINT, SIGQUIT) or because - * the session is terminating (SIGHUP). + * controlling tty's process group (SIGINT, SIGQUIT). */ #ifdef SA_SIGINFO if (!log_io) { @@ -442,8 +434,6 @@ sa.sa_sigaction = handler_user_only; } #endif - if (sudo_sigaction(SIGHUP, &sa, NULL) != 0) - sudo_warn(U_("unable to set handler for signal %d"), SIGHUP); if (sudo_sigaction(SIGINT, &sa, NULL) != 0) sudo_warn(U_("unable to set handler for signal %d"), SIGINT); if (sudo_sigaction(SIGQUIT, &sa, NULL) != 0) @@ -527,7 +517,7 @@ sudo_ev_free(signal_event); sudo_ev_free(backchannel_event); TAILQ_FOREACH_SAFE(sigfwd, &sigfwd_list, entries, sigfwd_next) { - sudo_efree(sigfwd); + free(sigfwd); } TAILQ_INIT(&sigfwd_list); done: @@ -833,7 +823,7 @@ nsent = send(sock, &cstat, sizeof(cstat), 0); } while (nsent == -1 && errno == EINTR); TAILQ_REMOVE(&sigfwd_list, sigfwd, entries); - sudo_efree(sigfwd); + free(sigfwd); if (nsent != sizeof(cstat)) { if (errno == EPIPE) { struct sigforward *sigfwd_next; @@ -841,7 +831,7 @@ "broken pipe writing to child over backchannel"); /* Other end of socket gone, empty out sigfwd_list. */ TAILQ_FOREACH_SAFE(sigfwd, &sigfwd_list, entries, sigfwd_next) { - sudo_efree(sigfwd); + free(sigfwd); } TAILQ_INIT(&sigfwd_list); /* XXX - child (monitor) is dead, we should exit too? */ @@ -869,7 +859,8 @@ snprintf(signame, sizeof(signame), "%d", signo); sudo_debug_printf(SUDO_DEBUG_DIAG, "scheduled SIG%s for child", signame); - sigfwd = sudo_ecalloc(1, sizeof(*sigfwd)); + if ((sigfwd = calloc(1, sizeof(*sigfwd))) == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); sigfwd->signo = signo; TAILQ_INSERT_TAIL(&sigfwd_list, sigfwd, entries); @@ -895,7 +886,7 @@ * kill itself. For example, this can happen with some versions of * reboot that call kill(-1, SIGTERM) to kill all other processes. */ - if (s != SIGCHLD && USER_SIGNALED(info)) { + if (s != SIGCHLD && USER_SIGNALED(info) && info->si_pid != 0) { pid_t si_pgrp = getpgid(info->si_pid); if (si_pgrp != (pid_t)-1) { if (si_pgrp == ppgrp || si_pgrp == cmnd_pid) @@ -942,7 +933,6 @@ handler_user_only(int s, siginfo_t *info, void *context) { unsigned char signo = (unsigned char)s; - pid_t si_pgrp; /* * Only forward user-generated signals not sent by a process in @@ -953,11 +943,14 @@ */ if (!USER_SIGNALED(info)) return; - if ((si_pgrp = getpgid(info->si_pid)) != (pid_t)-1) { - if (si_pgrp == ppgrp || si_pgrp == cmnd_pid) - return; - } else if (info->si_pid == cmnd_pid) { + if (info->si_pid != 0) { + pid_t si_pgrp = getpgid(info->si_pid); + if (si_pgrp != (pid_t)-1) { + if (si_pgrp == ppgrp || si_pgrp == cmnd_pid) + return; + } else if (info->si_pid == cmnd_pid) { return; + } } /* diff -Nru sudo-1.8.12/src/exec_common.c sudo-1.8.16/src/exec_common.c --- sudo-1.8.12/src/exec_common.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/src/exec_common.c 2016-03-17 16:13:10.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009-2015 Todd C. Miller + * Copyright (c) 2009-2016 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 @@ -18,23 +18,14 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #ifdef HAVE_PRIV_SET # include #endif @@ -45,92 +36,142 @@ #include "sudo.h" #include "sudo_exec.h" +#ifdef _PATH_SUDO_NOEXEC /* - * Disable execution of child processes in the command we are about - * to run. On systems with privilege sets, we can remove the exec - * privilege. On other systems we use LD_PRELOAD and the like. + * Add a DSO file to LD_PRELOAD or the system equivalent. */ -static char * const * -disable_execute(char *const envp[]) +static char ** +preload_dso(char *envp[], const char *dso_file) { -#ifdef _PATH_SUDO_NOEXEC - char *preload, **nenvp = NULL; - int env_len, env_size; + char *preload = NULL; + int env_len; int preload_idx = -1; + bool present = false; # ifdef RTLD_PRELOAD_ENABLE_VAR bool enabled = false; +# else + const bool enabled = true; # endif -#endif /* _PATH_SUDO_NOEXEC */ - debug_decl(disable_execute, SUDO_DEBUG_UTIL) - -#ifdef HAVE_PRIV_SET - /* Solaris privileges, remove PRIV_PROC_EXEC post-execve. */ - (void)priv_set(PRIV_ON, PRIV_INHERITABLE, "PRIV_FILE_DAC_READ", NULL); - (void)priv_set(PRIV_ON, PRIV_INHERITABLE, "PRIV_FILE_DAC_WRITE", NULL); - (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_const_ptr(envp); - sudo_warn(U_("unable to remove PRIV_PROC_EXEC from PRIV_LIMIT")); -#endif /* HAVE_PRIV_SET */ + debug_decl(preload_dso, SUDO_DEBUG_UTIL) -#ifdef _PATH_SUDO_NOEXEC /* - * Preload a noexec file. For a list of LD_PRELOAD-alikes, see + * Preload a DSO file. For a list of LD_PRELOAD-alikes, see * http://www.fortran-2000.com/ArnaudRecipes/sharedlib.html * XXX - need to support 32-bit and 64-bit variants */ /* Count entries in envp, looking for LD_PRELOAD as we go. */ for (env_len = 0; envp[env_len] != NULL; env_len++) { - if (strncmp(envp[env_len], RTLD_PRELOAD_VAR "=", sizeof(RTLD_PRELOAD_VAR)) == 0) { + if (preload_idx == -1 && strncmp(envp[env_len], RTLD_PRELOAD_VAR "=", + sizeof(RTLD_PRELOAD_VAR)) == 0) { + const char *cp = envp[env_len] + sizeof(RTLD_PRELOAD_VAR); + const char *end = cp + strlen(cp); + const char *ep; + const size_t dso_len = strlen(dso_file); + + /* Check to see if dso_file is already present. */ + for (cp = sudo_strsplit(cp, end, RTLD_PRELOAD_DELIM, &ep); + cp != NULL; cp = sudo_strsplit(NULL, end, RTLD_PRELOAD_DELIM, + &ep)) { + if ((size_t)(ep - cp) == dso_len) { + if (memcmp(cp, dso_file, dso_len) == 0) { + /* already present */ + present = true; + break; + } + } + } + + /* Save index of existing LD_PRELOAD variable. */ preload_idx = env_len; continue; } -#ifdef RTLD_PRELOAD_ENABLE_VAR +# ifdef RTLD_PRELOAD_ENABLE_VAR if (strncmp(envp[env_len], RTLD_PRELOAD_ENABLE_VAR "=", sizeof(RTLD_PRELOAD_ENABLE_VAR)) == 0) { enabled = true; continue; } -#endif +# endif } - /* Make a new copy of envp as needed. */ - env_size = env_len + 1 + (preload_idx == -1); -#ifdef RTLD_PRELOAD_ENABLE_VAR - if (!enabled) - env_size++; -#endif - nenvp = sudo_emallocarray(env_size, sizeof(*envp)); - memcpy(nenvp, envp, env_len * sizeof(*envp)); - nenvp[env_len] = NULL; + /* + * Make a new copy of envp as needed. + * It would be nice to realloc the old envp[] but we don't know + * whether it was dynamically allocated. [TODO: plugin API] + */ + if (preload_idx == -1 || !enabled) { + const int env_size = env_len + 1 + (preload_idx == -1) + enabled; + + char **nenvp = reallocarray(NULL, env_size, sizeof(*envp)); + if (nenvp == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + memcpy(nenvp, envp, env_len * sizeof(*envp)); + nenvp[env_len] = NULL; + envp = nenvp; + } /* Prepend our LD_PRELOAD to existing value or add new entry at the end. */ - if (preload_idx == -1) { + if (!present) { + if (preload_idx == -1) { # ifdef RTLD_PRELOAD_DEFAULT - sudo_easprintf(&preload, "%s=%s%s%s", RTLD_PRELOAD_VAR, sudo_conf_noexec_path(), RTLD_PRELOAD_DELIM, RTLD_PRELOAD_DEFAULT); + asprintf(&preload, "%s=%s%s%s", RTLD_PRELOAD_VAR, dso_file, + RTLD_PRELOAD_DELIM, RTLD_PRELOAD_DEFAULT); # else - preload = sudo_new_key_val(RTLD_PRELOAD_VAR, sudo_conf_noexec_path()); + preload = sudo_new_key_val(RTLD_PRELOAD_VAR, dso_file); # endif - if (preload == NULL) - sudo_fatal(NULL); - nenvp[env_len++] = preload; - nenvp[env_len] = NULL; - } else { - sudo_easprintf(&preload, "%s=%s%s%s", RTLD_PRELOAD_VAR, sudo_conf_noexec_path(), RTLD_PRELOAD_DELIM, nenvp[preload_idx]); - nenvp[preload_idx] = preload; + if (preload == NULL) { + sudo_fatalx(U_("%s: %s"), __func__, + U_("unable to allocate memory")); + } + envp[env_len++] = preload; + envp[env_len] = NULL; + } else { + int len = asprintf(&preload, "%s=%s%s%s", RTLD_PRELOAD_VAR, + dso_file, RTLD_PRELOAD_DELIM, envp[preload_idx]); + if (len == -1) { + sudo_fatalx(U_("%s: %s"), __func__, + U_("unable to allocate memory")); + } + envp[preload_idx] = preload; + } } # ifdef RTLD_PRELOAD_ENABLE_VAR if (!enabled) { - nenvp[env_len++] = RTLD_PRELOAD_ENABLE_VAR "="; - nenvp[env_len] = NULL; + envp[env_len++] = RTLD_PRELOAD_ENABLE_VAR "="; + envp[env_len] = NULL; } # endif - /* Install new env pointer. */ - envp = nenvp; + debug_return_ptr(envp); +} #endif /* _PATH_SUDO_NOEXEC */ - debug_return_const_ptr(envp); +/* + * Disable execution of child processes in the command we are about + * to run. On systems with privilege sets, we can remove the exec + * privilege. On other systems we use LD_PRELOAD and the like. + */ +static char ** +disable_execute(char *envp[]) +{ + debug_decl(disable_execute, SUDO_DEBUG_UTIL) + +#ifdef HAVE_PRIV_SET + /* Solaris privileges, remove PRIV_PROC_EXEC post-execve. */ + (void)priv_set(PRIV_ON, PRIV_INHERITABLE, "PRIV_FILE_DAC_READ", NULL); + (void)priv_set(PRIV_ON, PRIV_INHERITABLE, "PRIV_FILE_DAC_WRITE", NULL); + (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")); +#endif /* HAVE_PRIV_SET */ + +#ifdef _PATH_SUDO_NOEXEC + if (sudo_conf_noexec_path() != NULL) + envp = preload_dso(envp, sudo_conf_noexec_path()); +#endif /* _PATH_SUDO_NOEXEC */ + + debug_return_ptr(envp); } /* @@ -138,25 +179,32 @@ * ala execvp(3) if we get ENOEXEC. */ int -sudo_execve(const char *path, char *const argv[], char *const envp[], bool noexec) +sudo_execve(int fd, const char *path, char *const argv[], char *envp[], bool noexec) { /* Modify the environment as needed to disable further execve(). */ if (noexec) envp = disable_execute(envp); - execve(path, argv, envp); - if (errno == ENOEXEC) { +#ifdef HAVE_FEXECVE + if (fd != -1) + fexecve(fd, argv, envp); + else +#endif + execve(path, argv, envp); + if (fd == -1 && errno == ENOEXEC) { int argc; char **nargv; for (argc = 0; argv[argc] != NULL; argc++) continue; - nargv = sudo_emallocarray(argc + 2, sizeof(char *)); - nargv[0] = "sh"; - nargv[1] = (char *)path; - memcpy(nargv + 2, argv + 1, argc * sizeof(char *)); - execve(_PATH_SUDO_BSHELL, nargv, envp); - sudo_efree(nargv); + nargv = reallocarray(NULL, argc + 2, sizeof(char *)); + if (nargv != NULL) { + nargv[0] = "sh"; + nargv[1] = (char *)path; + memcpy(nargv + 2, argv + 1, argc * sizeof(char *)); + execve(_PATH_SUDO_BSHELL, nargv, envp); + free(nargv); + } } return -1; } diff -Nru sudo-1.8.12/src/exec_pty.c sudo-1.8.16/src/exec_pty.c --- sudo-1.8.12/src/exec_pty.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/src/exec_pty.c 2016-03-17 16:13:11.000000000 +0000 @@ -22,26 +22,14 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #ifdef TIME_WITH_SYS_TIME # include #endif @@ -147,7 +135,7 @@ * itself. This can happen with, e.g., BSD-derived versions of * reboot that call kill(-1, SIGTERM) to kill all other processes. */ - if (s != SIGCHLD && USER_SIGNALED(info)) { + if (s != SIGCHLD && USER_SIGNALED(info) && info->si_pid != 0) { pid_t si_pgrp = getpgid(info->si_pid); if (si_pgrp != (pid_t)-1) { if (si_pgrp == cmnd_pgrp) @@ -435,7 +423,7 @@ { char signame[SIG2STR_MAX]; sigaction_t sa, osa; - int n, rval = 0; + int rval = 0; debug_decl(suspend_parent, SUDO_DEBUG_EXEC); switch (signo) { @@ -449,10 +437,8 @@ check_foreground(); if (foreground) { if (ttymode != TERM_RAW) { - do { - n = sudo_term_raw(io_fds[SFD_USERTTY], 0); - } while (!n && errno == EINTR); - ttymode = TERM_RAW; + if (sudo_term_raw(io_fds[SFD_USERTTY], 0)) + ttymode = TERM_RAW; } rval = SIGCONT_FG; /* resume command in foreground */ break; @@ -500,10 +486,8 @@ if (foreground) { /* Foreground process, set tty to raw mode. */ - do { - n = sudo_term_raw(io_fds[SFD_USERTTY], 0); - } while (!n && errno == EINTR); - ttymode = TERM_RAW; + if (sudo_term_raw(io_fds[SFD_USERTTY], 0)) + ttymode = TERM_RAW; } else { /* Background process, no access to tty. */ ttymode = TERM_COOKED; @@ -563,54 +547,6 @@ int n; debug_decl(io_callback, SUDO_DEBUG_EXEC); - if (ISSET(what, SUDO_EV_READ)) { - evbase = sudo_ev_get_base(iob->revent); - do { - n = read(fd, iob->buf + iob->len, sizeof(iob->buf) - iob->len); - } while (n == -1 && errno == EINTR); - switch (n) { - case -1: - if (errno == EAGAIN) - break; - /* treat read error as fatal and close the fd */ - sudo_debug_printf(SUDO_DEBUG_ERROR, - "error reading fd %d: %s", fd, strerror(errno)); - /* FALLTHROUGH */ - case 0: - /* got EOF or pty has gone away */ - if (n == 0) { - sudo_debug_printf(SUDO_DEBUG_INFO, - "read EOF from fd %d", fd); - } - safe_close(fd); - ev_free_by_fd(evbase, fd); - /* If writer already consumed the buffer, close it too. */ - if (iob->wevent != NULL && iob->off == iob->len) { - safe_close(sudo_ev_get_fd(iob->wevent)); - ev_free_by_fd(evbase, sudo_ev_get_fd(iob->wevent)); - iob->off = iob->len = 0; - } - break; - default: - sudo_debug_printf(SUDO_DEBUG_INFO, - "read %d bytes from fd %d", n, fd); - if (!iob->action(iob->buf + iob->len, n, iob)) - terminate_command(cmnd_pid, true); - iob->len += n; - /* Enable writer if not /dev/tty or we are foreground pgrp. */ - if (iob->wevent != NULL && - (foreground || !USERTTY_EVENT(iob->wevent))) { - if (sudo_ev_add(evbase, iob->wevent, NULL, false) == -1) - sudo_fatal(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")); - } - break; - } - } if (ISSET(what, SUDO_EV_WRITE)) { evbase = sudo_ev_get_base(iob->wevent); do { @@ -627,6 +563,7 @@ "unable to write %d bytes to fd %d", iob->len - iob->off, fd); if (iob->revent != NULL) { + CLR(what, SUDO_EV_READ); safe_close(sudo_ev_get_fd(iob->revent)); ev_free_by_fd(evbase, sudo_ev_get_fd(iob->revent)); } @@ -676,6 +613,54 @@ } } } + if (ISSET(what, SUDO_EV_READ)) { + evbase = sudo_ev_get_base(iob->revent); + do { + n = read(fd, iob->buf + iob->len, sizeof(iob->buf) - iob->len); + } while (n == -1 && errno == EINTR); + switch (n) { + case -1: + if (errno == EAGAIN) + break; + /* treat read error as fatal and close the fd */ + sudo_debug_printf(SUDO_DEBUG_ERROR, + "error reading fd %d: %s", fd, strerror(errno)); + /* FALLTHROUGH */ + case 0: + /* got EOF or pty has gone away */ + if (n == 0) { + sudo_debug_printf(SUDO_DEBUG_INFO, + "read EOF from fd %d", fd); + } + safe_close(fd); + ev_free_by_fd(evbase, fd); + /* If writer already consumed the buffer, close it too. */ + if (iob->wevent != NULL && iob->off == iob->len) { + safe_close(sudo_ev_get_fd(iob->wevent)); + ev_free_by_fd(evbase, sudo_ev_get_fd(iob->wevent)); + iob->off = iob->len = 0; + } + break; + default: + sudo_debug_printf(SUDO_DEBUG_INFO, + "read %d bytes from fd %d", n, fd); + if (!iob->action(iob->buf + iob->len, n, iob)) + terminate_command(cmnd_pid, true); + iob->len += n; + /* Enable writer if not /dev/tty or we are foreground pgrp. */ + if (iob->wevent != NULL && + (foreground || !USERTTY_EVENT(iob->wevent))) { + if (sudo_ev_add(evbase, iob->wevent, NULL, false) == -1) + sudo_fatal(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")); + } + break; + } + } } static void @@ -695,7 +680,8 @@ (void) fcntl(wfd, F_SETFL, n | O_NONBLOCK); /* Allocate and add to head of list. */ - iob = sudo_emalloc(sizeof(*iob)); + if ((iob = malloc(sizeof(*iob))) == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); iob->revent = sudo_ev_alloc(rfd, SUDO_EV_READ, io_callback, iob); iob->wevent = sudo_ev_alloc(wfd, SUDO_EV_WRITE, io_callback, iob); iob->len = 0; @@ -703,7 +689,7 @@ iob->action = action; iob->buf[0] = '\0'; if (iob->revent == NULL || iob->wevent == NULL) - sudo_fatal(NULL); + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); SLIST_INSERT_HEAD(head, iob, entries); debug_return; @@ -718,7 +704,7 @@ fork_pty(struct command_details *details, int sv[], sigset_t *omask) { struct command_status cstat; - int io_pipe[3][2], n; + int io_pipe[3][2]; sigaction_t sa; sigset_t mask; pid_t child; @@ -830,12 +816,8 @@ /* Start out in raw mode unless part of a pipeline or backgrounded. */ if (!pipeline && !ISSET(details->flags, CD_EXEC_BG)) { - ttymode = TERM_RAW; - do { - n = sudo_term_raw(io_fds[SFD_USERTTY], 0); - } while (!n && errno == EINTR); - if (!n) - sudo_fatal(U_("unable to set terminal to raw mode")); + if (sudo_term_raw(io_fds[SFD_USERTTY], 0)) + ttymode = TERM_RAW; } } @@ -907,7 +889,11 @@ /* Free I/O buffers. */ while ((iob = SLIST_FIRST(&iobufs)) != NULL) { SLIST_REMOVE_HEAD(&iobufs, entries); - sudo_efree(iob); + if (iob->revent != NULL) + sudo_ev_free(iob->revent); + if (iob->wevent != NULL) + sudo_ev_free(iob->wevent); + free(iob); } /* Restore terminal settings. */ diff -Nru sudo-1.8.12/src/get_pty.c sudo-1.8.16/src/get_pty.c --- sudo-1.8.12/src/get_pty.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/src/get_pty.c 2015-10-31 23:35:00.000000000 +0000 @@ -24,23 +24,14 @@ #include #endif /* HAVE_SYS_STROPTS_H */ #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include #include @@ -58,12 +49,12 @@ #include "sudo.h" #if defined(HAVE_OPENPTY) -int +bool get_pty(int *master, int *slave, char *name, size_t namesz, uid_t ttyuid) { struct group *gr; gid_t ttygid = -1; - int rval = 0; + bool rval = false; debug_decl(get_pty, SUDO_DEBUG_PTY) if ((gr = getgrnam("tty")) != NULL) @@ -71,18 +62,18 @@ if (openpty(master, slave, name, NULL, NULL) == 0) { if (chown(name, ttyuid, ttygid) == 0) - rval = 1; + rval = true; } debug_return_bool(rval); } #elif defined(HAVE__GETPTY) -int +bool get_pty(int *master, int *slave, char *name, size_t namesz, uid_t ttyuid) { char *line; - int rval = 0; + bool rval = false; debug_decl(get_pty, SUDO_DEBUG_PTY) /* IRIX-style dynamic ptys (may fork) */ @@ -92,7 +83,7 @@ if (*slave != -1) { (void) chown(line, ttyuid, -1); strlcpy(name, line, namesz); - rval = 1; + rval = true; } else { close(*master); *master = -1; @@ -116,11 +107,11 @@ } # endif /* HAVE_POSIX_OPENPT */ -int +bool get_pty(int *master, int *slave, char *name, size_t namesz, uid_t ttyuid) { char *line; - int rval = 0; + bool rval = false; debug_decl(get_pty, SUDO_DEBUG_PTY) *master = posix_openpt(O_RDWR|O_NOCTTY); @@ -146,7 +137,7 @@ # endif (void) chown(line, ttyuid, -1); strlcpy(name, line, namesz); - rval = 1; + rval = true; } done: debug_return_bool(rval); @@ -156,13 +147,13 @@ static char line[] = "/dev/ptyXX"; -int +bool get_pty(int *master, int *slave, char *name, size_t namesz, uid_t ttyuid) { char *bank, *cp; struct group *gr; gid_t ttygid = -1; - int rval = 0; + bool rval = false; debug_decl(get_pty, SUDO_DEBUG_PTY) if ((gr = getgrnam("tty")) != NULL) @@ -187,7 +178,7 @@ *slave = open(line, O_RDWR|O_NOCTTY, 0); if (*slave != -1) { strlcpy(name, line, namesz); - rval = 1; /* success */ + rval = true; /* success */ goto done; } (void) close(*master); diff -Nru sudo-1.8.12/src/hooks.c sudo-1.8.16/src/hooks.c --- sudo-1.8.12/src/hooks.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/src/hooks.c 2015-10-31 23:35:24.000000000 +0000 @@ -18,23 +18,15 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include +#include #include "sudo.h" #include "sudo_plugin.h" @@ -132,51 +124,57 @@ } /* Hook registration internals. */ -static void +static int register_hook_internal(struct sudo_hook_list *head, int (*hook_fn)(), void *closure) { struct sudo_hook_entry *hook; debug_decl(register_hook_internal, SUDO_DEBUG_HOOKS) - hook = sudo_ecalloc(1, sizeof(*hook)); + if ((hook = calloc(1, sizeof(*hook))) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + debug_return_int(-1); + } hook->u.generic_fn = hook_fn; hook->closure = closure; SLIST_INSERT_HEAD(head, hook, entries); - debug_return; + debug_return_int(0); } /* Register the specified hook. */ int register_hook(struct sudo_hook *hook) { - int rval = 0; + int rval; debug_decl(register_hook, SUDO_DEBUG_HOOKS) - if (SUDO_HOOK_VERSION_GET_MAJOR(hook->hook_version) != SUDO_HOOK_VERSION_MAJOR) { + if (SUDO_API_VERSION_GET_MAJOR(hook->hook_version) != SUDO_HOOK_VERSION_MAJOR) { /* Major versions must match. */ + errno = EINVAL; rval = -1; } else { switch (hook->hook_type) { case SUDO_HOOK_GETENV: - register_hook_internal(&sudo_hook_getenv_list, hook->hook_fn, - hook->closure); + rval = register_hook_internal(&sudo_hook_getenv_list, + hook->hook_fn, hook->closure); break; case SUDO_HOOK_PUTENV: - register_hook_internal(&sudo_hook_putenv_list, hook->hook_fn, - hook->closure); + rval = register_hook_internal(&sudo_hook_putenv_list, + hook->hook_fn, hook->closure); break; case SUDO_HOOK_SETENV: - register_hook_internal(&sudo_hook_setenv_list, hook->hook_fn, - hook->closure); + rval = register_hook_internal(&sudo_hook_setenv_list, + hook->hook_fn, hook->closure); break; case SUDO_HOOK_UNSETENV: - register_hook_internal(&sudo_hook_unsetenv_list, hook->hook_fn, - hook->closure); + rval = register_hook_internal(&sudo_hook_unsetenv_list, + hook->hook_fn, hook->closure); break; default: /* XXX - use define for unknown value */ + errno = ENOTSUP; rval = 1; break; } @@ -200,7 +198,7 @@ SLIST_REMOVE_HEAD(head, entries); else SLIST_REMOVE_AFTER(prev, entries); - sudo_efree(hook); + free(hook); break; } prev = hook; @@ -216,7 +214,7 @@ int rval = 0; debug_decl(deregister_hook, SUDO_DEBUG_HOOKS) - if (SUDO_HOOK_VERSION_GET_MAJOR(hook->hook_version) != SUDO_HOOK_VERSION_MAJOR) { + if (SUDO_API_VERSION_GET_MAJOR(hook->hook_version) != SUDO_HOOK_VERSION_MAJOR) { /* Major versions must match. */ rval = -1; } else { diff -Nru sudo-1.8.12/src/load_plugins.c sudo-1.8.16/src/load_plugins.c --- sudo-1.8.12/src/load_plugins.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/src/load_plugins.c 2016-03-17 16:13:11.000000000 +0000 @@ -19,23 +19,14 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include "sudo.h" @@ -83,12 +74,17 @@ } #endif /* STATIC_SUDOERS_PLUGIN */ - len = snprintf(fullpath, pathsize, "%s%s", _PATH_SUDO_PLUGIN_DIR, + if (sudo_conf_plugin_dir_path() == NULL) { + errno = ENOENT; + goto done; + } + + len = snprintf(fullpath, pathsize, "%s%s", sudo_conf_plugin_dir_path(), info->path); if (len <= 0 || (size_t)len >= pathsize) { sudo_warnx(U_("error in %s, line %d while loading plugin `%s'"), _PATH_SUDO_CONF, info->lineno, info->symbol_name); - sudo_warnx(U_("%s%s: %s"), _PATH_SUDO_PLUGIN_DIR, info->path, + sudo_warnx(U_("%s%s: %s"), sudo_conf_plugin_dir_path(), info->path, strerror(ENAMETOOLONG)); goto done; } @@ -103,29 +99,6 @@ errno = serrno; } } -# ifdef __hpux - /* Try .sl instead of .so on HP-UX for backwards compatibility. */ - if (status != 0) { - size_t len = strlen(info->path); - if (len >= 3 && info->path[len - 3] == '.' && - info->path[len - 2] == 's' && info->path[len - 1] == 'o') { - const char *sopath = info->path; - char *slpath = sudo_estrdup(info->path); - int serrno = errno; - - slpath[len - 1] = 'l'; - info->path = slpath; - status = sudo_stat_plugin(info, fullpath, pathsize, sb); - if (status == 0) { - sudo_efree((void *)sopath); - } else { - sudo_efree(slpath); - info->path = sopath; - errno = serrno; - } - } - } -# endif /* __hpux */ } done: debug_return_int(status); @@ -135,13 +108,15 @@ sudo_check_plugin(struct plugin_info *info, char *fullpath, size_t pathsize) { struct stat sb; - int rval = false; + bool rval = false; debug_decl(sudo_check_plugin, SUDO_DEBUG_PLUGIN) if (sudo_stat_plugin(info, fullpath, pathsize, &sb) != 0) { sudo_warnx(U_("error in %s, line %d while loading plugin `%s'"), _PATH_SUDO_CONF, info->lineno, info->symbol_name); - sudo_warn("%s%s", _PATH_SUDO_PLUGIN_DIR, info->path); + sudo_warn("%s%s", + sudo_conf_plugin_dir_path() ? sudo_conf_plugin_dir_path() : "", + info->path); goto done; } if (sb.st_uid != ROOT_UID) { @@ -178,38 +153,39 @@ sudo_load_plugin(struct plugin_container *policy_plugin, struct plugin_container_list *io_plugins, struct plugin_info *info) { - struct plugin_container *container; + struct plugin_container *container = NULL; struct generic_plugin *plugin; char path[PATH_MAX]; - bool rval = false; - void *handle; + void *handle = NULL; debug_decl(sudo_load_plugin, SUDO_DEBUG_PLUGIN) /* Sanity check plugin and fill in path */ if (!sudo_check_plugin(info, path, sizeof(path))) - goto done; + goto bad; /* Open plugin and map in symbol */ handle = sudo_dso_load(path, SUDO_DSO_LAZY|SUDO_DSO_GLOBAL); if (!handle) { + const char *errstr = sudo_dso_strerror(); sudo_warnx(U_("error in %s, line %d while loading plugin `%s'"), _PATH_SUDO_CONF, info->lineno, info->symbol_name); - sudo_warnx(U_("unable to load %s: %s"), path, sudo_dso_strerror()); - goto done; + sudo_warnx(U_("unable to load %s: %s"), path, + errstr ? errstr : "unknown error"); + goto bad; } plugin = sudo_dso_findsym(handle, info->symbol_name); if (!plugin) { sudo_warnx(U_("error in %s, line %d while loading plugin `%s'"), _PATH_SUDO_CONF, info->lineno, info->symbol_name); sudo_warnx(U_("unable to find symbol `%s' in %s"), info->symbol_name, path); - goto done; + goto bad; } if (plugin->type != SUDO_POLICY_PLUGIN && plugin->type != SUDO_IO_PLUGIN) { sudo_warnx(U_("error in %s, line %d while loading plugin `%s'"), _PATH_SUDO_CONF, info->lineno, info->symbol_name); sudo_warnx(U_("unknown policy type %d found in %s"), plugin->type, path); - goto done; + goto bad; } if (SUDO_API_VERSION_GET_MAJOR(plugin->version) != SUDO_API_VERSION_MAJOR) { sudo_warnx(U_("error in %s, line %d while loading plugin `%s'"), @@ -217,25 +193,28 @@ sudo_warnx(U_("incompatible plugin major version %d (expected %d) found in %s"), SUDO_API_VERSION_GET_MAJOR(plugin->version), SUDO_API_VERSION_MAJOR, path); - goto done; + goto bad; } if (plugin->type == SUDO_POLICY_PLUGIN) { - if (policy_plugin->handle) { + if (policy_plugin->handle != NULL) { /* Ignore duplicate entries. */ if (strcmp(policy_plugin->name, info->symbol_name) != 0) { 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")); - goto done; + goto bad; } sudo_warnx(U_("ignoring duplicate policy plugin `%s' in %s, line %d"), info->symbol_name, _PATH_SUDO_CONF, info->lineno); - sudo_dso_unload(handle); - handle = NULL; + goto bad; } if (handle != NULL) { policy_plugin->handle = handle; - policy_plugin->path = sudo_estrdup(path); + policy_plugin->path = strdup(path); + if (policy_plugin->path == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto bad; + } policy_plugin->name = info->symbol_name; policy_plugin->options = info->options; policy_plugin->debug_instance = SUDO_DEBUG_INSTANCE_INITIALIZER; @@ -254,9 +233,12 @@ } } if (handle != NULL) { - container = sudo_ecalloc(1, sizeof(*container)); + container = calloc(1, sizeof(*container)); + if (container == NULL || (container->path = strdup(path)) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto bad; + } container->handle = handle; - container->path = sudo_estrdup(path); container->name = info->symbol_name; container->options = info->options; container->debug_instance = SUDO_DEBUG_INSTANCE_INITIALIZER; @@ -270,18 +252,21 @@ info->symbol_name = NULL; info->options = NULL; - rval = true; -done: - debug_return_bool(rval); + debug_return_bool(true); +bad: + free(container); + if (handle != NULL) + sudo_dso_unload(handle); + debug_return_bool(false); } static void free_plugin_info(struct plugin_info *info) { - sudo_efree(info->path); - sudo_efree(info->options); - sudo_efree(info->symbol_name); - sudo_efree(info); + free(info->path); + free(info->options); + free(info->symbol_name); + free(info); } /* @@ -313,23 +298,31 @@ */ if (policy_plugin->handle == NULL) { /* Default policy plugin */ - info = sudo_ecalloc(1, sizeof(*info)); + info = calloc(1, sizeof(*info)); + if (info == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto done; + } info->symbol_name = "sudoers_policy"; info->path = SUDOERS_PLUGIN; /* info->options = NULL; */ rval = sudo_load_plugin(policy_plugin, io_plugins, info); - sudo_efree(info); + free(info); if (!rval) goto done; /* Default I/O plugin */ if (TAILQ_EMPTY(io_plugins)) { - info = sudo_ecalloc(1, sizeof(*info)); + info = calloc(1, sizeof(*info)); + if (info == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto done; + } info->symbol_name = "sudoers_io"; info->path = SUDOERS_PLUGIN; /* info->options = NULL; */ rval = sudo_load_plugin(policy_plugin, io_plugins, info); - sudo_efree(info); + free(info); if (!rval) goto done; } diff -Nru sudo-1.8.12/src/locale_stub.c sudo-1.8.16/src/locale_stub.c --- sudo-1.8.12/src/locale_stub.c 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/src/locale_stub.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,50 +0,0 @@ -/* - * 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. - */ - -#include - -#include - -#include -#include -#ifdef HAVE_STRING_H -# include -#endif /* HAVE_STRING_H */ -#ifdef HAVE_STRINGS_H -# include -#endif /* HAVE_STRINGS_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" - -#ifdef HAVE_LIBINTL_H -/* No need to swap locales in the front end. */ -char * -sudo_warn_gettext_v1(const char *msgid) -{ - return gettext(msgid); -} -#endif /* HAVE_LIBINTL_H */ - -/* No need to swap locales in the front end. */ -char * -sudo_warn_strerror_v1(int errnum) -{ - return strerror(errnum); -} diff -Nru sudo-1.8.12/src/Makefile.in sudo-1.8.16/src/Makefile.in --- sudo-1.8.12/src/Makefile.in 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/src/Makefile.in 2016-03-17 16:13:11.000000000 +0000 @@ -1,5 +1,5 @@ # -# Copyright (c) 2010-2014 Todd C. Miller +# Copyright (c) 2010-2015 Todd C. Miller # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above @@ -24,11 +24,12 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ incdir = $(top_srcdir)/include +rundir = @rundir@ cross_compiling = @CROSS_COMPILING@ # Compiler & tools to use CC = @CC@ -LIBTOOL = @LIBTOOL@ --tag=disable-static +LIBTOOL = @LIBTOOL@ SED = @SED@ # Our install program supports extra flags... @@ -37,18 +38,27 @@ # Libraries LT_LIBS = $(top_builddir)/lib/util/libsudo_util.la -LIBS = @LIBS@ @SUDO_LIBS@ @GETGROUPS_LIB@ @NET_LIBS@ @LIBINTL@ $(LT_LIBS) +LIBS = @LIBS@ @SUDO_LIBS@ @GETGROUPS_LIB@ @NET_LIBS@ $(LT_LIBS) + +# C preprocessor defines +CPPDEFS = -D_PATH_SUDO_CONF=\"$(sysconfdir)/sudo.conf\" \ + -DLOCALEDIR=\"$(localedir)\" # C preprocessor flags -CPPFLAGS = -I$(incdir) -I$(top_builddir) -I. -I$(srcdir) -I$(top_srcdir) @CPPFLAGS@ +CPPFLAGS = -I$(incdir) -I$(top_builddir) -I. -I$(srcdir) -I$(top_srcdir) \ + $(CPPDEFS) @CPPFLAGS@ # Usually -O and/or -g CFLAGS = @CFLAGS@ # Flags to pass to the link stage LDFLAGS = @LDFLAGS@ +SUDO_LDFLAGS = $(LDFLAGS) @SUDO_LDFLAGS@ LT_LDFLAGS = @LT_LDFLAGS@ +# Flags to pass to libtool +LTFLAGS = --tag=disable-static + # PIE flags PIE_CFLAGS = @PIE_CFLAGS@ PIE_LDFLAGS = @PIE_LDFLAGS@ @@ -60,6 +70,9 @@ # cppcheck options, usually set in the top-level Makefile CPPCHECK_OPTS = -q --force --enable=warning,performance,portability --suppress=constStatement --error-exitcode=1 --inline-suppr -Dva_copy=va_copy -U__cplusplus -UQUAD_MAX -UQUAD_MIN -UUQUAD_MAX -U_POSIX_HOST_NAME_MAX -U_POSIX_PATH_MAX -U__NBBY -DNSIG=64 +# splint options, usually set in the top-level Makefile +SPLINT_OPTS = -D__restrict= -checks + # Where to install things... prefix = @prefix@ exec_prefix = @exec_prefix@ @@ -72,6 +85,7 @@ localstatedir = @localstatedir@ noexecfile = @NOEXECFILE@ noexecdir = @NOEXECDIR@ +tmpfiles_d = @TMPFILES_D@ # User and group ids the installed files should be "owned" by install_uid = 0 @@ -86,12 +100,9 @@ RC_LINK=@RC_LINK@ TEST_PROGS = check_ttyname -TEST_LIBS = @LIBS@ @LIBINTL@ $(LT_LIBS) +TEST_LIBS = @LIBS@ $(LT_LIBS) TEST_LDFLAGS = @LDFLAGS@ -# OS dependent defines -DEFS = @OSDEFS@ -DLOCALEDIR=\"$(localedir)\" - #### End of system configuration section. #### SHELL = @SHELL@ @@ -103,9 +114,9 @@ preserve_fds.o signal.o sudo.o sudo_edit.o tgetpass.o ttyname.o \ utmp.o @SUDO_OBJS@ -SESH_OBJS = sesh.o locale_stub.o exec_common.o +SESH_OBJS = sesh.o exec_common.o -CHECK_TTYNAME_OBJS = check_ttyname.o locale_stub.o ttyname.o +CHECK_TTYNAME_OBJS = check_ttyname.o ttyname.o LIBOBJDIR = $(top_builddir)/@ac_config_libobj_dir@/ @@ -122,22 +133,22 @@ .SUFFIXES: .c .h .lo .o .c.o: - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $< + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $< .c.lo: - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $< + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $< sudo: $(OBJS) $(LT_LIBS) @STATIC_SUDOERS@ - $(LIBTOOL) --mode=link $(CC) -o $@ $(OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) @STATIC_SUDOERS@ + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(OBJS) $(SUDO_LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) @STATIC_SUDOERS@ sudo_noexec.la: sudo_noexec.lo - $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) $(LT_LDFLAGS) -o $@ sudo_noexec.lo -module -avoid-version -rpath $(noexecdir) -shrext .so + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) $(LDFLAGS) $(LT_LDFLAGS) $(SSP_LDFLAGS) -o $@ sudo_noexec.lo -module -avoid-version -rpath $(noexecdir) -shrext .so -sesh: $(SESH_OBJS) @LIBINTL@ $(LT_LIBS) - $(LIBTOOL) --mode=link $(CC) -o $@ $(SESH_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) @LIBINTL@ $(LIBS) +sesh: $(SESH_OBJS) $(LT_LIBS) + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(SESH_OBJS) $(LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(LIBS) check_ttyname: $(CHECK_TTYNAME_OBJS) $(top_builddir)/lib/util/libsudo_util.la - $(LIBTOOL) --mode=link $(CC) -o $@ $(CHECK_TTYNAME_OBJS) $(TEST_LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LIBS) + $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(CHECK_TTYNAME_OBJS) $(TEST_LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(TEST_LIBS) pre-install: @@ -146,22 +157,28 @@ install-dirs: $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(bindir) \ $(DESTDIR)$(libexecdir)/sudo $(DESTDIR)$(noexecdir) - -install-rc: - @if [ -n "$(INIT_SCRIPT)" ]; then \ + if test -n "$(INIT_SCRIPT)"; then \ $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(INIT_DIR) \ `echo $(DESTDIR)$(RC_LINK) | $(SED) 's,/[^/]*$$,,'`; \ - $(INSTALL) $(INSTALL_OWNER) -m 0755 $(top_srcdir)/init.d/$(INIT_SCRIPT) $(DESTDIR)$(INIT_DIR)/sudo; \ + elif test -n "$(tmpfiles_d)"; then \ + $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(tmpfiles_d); \ + fi + +install-rc: install-dirs + if [ -n "$(INIT_SCRIPT)" ]; then \ + $(INSTALL) $(INSTALL_OWNER) -m 0755 $(top_builddir)/init.d/$(INIT_SCRIPT) $(DESTDIR)$(INIT_DIR)/sudo; \ rm -f $(DESTDIR)$(RC_LINK); \ ln -s $(INIT_DIR)/sudo $(DESTDIR)$(RC_LINK); \ + elif test -n "$(tmpfiles_d)"; then \ + $(INSTALL) $(INSTALL_OWNER) -m 0644 $(top_builddir)/init.d/sudo.conf $(DESTDIR)$(tmpfiles_d)/sudo.conf; \ fi install-binaries: install-dirs $(PROGS) - INSTALL_BACKUP='~' $(LIBTOOL) --mode=install $(INSTALL) $(INSTALL_OWNER) -m 04755 sudo $(DESTDIR)$(bindir)/sudo + INSTALL_BACKUP='~' $(LIBTOOL) $(LTFLAGS) --mode=install $(INSTALL) $(INSTALL_OWNER) -m 04755 sudo $(DESTDIR)$(bindir)/sudo rm -f $(DESTDIR)$(bindir)/sudoedit ln -s sudo $(DESTDIR)$(bindir)/sudoedit if [ -f sesh ]; then \ - INSTALL_BACKUP='~' $(LIBTOOL) --mode=install $(INSTALL) $(INSTALL_OWNER) -m 0755 sesh $(DESTDIR)$(libexecdir)/sudo/sesh; \ + INSTALL_BACKUP='~' $(LIBTOOL) $(LTFLAGS) --mode=install $(INSTALL) $(INSTALL_OWNER) -m 0755 sesh $(DESTDIR)$(libexecdir)/sudo/sesh; \ fi install-doc: @@ -169,21 +186,24 @@ install-includes: install-noexec: install-dirs sudo_noexec.la - INSTALL_BACKUP='~' $(LIBTOOL) --mode=install $(INSTALL) $(INSTALL_OWNER) -m $(shlib_mode) sudo_noexec.la $(DESTDIR)$(noexecdir) + INSTALL_BACKUP='~' $(LIBTOOL) $(LTFLAGS) --mode=install $(INSTALL) $(INSTALL_OWNER) -m $(shlib_mode) sudo_noexec.la $(DESTDIR)$(noexecdir) install-plugin: uninstall: - -$(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(noexecdir)/sudo_noexec.la + -$(LIBTOOL) $(LTFLAGS) --mode=uninstall rm -f $(DESTDIR)$(noexecdir)/sudo_noexec.la -rm -f $(DESTDIR)$(bindir)/sudo \ $(DESTDIR)$(bindir)/sudo~ \ $(DESTDIR)$(bindir)/sudoedit \ $(DESTDIR)$(libexecdir)/sudo/sesh \ $(DESTDIR)$(libexecdir)/sudo/sesh~ \ - $(DESTDIR)$(noexecdir)/sudo_noexec.so~ - @if [ -n "$(INIT_SCRIPT)" ]; then \ - rm -f $(DESTDIR)$(RC_LINK) $(DESTDIR)$(INIT_DIR)/sudo; \ - fi + $(DESTDIR)$(noexecdir)/sudo_noexec.so~ \ + $(DESTDIR)/usr/lib/tmpfiles.d/sudo.conf + -test -n "$(INIT_SCRIPT)" && \ + rm -f $(DESTDIR)$(RC_LINK) $(DESTDIR)$(INIT_DIR)/sudo + +splint: + splint $(SPLINT_OPTS) -I$(incdir) -I$(top_builddir) -I. -I$(srcdir) -I$(top_srcdir) $(srcdir)/*.c cppcheck: cppcheck $(CPPCHECK_OPTS) -I$(incdir) -I$(top_builddir) -I. -I$(srcdir) -I$(top_srcdir) $(srcdir)/*.c @@ -194,7 +214,7 @@ fi clean: - -$(LIBTOOL) --mode=clean rm -f $(PROGS) $(TEST_PROGS) *.lo *.o *.la *.a stamp-* core *.core core.* + -$(LIBTOOL) $(LTFLAGS) --mode=clean rm -f $(PROGS) $(TEST_PROGS) *.lo *.o *.la *.a stamp-* core *.core core.* mostlyclean: clean @@ -210,173 +230,164 @@ # Autogenerated dependencies, do not modify check_ttyname.o: $(srcdir)/regress/ttyname/check_ttyname.c \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.h \ - $(incdir)/sudo_compat.h $(incdir)/sudo_debug.h \ - $(incdir)/sudo_fatal.h $(incdir)/sudo_queue.h \ - $(incdir)/sudo_util.h $(top_builddir)/config.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/regress/ttyname/check_ttyname.c + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(top_builddir)/config.h + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/regress/ttyname/check_ttyname.c conversation.o: $(srcdir)/conversation.c $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ - $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ - $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ - $(incdir)/sudo_util.h $(srcdir)/sudo.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/sudo.h \ $(srcdir)/sudo_plugin_int.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/conversation.c + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/conversation.c env_hooks.o: $(srcdir)/env_hooks.c $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_dso.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_dso.h \ $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ $(incdir)/sudo_util.h $(srcdir)/sudo.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/env_hooks.c -exec.o: $(srcdir)/exec.c $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.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 \ + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/env_hooks.c +exec.o: $(srcdir)/exec.c $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_event.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ $(srcdir)/sudo.h $(srcdir)/sudo_exec.h $(srcdir)/sudo_plugin_int.h \ $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/exec.c + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/exec.c exec_common.o: $(srcdir)/exec_common.c $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ - $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ - $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/sudo.h \ - $(srcdir)/sudo_exec.h $(top_builddir)/config.h \ - $(top_builddir)/pathnames.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/exec_common.c + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/sudo.h $(srcdir)/sudo_exec.h \ + $(top_builddir)/config.h $(top_builddir)/pathnames.h + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/exec_common.c exec_pty.o: $(srcdir)/exec_pty.c $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ - $(incdir)/sudo_event.h $(incdir)/sudo_fatal.h \ - $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ - $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/sudo.h \ - $(srcdir)/sudo_exec.h $(srcdir)/sudo_plugin_int.h \ - $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/exec_pty.c + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_event.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/sudo.h $(srcdir)/sudo_exec.h \ + $(srcdir)/sudo_plugin_int.h $(top_builddir)/config.h \ + $(top_builddir)/pathnames.h + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/exec_pty.c get_pty.o: $(srcdir)/get_pty.c $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ $(incdir)/sudo_gettext.h $(incdir)/sudo_queue.h \ $(incdir)/sudo_util.h $(srcdir)/sudo.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/get_pty.c -hooks.o: $(srcdir)/hooks.c $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.h \ - $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ - $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ - $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ - $(srcdir)/sudo.h $(srcdir)/sudo_plugin_int.h $(top_builddir)/config.h \ + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/get_pty.c +hooks.o: $(srcdir)/hooks.c $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/sudo.h \ + $(srcdir)/sudo_plugin_int.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/hooks.c + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/hooks.c load_plugins.o: $(srcdir)/load_plugins.c $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ - $(incdir)/sudo_dso.h $(incdir)/sudo_fatal.h \ - $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ - $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/sudo.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_dso.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/sudo.h \ $(srcdir)/sudo_plugin_int.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/load_plugins.c -locale_stub.o: $(srcdir)/locale_stub.c $(incdir)/sudo_compat.h \ - $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ - $(top_builddir)/config.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/locale_stub.c + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/load_plugins.c net_ifs.o: $(srcdir)/net_ifs.c $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ $(incdir)/sudo_gettext.h $(incdir)/sudo_queue.h \ $(top_builddir)/config.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/net_ifs.c + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/net_ifs.c openbsd.o: $(srcdir)/openbsd.c $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ $(incdir)/sudo_gettext.h $(incdir)/sudo_queue.h \ $(incdir)/sudo_util.h $(srcdir)/sudo.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/openbsd.c + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/openbsd.c parse_args.o: $(srcdir)/parse_args.c $(incdir)/compat/getopt.h \ - $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.h \ - $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ - $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ - $(incdir)/sudo_gettext.h $(incdir)/sudo_lbuf.h \ - $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/sudo.h \ - $(top_builddir)/config.h $(top_builddir)/pathnames.h \ - ./sudo_usage.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/parse_args.c + $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ + $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ + $(incdir)/sudo_lbuf.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/sudo.h $(top_builddir)/config.h \ + $(top_builddir)/pathnames.h ./sudo_usage.h + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/parse_args.c preload.o: $(srcdir)/preload.c $(incdir)/sudo_compat.h $(incdir)/sudo_dso.h \ $(incdir)/sudo_plugin.h $(top_builddir)/config.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/preload.c + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/preload.c preserve_fds.o: $(srcdir)/preserve_fds.c $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ - $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ - $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/sudo.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/sudo.h \ $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/preserve_fds.c + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/preserve_fds.c selinux.o: $(srcdir)/selinux.c $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ $(incdir)/sudo_gettext.h $(incdir)/sudo_queue.h \ $(incdir)/sudo_util.h $(srcdir)/sudo.h $(srcdir)/sudo_exec.h \ $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/selinux.c -sesh.o: $(srcdir)/sesh.c $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.h \ - $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ - $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ - $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ - $(srcdir)/sudo_exec.h $(top_builddir)/config.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sesh.c -signal.o: $(srcdir)/signal.c $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.h \ + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/selinux.c +sesh.o: $(srcdir)/sesh.c $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/sudo_exec.h \ + $(top_builddir)/config.h + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/sesh.c +signal.o: $(srcdir)/signal.c $(incdir)/compat/stdbool.h \ $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/sudo.h \ $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/signal.c + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/signal.c solaris.o: $(srcdir)/solaris.c $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_dso.h \ - $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ - $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/sudo.h \ - $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/solaris.c -sudo.o: $(srcdir)/sudo.c $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.h \ - $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ - $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ - $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ - $(srcdir)/sudo.h $(srcdir)/sudo_plugin_int.h $(top_builddir)/config.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_dso.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/sudo.h $(top_builddir)/config.h \ + $(top_builddir)/pathnames.h + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/solaris.c +sudo.o: $(srcdir)/sudo.c $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/sudo.h \ + $(srcdir)/sudo_plugin_int.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h ./sudo_usage.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sudo.c + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/sudo.c sudo_edit.o: $(srcdir)/sudo_edit.c $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ - $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ - $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/sudo.h \ - $(srcdir)/sudo_exec.h $(top_builddir)/config.h \ - $(top_builddir)/pathnames.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sudo_edit.c + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_queue.h \ + $(incdir)/sudo_util.h $(srcdir)/sudo.h $(srcdir)/sudo_exec.h \ + $(top_builddir)/config.h $(top_builddir)/pathnames.h + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/sudo_edit.c sudo_noexec.lo: $(srcdir)/sudo_noexec.c $(incdir)/sudo_compat.h \ $(top_builddir)/config.h - $(LIBTOOL) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/sudo_noexec.c + $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/sudo_noexec.c tgetpass.o: $(srcdir)/tgetpass.c $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ - $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \ - $(incdir)/sudo_plugin.h $(incdir)/sudo_queue.h \ - $(incdir)/sudo_util.h $(srcdir)/sudo.h $(top_builddir)/config.h \ - $(top_builddir)/pathnames.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/tgetpass.c + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_plugin.h \ + $(incdir)/sudo_queue.h $(incdir)/sudo_util.h $(srcdir)/sudo.h \ + $(top_builddir)/config.h $(top_builddir)/pathnames.h + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/tgetpass.c ttyname.o: $(srcdir)/ttyname.c $(incdir)/compat/stdbool.h \ - $(incdir)/sudo_alloc.h $(incdir)/sudo_compat.h \ - $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h \ + $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ $(incdir)/sudo_gettext.h $(incdir)/sudo_queue.h \ $(incdir)/sudo_util.h $(srcdir)/sudo.h $(top_builddir)/config.h \ $(top_builddir)/pathnames.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/ttyname.c -utmp.o: $(srcdir)/utmp.c $(incdir)/compat/stdbool.h $(incdir)/sudo_alloc.h \ - $(incdir)/sudo_compat.h $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h \ - $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h $(incdir)/sudo_queue.h \ - $(incdir)/sudo_util.h $(srcdir)/sudo.h $(srcdir)/sudo_exec.h \ - $(top_builddir)/config.h $(top_builddir)/pathnames.h - $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(DEFS) $(srcdir)/utmp.c + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/ttyname.c +utmp.o: $(srcdir)/utmp.c $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \ + $(incdir)/sudo_conf.h $(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h \ + $(incdir)/sudo_gettext.h $(incdir)/sudo_queue.h $(incdir)/sudo_util.h \ + $(srcdir)/sudo.h $(srcdir)/sudo_exec.h $(top_builddir)/config.h \ + $(top_builddir)/pathnames.h + $(CC) -c $(CPPFLAGS) $(CFLAGS) $(PIE_CFLAGS) $(SSP_CFLAGS) $(srcdir)/utmp.c diff -Nru sudo-1.8.12/src/net_ifs.c sudo-1.8.16/src/net_ifs.c --- sudo-1.8.12/src/net_ifs.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/src/net_ifs.c 2015-10-31 23:35:00.000000000 +0000 @@ -38,18 +38,8 @@ # include #endif #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H @@ -60,9 +50,7 @@ #else # include "compat/stdbool.h" #endif /* HAVE_STDBOOL_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include #ifdef _ISC @@ -79,18 +67,21 @@ #endif /* _MIPS */ #include #include +#ifdef NEED_RESOLV_H +# include +# include +#endif /* NEED_RESOLV_H */ #include #ifdef HAVE_GETIFADDRS # include #endif -#define _SUDO_NET_IFS_C /* to expose sudo_inet_ntop in sudo_compat.h */ +#define SUDO_NET_IFS_C /* 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_alloc.h" #include "sudo_fatal.h" #include "sudo_conf.h" #include "sudo_debug.h" @@ -111,7 +102,7 @@ /* * Fill in the interfaces string with the machine's ip addresses and netmasks - * and return the number of interfaces found. + * and return the number of interfaces found. Returns -1 on error. */ int get_net_ifs(char **addrinfo) @@ -128,9 +119,12 @@ char *cp; debug_decl(get_net_ifs, SUDO_DEBUG_NETIF) - if (!sudo_conf_probe_interfaces() || getifaddrs(&ifaddrs) != 0) + if (!sudo_conf_probe_interfaces()) debug_return_int(0); + if (getifaddrs(&ifaddrs) == -1) + debug_return_int(-1); + /* Allocate space for the interfaces info string. */ for (ifa = ifaddrs; ifa != NULL; ifa = ifa -> ifa_next) { /* Skip interfaces marked "down" and "loopback". */ @@ -150,7 +144,12 @@ if (num_interfaces == 0) debug_return_int(0); ailen = num_interfaces * 2 * INET6_ADDRSTRLEN; - *addrinfo = cp = sudo_emalloc(ailen); + if ((cp = malloc(ailen)) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + debug_return_int(-1); + } + *addrinfo = cp; /* Store the IP addr/netmask pairs. */ for (ifa = ifaddrs; ifa != NULL; ifa = ifa -> ifa_next) { @@ -201,7 +200,7 @@ #ifdef HAVE_FREEIFADDRS freeifaddrs(ifaddrs); #else - sudo_efree(ifaddrs); + free(ifaddrs); #endif debug_return_int(num_interfaces); } @@ -209,8 +208,8 @@ #elif defined(SIOCGIFCONF) && !defined(STUB_LOAD_INTERFACES) /* - * Allocate and fill in the interfaces global variable with the - * machine's ip addresses and netmasks. + * Fill in the interfaces string with the machine's ip addresses and netmasks + * and return the number of interfaces found. Returns -1 on error. */ int get_net_ifs(char **addrinfo) @@ -233,13 +232,18 @@ sock = socket(AF_INET, SOCK_DGRAM, 0); if (sock < 0) - sudo_fatal(U_("unable to open socket")); + debug_return_int(-1); /* * Get interface configuration or return. */ for (;;) { - ifconf_buf = sudo_emalloc(buflen); + if ((ifconf_buf = malloc(buflen)) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + num_interfaces = -1; + goto done; + } ifconf = (struct ifconf *) ifconf_buf; ifconf->ifc_len = buflen - sizeof(struct ifconf); ifconf->ifc_buf = (caddr_t) (ifconf_buf + sizeof(struct ifconf)); @@ -257,14 +261,20 @@ if (ifconf->ifc_len + sizeof(struct ifreq) < buflen) break; buflen += BUFSIZ; - sudo_efree(ifconf_buf); + free(ifconf_buf); } /* Allocate space for the maximum number of interfaces that could exist. */ if ((n = ifconf->ifc_len / sizeof(struct ifreq)) == 0) - debug_return_int(0); + goto done; ailen = n * 2 * INET6_ADDRSTRLEN; - *addrinfo = cp = sudo_emalloc(ailen); + if ((cp = malloc(ailen)) == NULL) { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to allocate memory"); + num_interfaces = -1; + goto done; + } + *addrinfo = cp; /* For each interface, store the ip address and netmask. */ for (i = 0; i < ifconf->ifc_len; ) { @@ -333,7 +343,7 @@ } done: - sudo_efree(ifconf_buf); + free(ifconf_buf); (void) close(sock); debug_return_int(num_interfaces); diff -Nru sudo-1.8.12/src/openbsd.c sudo-1.8.16/src/openbsd.c --- sudo-1.8.12/src/openbsd.c 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/src/openbsd.c 2015-10-31 23:35:00.000000000 +0000 @@ -18,26 +18,14 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include "sudo.h" diff -Nru sudo-1.8.12/src/parse_args.c sudo-1.8.16/src/parse_args.c --- sudo-1.8.12/src/parse_args.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/src/parse_args.c 2015-10-31 23:35:07.000000000 +0000 @@ -23,23 +23,14 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include #include @@ -184,7 +175,9 @@ if (argc <= 0) usage(1); - env_add = sudo_emallocarray(env_size, sizeof(char *)); + env_add = reallocarray(NULL, env_size, sizeof(char *)); + if (env_add == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); /* Pass progname to plugin so it can call initprogname() */ progname = getprogname(); @@ -205,7 +198,8 @@ /* Set max_groups from sudo.conf. */ i = sudo_conf_max_groups(); if (i != -1) { - sudo_easprintf(&cp, "%d", i); + if (asprintf(&cp, "%d", i) == -1) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); sudo_settings[ARG_MAX_GROUPS].value = cp; } @@ -369,8 +363,13 @@ } } else if (!got_end_of_args && is_envar) { if (nenv == env_size - 2) { + char **tmp; + + tmp = reallocarray(env_add, env_size, 2 * sizeof(char *)); + if (tmp == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + env_add = tmp; env_size *= 2; - env_add = sudo_ereallocarray(env_add, env_size, sizeof(char *)); } env_add[nenv++] = argv[optind]; @@ -462,7 +461,9 @@ size_t cmnd_size = (size_t) (argv[argc - 1] - argv[0]) + strlen(argv[argc - 1]) + 1; - cmnd = dst = sudo_emallocarray(cmnd_size, 2); + cmnd = dst = reallocarray(NULL, cmnd_size, 2); + if (cmnd == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); for (av = argv; *av != NULL; av++) { for (src = *av; *src != '\0'; src++) { /* quote potential meta characters */ @@ -479,7 +480,9 @@ ac += 2; /* -c cmnd */ } - av = sudo_emallocarray(ac + 1, sizeof(char *)); + av = reallocarray(NULL, ac + 1, sizeof(char *)); + if (av == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); av[0] = (char *)user_details.shell; /* plugin may override shell */ if (cmnd != NULL) { av[1] = "-c"; @@ -596,7 +599,7 @@ sudo_lbuf_append(&lbuf, " -A, --askpass %s\n", _("use a helper program for password prompting")); #ifdef HAVE_BSD_AUTH_H - sudo_lbuf_append(&lbuf, " -a, --auth-type=type %s\n", + sudo_lbuf_append(&lbuf, " -a, --auth-type=type %s\n", _("use specified BSD authentication type")); #endif sudo_lbuf_append(&lbuf, " -b, --background %s\n", diff -Nru sudo-1.8.12/src/preserve_fds.c sudo-1.8.16/src/preserve_fds.c --- sudo-1.8.12/src/preserve_fds.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/src/preserve_fds.c 2015-10-31 23:35:24.000000000 +0000 @@ -16,34 +16,17 @@ #include -#include /* for howmany() on Linux */ -#ifdef HAVE_SYS_SYSMACROS_H -# include /* for howmany() on Solaris */ -#endif /* HAVE_SYS_SYSMACROS_H */ -#ifdef HAVE_SYS_SELECT_H -# include /* for FD_* macros */ -#endif /* HAVE_SYS_SELECT_H */ +#include + #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include #include @@ -59,12 +42,14 @@ struct preserved_fd *pfd, *pfd_new; debug_decl(add_preserved_fd, SUDO_DEBUG_UTIL) - pfd_new = sudo_emalloc(sizeof(*pfd)); + pfd_new = malloc(sizeof(*pfd)); + if (pfd_new == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); pfd_new->lowfd = fd; pfd_new->highfd = fd; pfd_new->flags = fcntl(fd, F_GETFD); if (pfd_new->flags == -1) { - sudo_efree(pfd_new); + free(pfd_new); debug_return_int(-1); } @@ -73,7 +58,7 @@ /* already preserved */ sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, "fd %d already preserved", fd); - sudo_efree(pfd_new); + free(pfd_new); break; } if (fd < pfd->highfd) { @@ -101,7 +86,7 @@ { int fd, lastfd = -1; struct preserved_fd *pfd, *pfd_next; - fd_set *fdsp; + unsigned char *fdbits; debug_decl(closefrom_except, SUDO_DEBUG_UTIL) /* First, relocate preserved fds to be as contiguous as possible. */ @@ -140,16 +125,18 @@ } /* Create bitmap of preserved (relocated) fds. */ - fdsp = sudo_ecalloc(howmany(lastfd + 1, NFDBITS), sizeof(fd_mask)); + fdbits = calloc((lastfd + NBBY) / NBBY, 1); + if (fdbits == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); TAILQ_FOREACH(pfd, pfds, entries) { - FD_SET(pfd->lowfd, fdsp); + sudo_setbit(fdbits, pfd->lowfd); } /* * Close any unpreserved fds [startfd,lastfd] */ for (fd = startfd; fd <= lastfd; fd++) { - if (!FD_ISSET(fd, fdsp)) { + if (!sudo_isset(fdbits, fd)) { sudo_debug_printf(SUDO_DEBUG_DEBUG|SUDO_DEBUG_LINENO, "closing fd %d", fd); #ifdef __APPLE__ @@ -160,7 +147,7 @@ #endif } } - free(fdsp); + free(fdbits); /* Let closefrom() do the rest for us. */ if (lastfd + 1 > startfd) diff -Nru sudo-1.8.12/src/regress/ttyname/check_ttyname.c sudo-1.8.16/src/regress/ttyname/check_ttyname.c --- sudo-1.8.12/src/regress/ttyname/check_ttyname.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/src/regress/ttyname/check_ttyname.c 2015-10-31 23:35:00.000000000 +0000 @@ -18,28 +18,18 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ #include +#include #include #include "sudo_compat.h" -#include "sudo_alloc.h" #include "sudo_fatal.h" #include "sudo_util.h" #include "sudo_debug.h" @@ -47,18 +37,20 @@ __dso_public int main(int argc, char *argv[]); int sudo_debug_instance = SUDO_DEBUG_INSTANCE_INITIALIZER; -extern char *get_process_ttyname(void); +extern char *get_process_ttyname(char *name, size_t namelen); int main(int argc, char *argv[]) { - char *tty_libc = NULL, *tty_sudo; + char *tty_libc = NULL, *tty_sudo = NULL; + char pathbuf[PATH_MAX]; int rval = 1; initprogname(argc > 0 ? argv[0] : "check_ttyname"); /* Lookup tty name using kernel info if possible. */ - tty_sudo = get_process_ttyname(); + if (get_process_ttyname(pathbuf, sizeof(pathbuf)) != NULL) + tty_sudo = pathbuf; #if defined(HAVE_STRUCT_KINFO_PROC2_P_TDEV) || \ defined(HAVE_STRUCT_KINFO_PROC_P_TDEV) || \ @@ -89,6 +81,5 @@ tty_sudo ? tty_sudo : "none", tty_libc ? tty_libc : "none"); } - sudo_efree(tty_sudo); exit(rval); } diff -Nru sudo-1.8.12/src/selinux.c sudo-1.8.16/src/selinux.c --- sudo-1.8.12/src/selinux.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/src/selinux.c 2016-03-17 16:13:10.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009-2015 Todd C. Miller + * Copyright (c) 2009-2016 Todd C. Miller * Copyright (c) 2008 Dan Walsh * * Borrowed heavily from newrole source code @@ -26,11 +26,12 @@ #include +#ifdef HAVE_SELINUX + #include #include #include #include -#include #include #include #include @@ -77,13 +78,15 @@ sudo_fatal(U_("unable to open audit system")); } else { /* audit role change using the same format as newrole(1) */ - sudo_easprintf(&message, "newrole: old-context=%s new-context=%s", + rc = asprintf(&message, "newrole: old-context=%s new-context=%s", old_context, new_context); + if (rc == -1) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); 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_efree(message); + free(message); close(au_fd); } @@ -284,7 +287,10 @@ /* * Convert "context" back into a string and verify it. */ - new_context = sudo_estrdup(context_str(context)); + if ((new_context = strdup(context_str(context))) == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto bad; + } if (security_check_context(new_context) < 0) { sudo_warnx(U_("%s is not a valid context"), new_context); errno = EINVAL; @@ -299,7 +305,7 @@ debug_return_ptr(new_context); bad: - sudo_efree(typebuf); + free(typebuf); context_free(context); freecon(new_context); debug_return_ptr(NULL); @@ -367,8 +373,8 @@ } void -selinux_execve(const char *path, char *const argv[], char *const envp[], - int noexec) +selinux_execve(int fd, const char *path, char *const argv[], char *envp[], + bool noexec) { char **nargv; const char *sesh; @@ -403,18 +409,31 @@ */ for (argc = 0; argv[argc] != NULL; argc++) continue; - nargv = sudo_emallocarray(argc + 2, sizeof(char *)); + if (fd != -1) + argc++; + nargv = reallocarray(NULL, argc + 2, sizeof(char *)); + if (nargv == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return; + } if (noexec) nargv[0] = *argv[0] == '-' ? "-sesh-noexec" : "sesh-noexec"; else nargv[0] = *argv[0] == '-' ? "-sesh" : "sesh"; - nargv[1] = (char *)path; - memcpy(&nargv[2], &argv[1], argc * sizeof(char *)); /* copies NULL */ + argc = 1; + if (fd != -1 && asprintf(&nargv[argc++], "--execfd=%d", fd) == -1) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return; + } + nargv[argc] = (char *)path; + memcpy(&nargv[argc + 1], &argv[argc], argc * sizeof(char *)); /* copies NULL */ /* sesh will handle noexec for us. */ - sudo_execve(sesh, nargv, envp, false); + sudo_execve(-1, sesh, nargv, envp, false); serrno = errno; free(nargv); errno = serrno; debug_return; } + +#endif /* HAVE_SELINUX */ diff -Nru sudo-1.8.12/src/sesh.c sudo-1.8.16/src/sesh.c --- sudo-1.8.12/src/sesh.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/src/sesh.c 2016-03-17 16:13:10.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2010-2015 Todd C. Miller + * Copyright (c) 2008, 2010-2016 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 @@ -41,7 +41,6 @@ #include "sudo_gettext.h" /* must be included before sudo_compat.h */ #include "sudo_compat.h" -#include "sudo_alloc.h" #include "sudo_fatal.h" #include "sudo_conf.h" #include "sudo_debug.h" @@ -78,7 +77,8 @@ sudo_fatalx(U_("requires at least one argument")); /* Read sudo.conf and initialize the debug subsystem. */ - sudo_conf_read(NULL, SUDO_CONF_DEBUG); + if (sudo_conf_read(NULL, SUDO_CONF_DEBUG) == -1) + exit(EXIT_FAILURE); sudo_debug_register(getprogname(), NULL, NULL, sudo_conf_debug_files(getprogname())); @@ -87,6 +87,7 @@ } else { bool login_shell, noexec = false; char *cp, *cmnd; + int fd = -1; /* If the first char of argv[0] is '-', we are running a login shell. */ login_shell = argv[0][0] == '-'; @@ -95,10 +96,23 @@ if ((cp = strrchr(argv[0], '-')) != NULL && cp != argv[0]) noexec = strcmp(cp, "-noexec") == 0; + /* If argv[1] is --execfd=%d, extract the fd to exec with. */ + if (strncmp(argv[1], "--execfd=", 9) == 0) { + const char *errstr; + + cp = argv[1] + 9; + fd = strtonum(cp, 0, INT_MAX, &errstr); + if (errstr != NULL) + sudo_fatalx(U_("invalid file descriptor number: %s"), cp); + argv++; + argc--; + } + /* Shift argv and make a copy of the command to execute. */ argv++; argc--; - cmnd = sudo_estrdup(argv[0]); + if ((cmnd = strdup(argv[0])) == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); /* If invoked as a login shell, modify argv[0] accordingly. */ if (login_shell) { @@ -107,7 +121,7 @@ *cp = '-'; argv[0] = cp; } - sudo_execve(cmnd, argv, envp, noexec); + sudo_execve(fd, cmnd, argv, envp, noexec); sudo_warn(U_("unable to execute %s"), cmnd); ret = SESH_ERR_FAILURE; } @@ -118,13 +132,21 @@ static int sesh_sudoedit(int argc, char *argv[]) { - int fd_src, fd_dst, i, oflags_dst, post, ret = SESH_ERR_FAILURE; + int i, oflags_dst, post, ret = SESH_ERR_FAILURE; + int fd_src = -1, fd_dst = -1, follow = 0; ssize_t nread, nwritten; struct stat sb; - struct timeval times[2]; + struct timespec times[2]; char buf[BUFSIZ]; debug_decl(sesh_sudoedit, SUDO_DEBUG_EDIT) + /* Check for -h flag (don't follow links). */ + if (strcmp(argv[2], "-h") == 0) { + argv++; + argc--; + follow = O_NOFOLLOW; + } + if (argc < 3) debug_return_int(SESH_ERR_FAILURE); @@ -158,7 +180,7 @@ * so that it's ensured that the temporary files are * created by us and that we are not opening any symlinks. */ - oflags_dst = O_WRONLY|O_TRUNC|O_CREAT|(post ? 0 : O_EXCL); + oflags_dst = O_WRONLY|O_TRUNC|O_CREAT|(post ? follow : O_EXCL); for (i = 0; i < argc - 1; i += 2) { const char *path_src = argv[i]; const char *path_dst = argv[i + 1]; @@ -167,7 +189,7 @@ * doesn't exist, that's OK, we'll create an empty * destination file. */ - if ((fd_src = open(path_src, O_RDONLY, 0600)) < 0) { + if ((fd_src = open(path_src, O_RDONLY|follow, 0600)) < 0) { if (errno != ENOENT) { sudo_warn("%s", path_src); if (post) { @@ -206,14 +228,13 @@ if (fd_src == -1 || fstat(fd_src, &sb) != 0) memset(&sb, 0, sizeof(sb)); /* Make mtime on temp file match src. */ - mtim_get(&sb, ×[0]); + mtim_get(&sb, times[0]); times[1].tv_sec = times[0].tv_sec; - times[1].tv_usec = times[0].tv_usec; -#ifdef HAVE_FUTIMES - (void) futimes(fd_dst, times); -#else - (void) utimes(path_dst, times); -#endif + times[1].tv_nsec = times[0].tv_nsec; + if (futimens(fd_dst, times) == -1) { + if (utimensat(AT_FDCWD, path_dst, times, 0) == -1) + sudo_warn("%s", path_dst); + } } close(fd_dst); } diff -Nru sudo-1.8.12/src/signal.c sudo-1.8.16/src/signal.c --- sudo-1.8.12/src/signal.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/src/signal.c 2015-10-31 23:35:00.000000000 +0000 @@ -18,23 +18,14 @@ #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include diff -Nru sudo-1.8.12/src/solaris.c sudo-1.8.16/src/solaris.c --- sudo-1.8.12/src/solaris.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/src/solaris.c 2015-10-31 23:35:00.000000000 +0000 @@ -19,26 +19,14 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #ifdef HAVE_PROJECT_H # include # include diff -Nru sudo-1.8.12/src/sudo.c sudo-1.8.16/src/sudo.c --- sudo-1.8.12/src/sudo.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/src/sudo.c 2016-03-17 16:13:11.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009-2015 Todd C. Miller + * Copyright (c) 2009-2016 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 @@ -27,26 +27,14 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include #include @@ -99,6 +87,23 @@ static struct command_details command_details; static int sudo_mode; +struct sudo_gc_entry { + SLIST_ENTRY(sudo_gc_entry) entries; + enum sudo_gc_types { + GC_UNKNOWN, + GC_VECTOR, + GC_PTR + } type; + union { + char **vec; + void *ptr; + } u; +}; +SLIST_HEAD(sudo_gc_list, sudo_gc_entry); +#ifdef NO_LEAKS +static struct sudo_gc_list sudo_gc_list = SLIST_HEAD_INITIALIZER(sudo_gc_list); +#endif + /* * Local functions */ @@ -108,6 +113,8 @@ static char **get_user_info(struct user_details *); static void command_info_to_details(char * const info[], struct command_details *details); +static bool gc_add(enum sudo_gc_types type, void *ptr); +static void gc_init(void); /* Policy plugin convenience functions. */ static int policy_open(struct plugin_container *plugin, @@ -146,13 +153,13 @@ int main(int argc, char *argv[], char *envp[]) { - int nargc, ok, exitcode = 0; + int nargc, ok, status = 0; char **nargv, **env_add; char **user_info, **command_info, **argv_out, **user_env_out; struct sudo_settings *settings; struct plugin_container *plugin, *next; sigset_t mask; - debug_decl(main, SUDO_DEBUG_MAIN) + debug_decl_vars(main, SUDO_DEBUG_MAIN) /* Make sure fds 0-2 are open and do OS-specific initialization. */ fix_fds(); @@ -162,9 +169,7 @@ bindtextdomain(PACKAGE_NAME, LOCALEDIR); textdomain(PACKAGE_NAME); -#ifdef HAVE_TZSET (void) tzset(); -#endif /* HAVE_TZSET */ /* Must be done before we do any password lookups */ #if defined(HAVE_GETPRPWNAM) && defined(HAVE_SET_AUTH_PARAMETERS) @@ -174,18 +179,16 @@ # endif #endif /* HAVE_GETPRPWNAM && HAVE_SET_AUTH_PARAMETERS */ - /* Use conversation function for sudo_(warn|fatal)x?. */ - sudo_warn_set_conversation(sudo_conversation); - /* Initialize the debug subsystem. */ - sudo_conf_read(NULL, SUDO_CONF_DEBUG); + if (sudo_conf_read(NULL, SUDO_CONF_DEBUG) == -1) + exit(EXIT_FAILURE); sudo_debug_instance = sudo_debug_register(getprogname(), NULL, NULL, sudo_conf_debug_files(getprogname())); /* Make sure we are setuid root. */ sudo_check_suid(argc > 0 ? argv[0] : "sudo"); - /* Reset signal mask, save signal state and make sure fds 0-2 are open. */ + /* Reset signal mask and save signal state. */ (void) sigemptyset(&mask); (void) sigprocmask(SIG_SETMASK, &mask, NULL); save_signals(); @@ -194,8 +197,8 @@ sudo_conf_read(NULL, SUDO_CONF_ALL & ~SUDO_CONF_DEBUG); /* Fill in user_info with user name, uid, cwd, etc. */ - memset(&user_details, 0, sizeof(user_details)); - user_info = get_user_info(&user_details); + if ((user_info = get_user_info(&user_details)) == NULL) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); /* Disable core dumps if not enabled in sudo.conf. */ disable_coredumps(); @@ -211,6 +214,9 @@ (void) printf(_("Configure options: %s\n"), CONFIGURE_ARGS); } + /* Use conversation function for sudo_(warn|fatal)x? for plugins. */ + sudo_warn_set_conversation(sudo_conversation); + /* Load plugins. */ if (!sudo_load_plugins(&policy_plugin, &io_plugins)) sudo_fatalx(U_("fatal error, unable to load plugins")); @@ -262,10 +268,16 @@ usage(1); exit(1); /* plugin printed error message */ } + /* Reset nargv/nargc based on argv_out. */ + /* XXX - leaks old nargv in shell mode */ + 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")); /* Open I/O plugins once policy plugin succeeds. */ TAILQ_FOREACH_SAFE(plugin, &io_plugins, entries, next) { ok = iolog_open(plugin, settings, user_info, - command_info, nargc, nargv, envp); + command_info, nargc, nargv, user_env_out); switch (ok) { case 1: break; @@ -296,17 +308,30 @@ (void) setrlimit(RLIMIT_CORE, &corelimit); #endif /* RLIMIT_CORE */ if (ISSET(command_details.flags, CD_SUDOEDIT)) { - exitcode = sudo_edit(&command_details); + status = sudo_edit(&command_details); } else { - exitcode = run_command(&command_details); + status = run_command(&command_details); } /* The close method was called by sudo_edit/run_command. */ break; default: sudo_fatalx(U_("unexpected sudo mode 0x%x"), sudo_mode); } - sudo_debug_exit_int(__func__, __FILE__, __LINE__, sudo_debug_subsys, exitcode); - exit(exitcode); + + if (WIFSIGNALED(status)) { + sigaction_t sa; + + memset(&sa, 0, sizeof(sa)); + sigemptyset(&sa.sa_mask); + sa.sa_handler = SIG_DFL; + sigaction(SIGINT, &sa, NULL); + sudo_debug_exit_int(__func__, __FILE__, __LINE__, sudo_debug_subsys, + WTERMSIG(status) | 128); + kill(getpid(), WTERMSIG(status)); + } + sudo_debug_exit_int(__func__, __FILE__, __LINE__, sudo_debug_subsys, + WEXITSTATUS(status)); + exit(WEXITSTATUS(status)); } int @@ -316,6 +341,7 @@ #ifdef STATIC_SUDOERS_PLUGIN preload_static_symbols(); #endif + gc_init(); return 0; } @@ -367,7 +393,11 @@ */ ud->ngroups = sudo_conf_max_groups(); if (ud->ngroups > 0) { - ud->groups = sudo_emallocarray(ud->ngroups, sizeof(GETGROUPS_T)); + ud->groups = reallocarray(NULL, ud->ngroups, sizeof(GETGROUPS_T)); + if (ud->groups == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto done; + } /* No error on insufficient space if user specified max_groups. */ (void)getgrouplist(ud->username, ud->gid, ud->groups, &ud->ngroups); rval = 0; @@ -381,11 +411,16 @@ ud->ngroups = system_maxgroups << 1; for (tries = 0; tries < 10 && rval == -1; tries++) { ud->ngroups <<= 1; - sudo_efree(ud->groups); - ud->groups = sudo_emallocarray(ud->ngroups, sizeof(GETGROUPS_T)); + free(ud->groups); + ud->groups = reallocarray(NULL, ud->ngroups, sizeof(GETGROUPS_T)); + if (ud->groups == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto done; + } rval = getgrouplist(ud->username, ud->gid, ud->groups, &ud->ngroups); } } +done: debug_return_int(rval); } @@ -397,10 +432,8 @@ int i, len, maxgroups, group_source; debug_decl(get_user_groups, SUDO_DEBUG_UTIL) -#if defined(HAVE_SYSCONF) && defined(_SC_NGROUPS_MAX) maxgroups = (int)sysconf(_SC_NGROUPS_MAX); if (maxgroups < 0) -#endif maxgroups = NGROUPS_MAX; ud->groups = NULL; @@ -409,9 +442,11 @@ if ((ud->ngroups = getgroups(0, NULL)) > 0) { /* Use groups from kernel if not too many or source is static. */ if (ud->ngroups < maxgroups || group_source == GROUP_SOURCE_STATIC) { - ud->groups = sudo_emallocarray(ud->ngroups, sizeof(GETGROUPS_T)); + ud->groups = reallocarray(NULL, ud->ngroups, sizeof(GETGROUPS_T)); + if (ud->groups == NULL) + goto oom; if (getgroups(ud->ngroups, ud->groups) < 0) { - sudo_efree(ud->groups); + free(ud->groups); ud->groups = NULL; } } @@ -430,16 +465,20 @@ * Format group list as a comma-separated string of gids. */ glsize = sizeof("groups=") - 1 + (ud->ngroups * (MAX_UID_T_LEN + 1)); - gid_list = sudo_emalloc(glsize); + if ((gid_list = malloc(glsize)) == NULL) + goto oom; memcpy(gid_list, "groups=", sizeof("groups=") - 1); cp = gid_list + sizeof("groups=") - 1; for (i = 0; i < ud->ngroups; i++) { - /* XXX - check rval */ len = snprintf(cp, glsize - (cp - gid_list), "%s%u", i ? "," : "", (unsigned int)ud->groups[i]); + if (len <= 0 || (size_t)len >= glsize - (cp - gid_list)) + sudo_fatalx(U_("internal error, %s overflow"), __func__); cp += len; } debug_return_str(gid_list); +oom: + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); } /* @@ -449,13 +488,18 @@ static char ** get_user_info(struct user_details *ud) { - char *cp, **user_info, cwd[PATH_MAX], host[HOST_NAME_MAX + 1]; + char *cp, **user_info, path[PATH_MAX]; + unsigned int i = 0; struct passwd *pw; - int fd, i = 0; + int fd; debug_decl(get_user_info, SUDO_DEBUG_UTIL) + memset(ud, 0, sizeof(*ud)); + /* XXX - bound check number of entries */ - user_info = sudo_emallocarray(32, sizeof(char *)); + user_info = reallocarray(NULL, 32, sizeof(char *)); + if (user_info == NULL) + goto bad; ud->pid = getpid(); ud->ppid = getppid(); @@ -479,60 +523,81 @@ user_info[i] = sudo_new_key_val("user", pw->pw_name); if (user_info[i] == NULL) - sudo_fatal(NULL); + goto bad; ud->username = user_info[i] + sizeof("user=") - 1; /* Stash user's shell for use with the -s flag; don't pass to plugin. */ if ((ud->shell = getenv("SHELL")) == NULL || ud->shell[0] == '\0') { ud->shell = pw->pw_shell[0] ? pw->pw_shell : _PATH_SUDO_BSHELL; } - ud->shell = sudo_estrdup(ud->shell); + if ((ud->shell = strdup(ud->shell)) == NULL) + goto bad; - sudo_easprintf(&user_info[++i], "pid=%d", (int)ud->pid); - sudo_easprintf(&user_info[++i], "ppid=%d", (int)ud->ppid); - sudo_easprintf(&user_info[++i], "pgid=%d", (int)ud->pgid); - sudo_easprintf(&user_info[++i], "tcpgid=%d", (int)ud->tcpgid); - sudo_easprintf(&user_info[++i], "sid=%d", (int)ud->sid); - - sudo_easprintf(&user_info[++i], "uid=%u", (unsigned int)ud->uid); - sudo_easprintf(&user_info[++i], "euid=%u", (unsigned int)ud->euid); - sudo_easprintf(&user_info[++i], "gid=%u", (unsigned int)ud->gid); - sudo_easprintf(&user_info[++i], "egid=%u", (unsigned int)ud->egid); + if (asprintf(&user_info[++i], "pid=%d", (int)ud->pid) == -1) + goto bad; + if (asprintf(&user_info[++i], "ppid=%d", (int)ud->ppid) == -1) + goto bad; + if (asprintf(&user_info[++i], "pgid=%d", (int)ud->pgid) == -1) + goto bad; + if (asprintf(&user_info[++i], "tcpgid=%d", (int)ud->tcpgid) == -1) + goto bad; + if (asprintf(&user_info[++i], "sid=%d", (int)ud->sid) == -1) + goto bad; + if (asprintf(&user_info[++i], "uid=%u", (unsigned int)ud->uid) == -1) + goto bad; + if (asprintf(&user_info[++i], "euid=%u", (unsigned int)ud->euid) == -1) + goto bad; + if (asprintf(&user_info[++i], "gid=%u", (unsigned int)ud->gid) == -1) + goto bad; + if (asprintf(&user_info[++i], "egid=%u", (unsigned int)ud->egid) == -1) + goto bad; if ((cp = get_user_groups(ud)) != NULL) user_info[++i] = cp; - if (getcwd(cwd, sizeof(cwd)) != NULL) { - user_info[++i] = sudo_new_key_val("cwd", cwd); + if (getcwd(path, sizeof(path)) != NULL) { + user_info[++i] = sudo_new_key_val("cwd", path); if (user_info[i] == NULL) - sudo_fatal(NULL); + goto bad; ud->cwd = user_info[i] + sizeof("cwd=") - 1; } - if ((cp = get_process_ttyname()) != NULL) { - user_info[++i] = sudo_new_key_val("tty", cp); + if (get_process_ttyname(path, sizeof(path)) != NULL) { + user_info[++i] = sudo_new_key_val("tty", path); if (user_info[i] == NULL) - sudo_fatal(NULL); + goto bad; ud->tty = user_info[i] + sizeof("tty=") - 1; - sudo_efree(cp); + } else { + /* tty may not always be present */ + if (errno != ENOENT) + goto bad; } - if (gethostname(host, sizeof(host)) == 0) - host[sizeof(host) - 1] = '\0'; - else - strlcpy(host, "localhost", sizeof(host)); - user_info[++i] = sudo_new_key_val("host", host); + cp = sudo_gethostname(); + user_info[++i] = sudo_new_key_val("host", cp ? cp : "localhost"); if (user_info[i] == NULL) - sudo_fatal(NULL); + goto bad; ud->host = user_info[i] + sizeof("host=") - 1; + free(cp); sudo_get_ttysize(&ud->ts_lines, &ud->ts_cols); - sudo_easprintf(&user_info[++i], "lines=%d", ud->ts_lines); - sudo_easprintf(&user_info[++i], "cols=%d", ud->ts_cols); + if (asprintf(&user_info[++i], "lines=%d", ud->ts_lines) == -1) + goto bad; + if (asprintf(&user_info[++i], "cols=%d", ud->ts_cols) == -1) + goto bad; user_info[++i] = NULL; + /* Add to list of vectors to be garbage collected at exit. */ + if (!gc_add(GC_VECTOR, user_info)) + goto bad; + debug_return_ptr(user_info); +bad: + while (i--) + free(user_info[i]); + free(user_info); + debug_return_ptr(NULL); } /* @@ -549,6 +614,8 @@ memset(details, 0, sizeof(*details)); details->closefrom = -1; + details->execfd = -1; + details->flags = CD_SUDOEDIT_CHECKDIR; TAILQ_INIT(&details->preserved_fds); #define SET_STRING(s, n) \ @@ -556,6 +623,22 @@ details->n = info[i] + sizeof(s) - 1; \ break; \ } +#define SET_FLAG(s, n) \ + if (strncmp(s, info[i], sizeof(s) - 1) == 0) { \ + switch (sudo_strtobool(info[i] + sizeof(s) - 1)) { \ + case true: \ + SET(details->flags, n); \ + break; \ + case false: \ + CLR(details->flags, n); \ + break; \ + default: \ + sudo_debug_printf(SUDO_DEBUG_ERROR, \ + "invalid boolean value for %s", info[i]); \ + break; \ + } \ + break; \ + } sudo_debug_printf(SUDO_DEBUG_INFO, "command info from plugin:"); for (i = 0; info[i] != NULL; i++) { @@ -574,9 +657,20 @@ } break; case 'e': - if (strncmp("exec_background=", info[i], sizeof("exec_background=") - 1) == 0) { - if (sudo_strtobool(info[i] + sizeof("exec_background=") - 1) == true) - SET(details->flags, CD_EXEC_BG); + SET_FLAG("exec_background=", CD_EXEC_BG) + if (strncmp("execfd=", info[i], sizeof("execfd=") - 1) == 0) { + cp = info[i] + sizeof("execfd=") - 1; + details->execfd = strtonum(cp, 0, INT_MAX, &errstr); + if (errstr != NULL) + sudo_fatalx(U_("%s: %s"), info[i], U_(errstr)); +#ifdef HAVE_FEXECVE + /* Must keep fd open during exec. */ + add_preserved_fd(&details->preserved_fds, details->execfd); +#else + /* Plugin thinks we support fexecve() but we don't. */ + fcntl(details->execfd, F_SETFD, FD_CLOEXEC); + details->execfd = -1; +#endif break; } break; @@ -592,18 +686,10 @@ SET(details->flags, CD_SET_PRIORITY); break; } - if (strncmp("noexec=", info[i], sizeof("noexec=") - 1) == 0) { - if (sudo_strtobool(info[i] + sizeof("noexec=") - 1) == true) - SET(details->flags, CD_NOEXEC); - break; - } + SET_FLAG("noexec=", CD_NOEXEC) break; case 'p': - if (strncmp("preserve_groups=", info[i], sizeof("preserve_groups=") - 1) == 0) { - if (sudo_strtobool(info[i] + sizeof("preserve_groups=") - 1) == true) - SET(details->flags, CD_PRESERVE_GROUPS); - break; - } + SET_FLAG("preserve_groups=", CD_PRESERVE_GROUPS) if (strncmp("preserve_fds=", info[i], sizeof("preserve_fds=") - 1) == 0) { parse_preserved_fds(&details->preserved_fds, info[i] + sizeof("preserve_fds=") - 1); @@ -681,16 +767,10 @@ case 's': SET_STRING("selinux_role=", selinux_role) SET_STRING("selinux_type=", selinux_type) - if (strncmp("set_utmp=", info[i], sizeof("set_utmp=") - 1) == 0) { - if (sudo_strtobool(info[i] + sizeof("set_utmp=") - 1) == true) - SET(details->flags, CD_SET_UTMP); - break; - } - if (strncmp("sudoedit=", info[i], sizeof("sudoedit=") - 1) == 0) { - if (sudo_strtobool(info[i] + sizeof("sudoedit=") - 1) == true) - SET(details->flags, CD_SUDOEDIT); - break; - } + SET_FLAG("set_utmp=", CD_SET_UTMP) + SET_FLAG("sudoedit=", CD_SUDOEDIT) + SET_FLAG("sudoedit_checkdir=", CD_SUDOEDIT_CHECKDIR) + SET_FLAG("sudoedit_follow=", CD_SUDOEDIT_FOLLOW) break; case 't': if (strncmp("timeout=", info[i], sizeof("timeout=") - 1) == 0) { @@ -711,11 +791,7 @@ SET(details->flags, CD_SET_UMASK); break; } - if (strncmp("use_pty=", info[i], sizeof("use_pty=") - 1) == 0) { - if (sudo_strtobool(info[i] + sizeof("use_pty=") - 1) == true) - SET(details->flags, CD_USE_PTY); - break; - } + SET_FLAG("use_pty=", CD_USE_PTY) SET_STRING("utmp_user=", utmp_user) break; } @@ -727,11 +803,11 @@ details->egid = details->gid; #ifdef HAVE_SETAUTHDB - aix_setauthdb(IDtouser(details->euid)); + aix_setauthdb(IDtouser(details->euid), NULL); #endif details->pw = getpwuid(details->euid); if (details->pw != NULL && (details->pw = pw_dup(details->pw)) == NULL) - sudo_fatal(NULL); + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); #ifdef HAVE_SETAUTHDB aix_restoreauthdb(); #endif @@ -757,14 +833,14 @@ if (!qualified) { char *path = getenv_unhooked("PATH"); if (path != NULL) { - int len; - char *cp, *colon; + const char *cp, *ep; + const char *pathend = path + strlen(path); + + for (cp = sudo_strsplit(path, pathend, ":", &ep); cp != NULL; + cp = sudo_strsplit(NULL, pathend, ":", &ep)) { - cp = path = sudo_estrdup(path); - do { - if ((colon = strchr(cp, ':'))) - *colon = '\0'; - len = snprintf(pathbuf, sizeof(pathbuf), "%s/%s", cp, sudo); + int len = snprintf(pathbuf, sizeof(pathbuf), "%.*s/%s", + (int)(ep - cp), cp, sudo); if (len <= 0 || (size_t)len >= sizeof(pathbuf)) continue; if (access(pathbuf, X_OK) == 0) { @@ -772,9 +848,7 @@ qualified = true; break; } - cp = colon + 1; - } while (colon); - sudo_efree(path); + } } } @@ -835,12 +909,13 @@ struct rlimit rl; debug_decl(unlimit_nproc, SUDO_DEBUG_UTIL) - (void) getrlimit(RLIMIT_NPROC, &nproclimit); + if (getrlimit(RLIMIT_NPROC, &nproclimit) != 0) + sudo_warn("getrlimit"); rl.rlim_cur = rl.rlim_max = RLIM_INFINITY; if (setrlimit(RLIMIT_NPROC, &rl) != 0) { - memcpy(&rl, &nproclimit, sizeof(struct rlimit)); - rl.rlim_cur = rl.rlim_max; - (void)setrlimit(RLIMIT_NPROC, &rl); + rl.rlim_cur = rl.rlim_max = nproclimit.rlim_max; + if (setrlimit(RLIMIT_NPROC, &rl) != 0) + sudo_warn("setrlimit"); } debug_return; #endif /* __linux__ */ @@ -855,7 +930,8 @@ #ifdef __linux__ debug_decl(restore_nproc, SUDO_DEBUG_UTIL) - (void) setrlimit(RLIMIT_NPROC, &nproclimit); + if (setrlimit(RLIMIT_NPROC, &nproclimit) != 0) + sudo_warn("setrlimit"); debug_return; #endif /* __linux__ */ @@ -986,10 +1062,10 @@ */ unlimit_nproc(); -#ifdef HAVE_SETRESUID +#if defined(HAVE_SETRESUID) if (setresuid(details->uid, details->euid, details->euid) != 0) { - sudo_warn(U_("unable to change to runas uid (%u, %u)"), details->uid, - details->euid); + sudo_warn(U_("unable to change to runas uid (%u, %u)"), + (unsigned int)details->uid, (unsigned int)details->euid); goto done; } #elif defined(HAVE_SETREUID) @@ -999,9 +1075,10 @@ goto done; } #else - if (seteuid(details->euid) != 0 || setuid(details->euid) != 0) { - sudo_warn(U_("unable to change to runas uid (%u, %u)"), details->uid, - details->euid); + /* Cannot support real user ID that is different from effective user ID. */ + if (setuid(details->euid) != 0) { + sudo_warn(U_("unable to change to runas uid (%u, %u)"), + (unsigned int)details->euid, (unsigned int)details->euid); goto done; } #endif /* !HAVE_SETRESUID && !HAVE_SETREUID */ @@ -1038,7 +1115,7 @@ { struct plugin_container *plugin; struct command_status cstat; - int exitcode = 1; + int status = 1; debug_decl(run_command, SUDO_DEBUG_EXEC) cstat.type = CMD_INVALID; @@ -1057,32 +1134,29 @@ "calling I/O close with errno %d", cstat.val); iolog_close(plugin, 0, cstat.val); } - exitcode = 1; + status = 1; break; case CMD_WSTATUS: /* Command ran, exited or was killed. */ - if (WIFEXITED(cstat.val)) - exitcode = WEXITSTATUS(cstat.val); - else if (WIFSIGNALED(cstat.val)) - exitcode = WTERMSIG(cstat.val) | 128; + status = cstat.val; #ifdef HAVE_SELINUX if (ISSET(details->flags, CD_SUDOEDIT_COPY)) break; #endif sudo_debug_printf(SUDO_DEBUG_DEBUG, - "calling policy close with wait status %d", cstat.val); - policy_close(&policy_plugin, cstat.val, 0); + "calling policy close with wait status %d", status); + policy_close(&policy_plugin, status, 0); TAILQ_FOREACH(plugin, &io_plugins, entries) { sudo_debug_printf(SUDO_DEBUG_DEBUG, - "calling I/O close with wait status %d", cstat.val); - iolog_close(plugin, cstat.val, 0); + "calling I/O close with wait status %d", status); + iolog_close(plugin, status, 0); } break; default: sudo_warnx(U_("unexpected child termination condition: %d"), cstat.type); break; } - debug_return_int(exitcode); + debug_return_int(status); } /* @@ -1093,13 +1167,13 @@ format_plugin_settings(struct plugin_container *plugin, struct sudo_settings *sudo_settings) { - size_t plugin_settings_size, num_plugin_settings = 0; + size_t plugin_settings_size; struct sudo_debug_file *debug_file; struct sudo_settings *setting; char **plugin_settings; + unsigned int i = 0; debug_decl(format_plugin_settings, SUDO_DEBUG_PCOMM) - /* XXX - should use exact plugin_settings_size */ /* Determine sudo_settings array size (including plugin_path and NULL) */ plugin_settings_size = 2; for (setting = sudo_settings; setting->name != NULL; setting++) @@ -1110,30 +1184,42 @@ } /* Allocate and fill in. */ - plugin_settings = sudo_emallocarray(plugin_settings_size, sizeof(char *)); - plugin_settings[num_plugin_settings++] = - sudo_new_key_val("plugin_path", plugin->path); + plugin_settings = reallocarray(NULL, plugin_settings_size, sizeof(char *)); + if (plugin_settings == NULL) + goto bad; + plugin_settings[i] = sudo_new_key_val("plugin_path", plugin->path); + if (plugin_settings[i] == NULL) + goto bad; for (setting = sudo_settings; setting->name != NULL; setting++) { if (setting->value != NULL) { sudo_debug_printf(SUDO_DEBUG_INFO, "settings: %s=%s", setting->name, setting->value); - plugin_settings[num_plugin_settings] = + plugin_settings[++i] = sudo_new_key_val(setting->name, setting->value); - if (plugin_settings[num_plugin_settings] == NULL) - sudo_fatal(NULL); - num_plugin_settings++; + if (plugin_settings[i] == NULL) + goto bad; } } if (plugin->debug_files != NULL) { TAILQ_FOREACH(debug_file, plugin->debug_files, entries) { /* XXX - quote filename? */ - sudo_easprintf(&plugin_settings[num_plugin_settings++], - "debug_flags=%s %s", debug_file->debug_file, debug_file->debug_flags); + if (asprintf(&plugin_settings[++i], "debug_flags=%s %s", + debug_file->debug_file, debug_file->debug_flags) == -1) + goto bad; } } - plugin_settings[num_plugin_settings] = NULL; + plugin_settings[++i] = NULL; + + /* Add to list of vectors to be garbage collected at exit. */ + if (!gc_add(GC_VECTOR, plugin_settings)) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); debug_return_ptr(plugin_settings); +bad: + while (i--) + free(plugin_settings[i]); + free(plugin_settings); + debug_return_ptr(NULL); } static int @@ -1146,8 +1232,10 @@ /* Convert struct sudo_settings to plugin_settings[] */ plugin_settings = format_plugin_settings(plugin, settings); - if (plugin_settings == NULL) - debug_return_bool(-1); + if (plugin_settings == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_int(-1); + } /* * Backwards compatibility for older API versions @@ -1157,7 +1245,7 @@ case SUDO_API_MKVERSION(1, 0): case SUDO_API_MKVERSION(1, 1): rval = plugin->u.policy_1_0->open(plugin->u.io_1_0->version, - sudo_conversation, sudo_conversation_printf, plugin_settings, + sudo_conversation_1_7, sudo_conversation_printf, plugin_settings, user_info, user_env); break; default: @@ -1170,7 +1258,7 @@ plugin->debug_instance = sudo_debug_get_active_instance(); sudo_debug_set_active_instance(sudo_debug_instance); - debug_return_bool(rval); + debug_return_int(rval); } static void @@ -1195,11 +1283,11 @@ debug_decl(policy_show_version, SUDO_DEBUG_PCOMM) if (plugin->u.policy->show_version == NULL) - debug_return_bool(true); + debug_return_int(true); sudo_debug_set_active_instance(plugin->debug_instance); rval = plugin->u.policy->show_version(verbose); sudo_debug_set_active_instance(sudo_debug_instance); - debug_return_bool(rval); + debug_return_int(rval); } static int @@ -1218,7 +1306,7 @@ rval = plugin->u.policy->check_policy(argc, argv, env_add, command_info, argv_out, user_env_out); sudo_debug_set_active_instance(sudo_debug_instance); - debug_return_bool(rval); + debug_return_int(rval); } static int @@ -1231,12 +1319,12 @@ if (plugin->u.policy->list == NULL) { sudo_warnx(U_("policy plugin %s does not support listing privileges"), plugin->name); - debug_return_bool(false); + debug_return_int(false); } sudo_debug_set_active_instance(plugin->debug_instance); rval = plugin->u.policy->list(argc, argv, verbose, list_user); sudo_debug_set_active_instance(sudo_debug_instance); - debug_return_bool(rval); + debug_return_int(rval); } static int @@ -1248,12 +1336,12 @@ if (plugin->u.policy->validate == NULL) { sudo_warnx(U_("policy plugin %s does not support the -v option"), plugin->name); - debug_return_bool(false); + debug_return_int(false); } sudo_debug_set_active_instance(plugin->debug_instance); rval = plugin->u.policy->validate(); sudo_debug_set_active_instance(sudo_debug_instance); - debug_return_bool(rval); + debug_return_int(rval); } static void @@ -1292,7 +1380,7 @@ } sudo_debug_set_active_instance(sudo_debug_instance); } - debug_return_bool(rval); + debug_return_int(rval); } static int @@ -1306,8 +1394,10 @@ /* Convert struct sudo_settings to plugin_settings[] */ plugin_settings = format_plugin_settings(plugin, settings); - if (plugin_settings == NULL) - debug_return_bool(-1); + if (plugin_settings == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_int(-1); + } /* * Backwards compatibility for older API versions @@ -1316,12 +1406,12 @@ switch (plugin->u.generic->version) { case SUDO_API_MKVERSION(1, 0): rval = plugin->u.io_1_0->open(plugin->u.io_1_0->version, - sudo_conversation, sudo_conversation_printf, plugin_settings, + sudo_conversation_1_7, sudo_conversation_printf, plugin_settings, user_info, argc, argv, user_env); break; case SUDO_API_MKVERSION(1, 1): rval = plugin->u.io_1_1->open(plugin->u.io_1_1->version, - sudo_conversation, sudo_conversation_printf, plugin_settings, + sudo_conversation_1_7, sudo_conversation_printf, plugin_settings, user_info, command_info, argc, argv, user_env); break; default: @@ -1330,7 +1420,7 @@ argc, argv, user_env, plugin->options); } sudo_debug_set_active_instance(sudo_debug_instance); - debug_return_bool(rval); + debug_return_int(rval); } static void @@ -1353,12 +1443,12 @@ debug_decl(iolog_show_version, SUDO_DEBUG_PCOMM) if (plugin->u.io->show_version == NULL) - debug_return_bool(true); + debug_return_int(true); sudo_debug_set_active_instance(plugin->debug_instance); rval = plugin->u.io->show_version(verbose); sudo_debug_set_active_instance(sudo_debug_instance); - debug_return_bool(rval); + debug_return_int(rval); } /* @@ -1381,7 +1471,91 @@ } /* Remove from io_plugins list and free. */ TAILQ_REMOVE(&io_plugins, plugin, entries); - sudo_efree(plugin); + free(plugin->path); + free(plugin); debug_return; } + +static bool +gc_add(enum sudo_gc_types type, void *v) +{ +#ifdef NO_LEAKS + struct sudo_gc_entry *gc; + debug_decl(gc_add, SUDO_DEBUG_MAIN) + + if (v == NULL) + debug_return_bool(false); + + gc = calloc(1, sizeof(*gc)); + if (gc == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_bool(false); + } + switch (type) { + case GC_PTR: + gc->u.ptr = v; + break; + case GC_VECTOR: + gc->u.vec = v; + break; + default: + free(gc); + sudo_warnx("unexpected garbage type %d", type); + debug_return_bool(false); + } + gc->type = type; + SLIST_INSERT_HEAD(&sudo_gc_list, gc, entries); + debug_return_bool(true); +#else + return true; +#endif /* NO_LEAKS */ +} + +#ifdef NO_LEAKS +static void +gc_run(void) +{ + struct plugin_container *plugin; + struct sudo_gc_entry *gc; + char **cur; + debug_decl(gc_run, SUDO_DEBUG_MAIN) + + /* Collect garbage. */ + while ((gc = SLIST_FIRST(&sudo_gc_list))) { + SLIST_REMOVE_HEAD(&sudo_gc_list, entries); + switch (gc->type) { + case GC_PTR: + free(gc->u.ptr); + free(gc); + break; + case GC_VECTOR: + for (cur = gc->u.vec; *cur != NULL; cur++) + free(*cur); + free(gc->u.vec); + free(gc); + break; + default: + sudo_warnx("unexpected garbage type %d", gc->type); + } + } + + /* Free plugin structs. */ + free(policy_plugin.path); + while ((plugin = TAILQ_FIRST(&io_plugins))) { + TAILQ_REMOVE(&io_plugins, plugin, entries); + free(plugin->path); + free(plugin); + } + + debug_return; +} +#endif /* NO_LEAKS */ + +static void +gc_init(void) +{ +#ifdef NO_LEAKS + atexit(gc_run); +#endif +} diff -Nru sudo-1.8.12/src/sudo_edit.c sudo-1.8.16/src/sudo_edit.c --- sudo-1.8.12/src/sudo_edit.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/src/sudo_edit.c 2016-03-17 16:13:10.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004-2008, 2010-2015 Todd C. Miller + * Copyright (c) 2004-2008, 2010-2016 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 @@ -22,24 +22,16 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include +#include #include #include #include @@ -63,8 +55,8 @@ struct tempfile { char *tfile; char *ofile; - struct timeval omtim; off_t osize; + struct timespec omtim; }; static char edit_tmpdir[MAX(sizeof(_PATH_VARTMP), sizeof(_PATH_TMP))]; @@ -141,7 +133,7 @@ sudo_edit_mktemp(const char *ofile, char **tfile) { const char *cp, *suff; - int tfd; + int len, tfd; debug_decl(sudo_edit_mktemp, SUDO_DEBUG_EDIT) if ((cp = strrchr(ofile, '/')) != NULL) @@ -150,17 +142,337 @@ cp = ofile; suff = strrchr(cp, '.'); if (suff != NULL) { - sudo_easprintf(tfile, "%s/%.*sXXXXXXXX%s", edit_tmpdir, + len = asprintf(tfile, "%s/%.*sXXXXXXXX%s", edit_tmpdir, (int)(size_t)(suff - cp), cp, suff); } else { - sudo_easprintf(tfile, "%s/%s.XXXXXXXX", edit_tmpdir, cp); + len = asprintf(tfile, "%s/%s.XXXXXXXX", edit_tmpdir, cp); } + if (len == -1) + sudo_fatalx(U_("%s: %s"), __func__, U_("unable to allocate memory")); tfd = mkstemps(*tfile, suff ? strlen(suff) : 0); sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "%s -> %s, fd %d", ofile, *tfile, tfd); debug_return_int(tfd); } +#ifndef HAVE_OPENAT +static int +sudo_openat(int dfd, const char *path, int flags, mode_t mode) +{ + int fd, odfd; + debug_decl(sudo_openat, SUDO_DEBUG_EDIT) + + if (dfd == AT_FDCWD) + debug_return_int(open(path, flags, mode)); + + /* Save cwd */ + if ((odfd = open(".", O_RDONLY)) == -1) + debug_return_int(-1); + + if (fchdir(dfd) == -1) { + close(odfd); + debug_return_int(-1); + } + + fd = open(path, flags, mode); + + /* Restore cwd */ + if (fchdir(odfd) == -1) + sudo_fatal(_("unable to restore current working directory")); + close(odfd); + + debug_return_int(fd); +} +#define openat sudo_openat +#endif /* HAVE_OPENAT */ + +#ifdef O_NOFOLLOW +static int +sudo_edit_openat_nofollow(int dfd, char *path, int oflags, mode_t mode) +{ + debug_decl(sudo_edit_open_nofollow, SUDO_DEBUG_EDIT) + + debug_return_int(openat(dfd, path, oflags|O_NOFOLLOW, mode)); +} +#else +/* + * Returns true if fd and path don't match or path is a symlink. + * Used on older systems without O_NOFOLLOW. + */ +static bool +sudo_edit_is_symlink(int fd, char *path) +{ + struct stat sb1, sb2; + debug_decl(sudo_edit_is_symlink, SUDO_DEBUG_EDIT) + + /* + * Treat [fl]stat() failure like there was a symlink. + */ + if (fstat(fd, &sb1) == -1 || lstat(path, &sb2) == -1) + debug_return_bool(true); + + /* + * Make sure we did not open a link and that what we opened + * matches what is currently on the file system. + */ + if (S_ISLNK(sb2.st_mode) || + sb1.st_dev != sb2.st_dev || sb1.st_ino != sb2.st_ino) { + debug_return_bool(true); + } + + debug_return_bool(false); +} + +static int +sudo_edit_openat_nofollow(int dfd, char *path, int oflags, mode_t mode) +{ + struct stat sb1, sb2; + int fd; + debug_decl(sudo_edit_openat_nofollow, SUDO_DEBUG_EDIT) + + fd = openat(dfd, path, oflags, mode); + if (fd == -1) + debug_return_int(-1); + + if (sudo_edit_is_symlink(fd, path)) { + close(fd); + fd = -1; + errno = ELOOP; + } + + debug_return_int(fd); +} +#endif /* O_NOFOLLOW */ + +#ifdef HAVE_FACCESSAT +/* + * Returns true if the open directory fd is writable by the user. + */ +static int +dir_is_writable(int dfd, struct user_details *ud, struct command_details *cd) +{ + debug_decl(dir_is_writable, SUDO_DEBUG_EDIT) + int rc; + + /* Change uid/gid/groups to invoking user, usually needs root perms. */ + if (cd->euid != ROOT_UID) { + if (seteuid(ROOT_UID) != 0) + sudo_fatal("seteuid(ROOT_UID)"); + } + switch_user(ud->uid, ud->gid, ud->ngroups, ud->groups); + + /* Access checks are done using the euid/egid and group vector. */ + rc = faccessat(dfd, ".", W_OK, AT_EACCESS); + + /* Change uid/gid/groups back to target user, may need root perms. */ + if (ud->uid != ROOT_UID) { + if (seteuid(ROOT_UID) != 0) + sudo_fatal("seteuid(ROOT_UID)"); + } + switch_user(cd->euid, cd->egid, cd->ngroups, cd->groups); + + if (rc == 0) + debug_return_int(true); + if (errno == EACCES) + debug_return_int(false); + debug_return_int(-1); +} +#else +static bool +group_matches(gid_t target, gid_t gid, int ngroups, GETGROUPS_T *groups) +{ + int i; + debug_decl(group_matches, SUDO_DEBUG_EDIT) + + if (target == gid) { + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "user gid %u matches directory gid %u", (unsigned int)gid, + (unsigned int)target); + debug_return_bool(true); + } + for (i = 0; i < ngroups; i++) { + if (target == groups[i]) { + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "user gid %u matches directory gid %u", (unsigned int)gid, + (unsigned int)target); + debug_return_bool(true); + } + } + debug_return_bool(false); +} + +/* + * Returns true if the open directory fd is writable by the user. + */ +static int +dir_is_writable(int dfd, struct user_details *ud, struct command_details *cd) +{ + struct stat sb; + debug_decl(dir_is_writable, SUDO_DEBUG_EDIT) + + if (fstat(dfd, &sb) == -1) + debug_return_int(-1); + + /* If the user owns the dir we always consider it writable. */ + if (sb.st_uid == ud->uid) { + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "user uid %u matches directory uid %u", (unsigned int)ud->uid, + (unsigned int)sb.st_uid); + debug_return_int(true); + } + + /* Other writable? */ + if (ISSET(sb.st_mode, S_IWOTH)) { + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "directory is writable by other"); + debug_return_int(true); + } + + /* Group writable? */ + if (ISSET(sb.st_mode, S_IWGRP)) { + if (group_matches(sb.st_gid, ud->gid, ud->ngroups, ud->groups)) { + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "directory is writable by one of the user's groups"); + debug_return_int(true); + } + } + + errno = EACCES; + debug_return_int(false); +} +#endif /* HAVE_FACCESSAT */ + +/* + * Directory open flags for use with openat(2). + * Use O_SEARCH/O_PATH and/or O_DIRECTORY where possible. + */ +#if defined(O_SEARCH) +# define DIR_OPEN_FLAGS (O_SEARCH|O_DIRECTORY) +#elif defined(O_PATH) +# define DIR_OPEN_FLAGS (O_PATH|O_DIRECTORY) +#elif defined(O_DIRECTORY) +# define DIR_OPEN_FLAGS (O_RDONLY|O_DIRECTORY) +#else +# define DIR_OPEN_FLAGS (O_RDONLY|O_NONBLOCK) +#endif + +static int +sudo_edit_open_nonwritable(char *path, int oflags, mode_t mode, + struct command_details *command_details) +{ + const int dflags = DIR_OPEN_FLAGS; + int dfd, fd, is_writable; + debug_decl(sudo_edit_open_nonwritable, SUDO_DEBUG_EDIT) + + if (path[0] == '/') { + dfd = open("/", dflags); + path++; + } else { + dfd = open(".", dflags); + if (path[0] == '.' && path[1] == '/') + path += 2; + } + if (dfd == -1) + debug_return_int(-1); + + for (;;) { + char *slash; + int subdfd; + + /* + * Look up one component at a time, avoiding symbolic links in + * writable directories. + */ + is_writable = dir_is_writable(dfd, &user_details, command_details); + if (is_writable == -1) + debug_return_int(-1); + + while (path[0] == '/') + path++; + slash = strchr(path, '/'); + if (slash == NULL) + break; + *slash = '\0'; + if (is_writable) + subdfd = sudo_edit_openat_nofollow(dfd, path, dflags, 0); + else + subdfd = openat(dfd, path, dflags, 0); + *slash = '/'; /* restore path */ + close(dfd); + if (subdfd == -1) + debug_return_int(-1); + path = slash + 1; + dfd = subdfd; + } + + if (is_writable) { + close(dfd); + errno = EISDIR; + debug_return_int(-1); + } + + /* + * For "sudoedit /" we will receive ENOENT from openat() and sudoedit + * will try to create a file with an empty name. We treat an empty + * path as the cwd so sudoedit can give a sensible error message. + */ + fd = openat(dfd, *path ? path : ".", oflags, mode); + close(dfd); + debug_return_int(fd); +} + +#ifdef O_NOFOLLOW +static int +sudo_edit_open(char *path, int oflags, mode_t mode, + struct command_details *command_details) +{ + const int sflags = command_details ? command_details->flags : 0; + int fd; + debug_decl(sudo_edit_open, SUDO_DEBUG_EDIT) + + if (!ISSET(sflags, CD_SUDOEDIT_FOLLOW)) + oflags |= O_NOFOLLOW; + if (ISSET(sflags, CD_SUDOEDIT_CHECKDIR) && user_details.uid != ROOT_UID) { + fd = sudo_edit_open_nonwritable(path, oflags|O_NONBLOCK, mode, + command_details); + } else { + fd = open(path, oflags|O_NONBLOCK, mode); + } + if (fd != -1 && !ISSET(oflags, O_NONBLOCK)) + (void) fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) & ~O_NONBLOCK); + debug_return_int(fd); +} +#else +static int +sudo_edit_open(char *path, int oflags, mode_t mode, + struct command_details *command_details) +{ + const int sflags = command_details ? command_details->flags : 0; + struct stat sb1, sb2; + int fd; + debug_decl(sudo_edit_open, SUDO_DEBUG_EDIT) + + if (ISSET(sflags, CD_SUDOEDIT_CHECKDIR) && user_details.uid != ROOT_UID) { + fd = sudo_edit_open_nonwritable(path, oflags|O_NONBLOCK, mode, + command_details); + } else { + fd = open(path, oflags|O_NONBLOCK, mode); + } + if (fd == -1) + debug_return_int(-1); + if (!ISSET(oflags, O_NONBLOCK)) + (void) fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) & ~O_NONBLOCK); + + if (!ISSET(sflags, CD_SUDOEDIT_FOLLOW) && sudo_edit_is_symlink(fd, path)) { + close(fd); + fd = -1; + errno = ELOOP; + } + + debug_return_int(fd); +} +#endif /* O_NOFOLLOW */ + /* * Create temporary copies of files[] and store the temporary path name * along with the original name, size and mtime in tf. @@ -169,12 +481,12 @@ */ static int sudo_edit_create_tfiles(struct command_details *command_details, - struct tempfile *tf, char * const files[], int nfiles) + struct tempfile *tf, char *files[], int nfiles) { int i, j, tfd, ofd, rc; char buf[BUFSIZ]; ssize_t nwritten, nread; - struct timeval times[2]; + struct timespec times[2]; struct stat sb; debug_decl(sudo_edit_create_tfiles, SUDO_DEBUG_EDIT) @@ -186,28 +498,53 @@ rc = -1; switch_user(command_details->euid, command_details->egid, command_details->ngroups, command_details->groups); - if ((ofd = open(files[i], O_RDONLY, 0644)) != -1 || errno == ENOENT) { + ofd = sudo_edit_open(files[i], O_RDONLY, 0644, command_details); + if (ofd != -1 || errno == ENOENT) { if (ofd == -1) { - memset(&sb, 0, sizeof(sb)); /* new file */ - rc = 0; + /* New file, verify parent dir exists unless in cwd. */ + char *slash = strrchr(files[i], '/'); + if (slash != NULL && slash != files[i]) { + int serrno = errno; + *slash = '\0'; + if (stat(files[i], &sb) == 0 && S_ISDIR(sb.st_mode)) { + memset(&sb, 0, sizeof(sb)); + rc = 0; + } + *slash = '/'; + errno = serrno; + } else { + memset(&sb, 0, sizeof(sb)); + rc = 0; + } } else { rc = fstat(ofd, &sb); } } switch_user(ROOT_UID, user_details.egid, user_details.ngroups, user_details.groups); - if (rc || (ofd != -1 && !S_ISREG(sb.st_mode))) { - if (rc) + if (ofd != -1 && !S_ISREG(sb.st_mode)) { + sudo_warnx(U_("%s: not a regular file"), files[i]); + close(ofd); + continue; + } + if (rc == -1) { + /* open() or fstat() error. */ + if (ofd == -1 && errno == ELOOP) { + sudo_warnx(U_("%s: editing symbolic links is not permitted"), + files[i]); + } else if (ofd == -1 && errno == EISDIR) { + sudo_warnx(U_("%s: editing files in a writable directory is not permitted"), + files[i]); + } else { sudo_warn("%s", files[i]); - else - sudo_warnx(U_("%s: not a regular file"), files[i]); + } if (ofd != -1) close(ofd); continue; } tf[j].ofile = files[i]; tf[j].osize = sb.st_size; - mtim_get(&sb, &tf[j].omtim); + mtim_get(&sb, tf[j].omtim); sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "seteuid(%u)", user_details.uid); if (seteuid(user_details.uid) != 0) @@ -239,19 +576,18 @@ * We always update the stashed mtime because the time * resolution of the filesystem the temporary file is on may * not match that of the filesystem where the file to be edited - * resides. It is OK if futimes() fails since we only use the + * resides. It is OK if futimens() fails since we only use the * info to determine whether or not a file has been modified. */ times[0].tv_sec = times[1].tv_sec = tf[j].omtim.tv_sec; - times[0].tv_usec = times[1].tv_usec = tf[j].omtim.tv_usec; -#ifdef HAVE_FUTIMES - (void) futimes(tfd, times); -#else - (void) utimes(tf[j].tfile, times); -#endif + times[0].tv_nsec = times[1].tv_nsec = tf[j].omtim.tv_nsec; + if (futimens(tfd, times) == -1) { + if (utimensat(AT_FDCWD, tf[j].tfile, times, 0) == -1) + sudo_warn("%s", tf[j].tfile); + } rc = fstat(tfd, &sb); if (!rc) - mtim_get(&sb, &tf[j].omtim); + mtim_get(&sb, tf[j].omtim); close(tfd); j++; } @@ -264,12 +600,12 @@ */ static int sudo_edit_copy_tfiles(struct command_details *command_details, - struct tempfile *tf, int nfiles, struct timeval *times) + struct tempfile *tf, int nfiles, struct timespec *times) { int i, tfd, ofd, rc, errors = 0; char buf[BUFSIZ]; ssize_t nwritten, nread; - struct timeval tv; + struct timespec ts; struct stat sb; debug_decl(sudo_edit_copy_tfiles, SUDO_DEBUG_EDIT) @@ -280,9 +616,9 @@ "seteuid(%u)", user_details.uid); if (seteuid(user_details.uid) != 0) sudo_fatal("seteuid(%d)", (int)user_details.uid); - if ((tfd = open(tf[i].tfile, O_RDONLY, 0644)) != -1) { + tfd = sudo_edit_open(tf[i].tfile, O_RDONLY, 0644, NULL); + if (tfd != -1) rc = fstat(tfd, &sb); - } sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, "seteuid(%u)", ROOT_UID); if (seteuid(ROOT_UID) != 0) @@ -298,13 +634,13 @@ errors++; continue; } - mtim_get(&sb, &tv); - if (tf[i].osize == sb.st_size && sudo_timevalcmp(&tf[i].omtim, &tv, ==)) { + mtim_get(&sb, ts); + if (tf[i].osize == sb.st_size && sudo_timespeccmp(&tf[i].omtim, &ts, ==)) { /* * If mtime and size match but the user spent no measurable * time in the editor we can't tell if the file was changed. */ - if (sudo_timevalcmp(×[0], ×[1], !=)) { + if (sudo_timespeccmp(×[0], ×[1], !=)) { sudo_warnx(U_("%s unchanged"), tf[i].ofile); unlink(tf[i].tfile); close(tfd); @@ -314,7 +650,8 @@ } switch_user(command_details->euid, command_details->egid, command_details->ngroups, command_details->groups); - ofd = open(tf[i].ofile, O_WRONLY|O_TRUNC|O_CREAT, 0644); + ofd = sudo_edit_open(tf[i].ofile, O_WRONLY|O_TRUNC|O_CREAT, 0644, + command_details); switch_user(ROOT_UID, user_details.egid, user_details.ngroups, user_details.groups); if (ofd == -1) { @@ -352,7 +689,7 @@ #ifdef HAVE_SELINUX static int selinux_edit_create_tfiles(struct command_details *command_details, - struct tempfile *tf, char * const files[], int nfiles) + struct tempfile *tf, char *files[], int nfiles) { char **sesh_args, **sesh_ap; int i, rc, sesh_nargs; @@ -373,10 +710,16 @@ command_details->command = _PATH_SUDO_SESH; command_details->flags |= CD_SUDOEDIT_COPY; - sesh_nargs = 3 + (nfiles * 2) + 1; - sesh_args = sesh_ap = sudo_emallocarray(sesh_nargs, sizeof(char *)); + sesh_nargs = 4 + (nfiles * 2) + 1; + sesh_args = sesh_ap = reallocarray(NULL, sesh_nargs, sizeof(char *)); + if (sesh_args == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_int(-1); + } *sesh_ap++ = "sesh"; *sesh_ap++ = "-e"; + if (!ISSET(command_details->flags, CD_SUDOEDIT_FOLLOW)) + *sesh_ap++ = "-h"; *sesh_ap++ = "0"; for (i = 0; i < nfiles; i++) { @@ -387,7 +730,7 @@ if (stat(ofile, &sb) == -1) memset(&sb, 0, sizeof(sb)); /* new file */ tf[i].osize = sb.st_size; - mtim_get(&sb, &tf[i].omtim); + mtim_get(&sb, tf[i].omtim); /* * The temp file must be created by the sesh helper, * which uses O_EXCL | O_NOFOLLOW to make this safe. @@ -395,8 +738,8 @@ tfd = sudo_edit_mktemp(ofile, &tfile); if (tfd == -1) { sudo_warn("mkstemps"); - sudo_efree(tfile); - sudo_efree(sesh_args); + free(tfile); + free(sesh_args); debug_return_int(-1); } /* Helper will re-create temp file with proper security context. */ @@ -407,7 +750,7 @@ } *sesh_ap = NULL; - /* Run sesh -e 0 ... */ + /* Run sesh -e [-h] 0 ... */ command_details->argv = sesh_args; rc = run_command(command_details); switch (rc) { @@ -435,19 +778,19 @@ } /* Contents of tf will be freed by caller. */ - sudo_efree(sesh_args); + free(sesh_args); return (nfiles); } static int selinux_edit_copy_tfiles(struct command_details *command_details, - struct tempfile *tf, int nfiles, struct timeval *times) + struct tempfile *tf, int nfiles, struct timespec *times) { char **sesh_args, **sesh_ap; int i, rc, sesh_nargs, rval = 1; struct command_details saved_command_details; - struct timeval tv; + struct timespec ts; struct stat sb; debug_decl(selinux_edit_copy_tfiles, SUDO_DEBUG_EDIT) @@ -465,7 +808,11 @@ command_details->flags |= CD_SUDOEDIT_COPY; sesh_nargs = 3 + (nfiles * 2) + 1; - sesh_args = sesh_ap = sudo_emallocarray(sesh_nargs, sizeof(char *)); + sesh_args = sesh_ap = reallocarray(NULL, sesh_nargs, sizeof(char *)); + if (sesh_args == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + debug_return_int(-1); + } *sesh_ap++ = "sesh"; *sesh_ap++ = "-e"; *sesh_ap++ = "1"; @@ -473,13 +820,13 @@ /* Construct args for sesh -e 1 */ for (i = 0; i < nfiles; i++) { if (stat(tf[i].tfile, &sb) == 0) { - mtim_get(&sb, &tv); - if (tf[i].osize == sb.st_size && sudo_timevalcmp(&tf[i].omtim, &tv, ==)) { + mtim_get(&sb, ts); + if (tf[i].osize == sb.st_size && sudo_timespeccmp(&tf[i].omtim, &ts, ==)) { /* * If mtime and size match but the user spent no measurable * time in the editor we can't tell if the file was changed. */ - if (sudo_timevalcmp(×[0], ×[1], !=)) { + if (sudo_timespeccmp(×[0], ×[1], !=)) { sudo_warnx(U_("%s unchanged"), tf[i].ofile); unlink(tf[i].tfile); continue; @@ -537,7 +884,7 @@ char **nargv = NULL, **ap, **files = NULL; int errors, i, ac, nargc, rval; int editor_argc = 0, nfiles = 0; - struct timeval times[2]; + struct timespec times[2]; struct tempfile *tf = NULL; debug_decl(sudo_edit, SUDO_DEBUG_EDIT) @@ -573,7 +920,11 @@ } /* Copy editor files to temporaries. */ - tf = sudo_ecalloc(nfiles, sizeof(*tf)); + tf = calloc(nfiles, sizeof(*tf)); + if (tf == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto cleanup; + } #ifdef HAVE_SELINUX if (ISSET(command_details->flags, CD_RBAC_ENABLED)) nfiles = selinux_edit_create_tfiles(command_details, tf, files, nfiles); @@ -589,7 +940,11 @@ * to create a new argv. */ nargc = editor_argc + nfiles; - nargv = sudo_emallocarray(nargc + 1, sizeof(char *)); + nargv = reallocarray(NULL, nargc + 1, sizeof(char *)); + if (nargv == NULL) { + sudo_warnx(U_("%s: %s"), __func__, U_("unable to allocate memory")); + goto cleanup; + } for (ac = 0; ac < editor_argc; ac++) nargv[ac] = command_details->argv[ac]; for (i = 0; i < nfiles && ac < nargc; ) @@ -600,7 +955,10 @@ * Run the editor with the invoking user's creds, * keeping track of the time spent in the editor. */ - gettimeofday(×[0], NULL); + if (sudo_gettime_real(×[0]) == -1) { + sudo_warn(U_("unable to read the clock")); + goto cleanup; + } memcpy(&saved_command_details, command_details, sizeof(struct command_details)); command_details->uid = user_details.uid; command_details->euid = user_details.uid; @@ -610,7 +968,10 @@ command_details->groups = user_details.groups; command_details->argv = nargv; rval = run_command(command_details); - gettimeofday(×[1], NULL); + if (sudo_gettime_real(×[1]) == -1) { + sudo_warn(U_("unable to read the clock")); + goto cleanup; + } /* Restore saved command_details. */ command_details->uid = saved_command_details.uid; @@ -629,8 +990,10 @@ #endif errors = sudo_edit_copy_tfiles(command_details, tf, nfiles, times); - sudo_efree(tf); - sudo_efree(nargv); + for (i = 0; i < nfiles; i++) + free(tf[i].tfile); + free(tf); + free(nargv); debug_return_int(errors ? 1 : rval); cleanup: @@ -641,8 +1004,8 @@ unlink(tf[i].tfile); } } - sudo_efree(tf); - sudo_efree(nargv); + free(tf); + free(nargv); debug_return_int(1); } diff -Nru sudo-1.8.12/src/sudo_exec.h sudo-1.8.16/src/sudo_exec.h --- sudo-1.8.12/src/sudo_exec.h 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/src/sudo_exec.h 2016-03-17 16:13:10.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2013 Todd C. Miller + * Copyright (c) 2010-2016 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 @@ -14,8 +14,8 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _SUDO_EXEC_H -#define _SUDO_EXEC_H +#ifndef SUDO_EXEC_H +#define SUDO_EXEC_H /* * Older systems may not support MSG_WAITALL but it shouldn't really be needed. @@ -74,7 +74,7 @@ /* exec.c */ struct sudo_event_base; -int sudo_execve(const char *path, char *const argv[], char *const envp[], bool noexec); +int sudo_execve(int fd, const char *path, char *const argv[], char *envp[], bool noexec); extern volatile pid_t cmnd_pid; /* exec_pty.c */ @@ -99,4 +99,4 @@ const char *user); bool utmp_logout(const char *line, int status); -#endif /* _SUDO_EXEC_H */ +#endif /* SUDO_EXEC_H */ diff -Nru sudo-1.8.12/src/sudo.h sudo-1.8.16/src/sudo.h --- sudo-1.8.12/src/sudo.h 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/src/sudo.h 2016-03-17 16:13:10.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1993-1996, 1998-2005, 2007-2014 + * Copyright (c) 1993-1996, 1998-2005, 2007-2016 * Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any @@ -19,8 +19,8 @@ * Materiel Command, USAF, under agreement number F39502-99-1-0512. */ -#ifndef _SUDO_SUDO_H -#define _SUDO_SUDO_H +#ifndef SUDO_SUDO_H +#define SUDO_SUDO_H #include #include @@ -33,7 +33,6 @@ #include "sudo_gettext.h" /* must be included before sudo_compat.h */ #include "sudo_compat.h" -#include "sudo_alloc.h" #include "sudo_fatal.h" #include "sudo_conf.h" #include "sudo_debug.h" @@ -112,22 +111,24 @@ int ts_lines; }; -#define CD_SET_UID 0x0001 -#define CD_SET_EUID 0x0002 -#define CD_SET_GID 0x0004 -#define CD_SET_EGID 0x0008 -#define CD_PRESERVE_GROUPS 0x0010 -#define CD_NOEXEC 0x0020 -#define CD_SET_PRIORITY 0x0040 -#define CD_SET_UMASK 0x0080 -#define CD_SET_TIMEOUT 0x0100 -#define CD_SUDOEDIT 0x0200 -#define CD_BACKGROUND 0x0400 -#define CD_RBAC_ENABLED 0x0800 -#define CD_USE_PTY 0x1000 -#define CD_SET_UTMP 0x2000 -#define CD_EXEC_BG 0x4000 -#define CD_SUDOEDIT_COPY 0x8000 +#define CD_SET_UID 0x00001 +#define CD_SET_EUID 0x00002 +#define CD_SET_GID 0x00004 +#define CD_SET_EGID 0x00008 +#define CD_PRESERVE_GROUPS 0x00010 +#define CD_NOEXEC 0x00020 +#define CD_SET_PRIORITY 0x00040 +#define CD_SET_UMASK 0x00080 +#define CD_SET_TIMEOUT 0x00100 +#define CD_SUDOEDIT 0x00200 +#define CD_BACKGROUND 0x00400 +#define CD_RBAC_ENABLED 0x00800 +#define CD_USE_PTY 0x01000 +#define CD_SET_UTMP 0x02000 +#define CD_EXEC_BG 0x04000 +#define CD_SUDOEDIT_COPY 0x08000 +#define CD_SUDOEDIT_FOLLOW 0x10000 +#define CD_SUDOEDIT_CHECKDIR 0x20000 struct preserved_fd { TAILQ_ENTRY(preserved_fd) entries; @@ -148,6 +149,7 @@ int ngroups; int closefrom; int flags; + int execfd; struct preserved_fd_list preserved_fds; struct passwd *pw; GETGROUPS_T *groups; @@ -183,8 +185,8 @@ void cleanup(int); /* tgetpass.c */ -char *tgetpass(const char *, int, int); -int tty_present(void); +char *tgetpass(const char *prompt, int timeout, int flags, + struct sudo_conv_callback *callback); /* exec.c */ int pipe_nonblock(int fds[2]); @@ -196,7 +198,7 @@ extern int tgetpass_flags; /* get_pty.c */ -int get_pty(int *master, int *slave, char *name, size_t namesz, uid_t uid); +bool get_pty(int *master, int *slave, char *name, size_t namesz, uid_t uid); /* sudo.c */ bool exec_setup(struct command_details *details, const char *ptyname, int ptyfd); @@ -220,8 +222,8 @@ int selinux_restore_tty(void); int selinux_setup(const char *role, const char *type, const char *ttyn, int ttyfd); -void selinux_execve(const char *path, char *const argv[], char *const envp[], - int noexec); +void selinux_execve(int fd, const char *path, char *const argv[], + char *envp[], bool noexec); /* solaris.c */ void set_project(struct passwd *); @@ -244,7 +246,7 @@ int get_net_ifs(char **addrinfo); /* ttyname.c */ -char *get_process_ttyname(void); +char *get_process_ttyname(char *name, size_t namelen); /* signal.c */ struct sigaction; @@ -262,4 +264,4 @@ void closefrom_except(int startfd, struct preserved_fd_list *pfds); void parse_preserved_fds(struct preserved_fd_list *pfds, const char *fdstr); -#endif /* _SUDO_SUDO_H */ +#endif /* SUDO_SUDO_H */ diff -Nru sudo-1.8.12/src/sudo_noexec.c sudo-1.8.16/src/sudo_noexec.c --- sudo-1.8.12/src/sudo_noexec.c 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/src/sudo_noexec.c 2015-10-31 23:35:24.000000000 +0000 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004-2005, 2010-2013 Todd C. Miller + * Copyright (c) 2004-2005, 2010-2015 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 @@ -20,9 +20,9 @@ #include #include -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include +#include +#include #ifdef HAVE_SPAWN_H #include #endif @@ -50,11 +50,10 @@ #endif /* - * Dummy versions of the exec(3) family of syscalls. It is not enough - * to just dummy out execve(2) since some C libraries use direct syscalls - * for the other functions instead of calling execve(2). Note that it is - * still possible to access the real syscalls via the syscall(2) interface - * but very few programs actually do that. + * Dummy versions of the exec(3) family of syscalls. It is not enough to + * just dummy out execve(2) since many C libraries do not call the public + * execve(2) interface. Note that it is still possible to access the real + * syscalls via the syscall(2) interface, but that is rarely done. */ #define DUMMY_BODY \ @@ -63,6 +62,12 @@ return -1; \ } +#define DUMMY1(fn, t1) \ +__dso_public int \ +FN_NAME(fn)(t1 a1) \ +DUMMY_BODY \ +INTERPOSE(fn) + #define DUMMY2(fn, t1, t2) \ __dso_public int \ FN_NAME(fn)(t1 a1, t2 a2) \ @@ -98,107 +103,41 @@ DUMMY3(execve, const char *, char * const *, char * const *) /* - * Private versions of the above. - */ -#ifdef HAVE__EXECL -DUMMY_VA(_execl, const char *, const char *) -#endif -#ifdef HAVE___EXECL -DUMMY_VA(__execl, const char *, const char *) -#endif -#ifdef HAVE__EXECLE -DUMMY_VA(_execle, const char *, const char *) -#endif -#ifdef HAVE___EXECLE -DUMMY_VA(__execle, const char *, const char *) -#endif -#ifdef HAVE__EXECLP -DUMMY_VA(_execlp, const char *, const char *) -#endif -#ifdef HAVE___EXECLP -DUMMY_VA(__execlp, const char *, const char *) -#endif -#ifdef HAVE__EXECV -DUMMY2(_execv, const char *, char * const *) -#endif -#ifdef HAVE___EXECV -DUMMY2(__execv, const char *, char * const *) -#endif -#ifdef HAVE__EXECVP -DUMMY2(_execvp, const char *, char * const *) -#endif -#ifdef HAVE___EXECVP -DUMMY2(__execvp, const char *, char * const *) -#endif -#ifdef HAVE__EXECVE -DUMMY3(_execve, const char *, char * const *, char * const *) -#endif -#ifdef HAVE___EXECVE -DUMMY3(__execve, const char *, char * const *, char * const *) -#endif - -/* - * Non-standard exec functions and corresponding private versions. + * Non-standard exec(3) functions and corresponding private versions. */ #ifdef HAVE_EXECVP DUMMY3(execvP, const char *, const char *, char * const *) #endif -#ifdef HAVE__EXECVP -DUMMY3(_execvP, const char *, const char *, char * const *) -#endif -#ifdef HAVE___EXECVP -DUMMY3(__execvP, const char *, const char *, char * const *) -#endif - #ifdef HAVE_EXECVPE DUMMY3(execvpe, const char *, char * const *, char * const *) #endif -#ifdef HAVE__EXECVPE -DUMMY3(_execvpe, const char *, char * const *, char * const *) -#endif -#ifdef HAVE___EXECVPE -DUMMY3(__execvpe, const char *, char * const *, char * const *) -#endif - #ifdef HAVE_EXECT DUMMY3(exect, const char *, char * const *, char * const *) #endif -#ifdef HAVE__EXECT -DUMMY3(_exect, const char *, char * const *, char * const *) -#endif -#ifdef HAVE___EXECT -DUMMY3(__exect, const char *, char * const *, char * const *) -#endif +/* + * Not all systems support fexecve(2), posix_spawn(2) and posix_spawnp(2). + */ #ifdef HAVE_FEXECVE DUMMY3(fexecve, int , char * const *, char * const *) #endif -#ifdef HAVE__FEXECVE -DUMMY3(_fexecve, int , char * const *, char * const *) -#endif -#ifdef HAVE___FEXECVE -DUMMY3(__fexecve, int , char * const *, char * const *) -#endif - -/* - * posix_spawn, posix_spawnp and any private versions. - */ #ifdef HAVE_POSIX_SPAWN DUMMY6(posix_spawn, pid_t *, const char *, const posix_spawn_file_actions_t *, const posix_spawnattr_t *, char * const *, char * const *) #endif -#ifdef HAVE__POSIX_SPAWN -DUMMY6(_posix_spawn, pid_t *, const char *, const posix_spawn_file_actions_t *, const posix_spawnattr_t *, char * const *, char * const *) -#endif -#ifdef HAVE___POSIX_SPAWN -DUMMY6(__posix_spawn, pid_t *, const char *, const posix_spawn_file_actions_t *, const posix_spawnattr_t *, char * const *, char * const *) -#endif - #ifdef HAVE_POSIX_SPAWNP DUMMY6(posix_spawnp, pid_t *, const char *, const posix_spawn_file_actions_t *, const posix_spawnattr_t *, char * const *, char * const *) #endif -#ifdef HAVE_POSIX__SPAWNP -DUMMY6(_posix_spawnp, pid_t *, const char *, const posix_spawn_file_actions_t *, const posix_spawnattr_t *, char * const *, char * const *) -#endif -#ifdef HAVE_POSIX___SPAWNP -DUMMY6(__posix_spawnp, pid_t *, const char *, const posix_spawn_file_actions_t *, const posix_spawnattr_t *, char * const *, char * const *) -#endif + +/* + * system(3) and popen(3). + * We can't use a wrapper for popen since it returns FILE *, not int. + */ +DUMMY1(system, const char *) + +__dso_public FILE * +FN_NAME(popen)(const char *c, const char *t) +{ + errno = EACCES; + return NULL; +} +INTERPOSE(popen) diff -Nru sudo-1.8.12/src/sudo_plugin_int.h sudo-1.8.16/src/sudo_plugin_int.h --- sudo-1.8.12/src/sudo_plugin_int.h 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/src/sudo_plugin_int.h 2016-03-17 16:13:10.000000000 +0000 @@ -14,8 +14,8 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifndef _SUDO_PLUGIN_INT_H -#define _SUDO_PLUGIN_INT_H +#ifndef SUDO_PLUGIN_INT_H +#define SUDO_PLUGIN_INT_H /* * All plugin structures start with a type and a version. @@ -26,13 +26,16 @@ /* the rest depends on the type... */ }; +typedef int (*sudo_conv_1_7_t)(int num_msgs, + const struct sudo_conv_message msgs[], struct sudo_conv_reply replies[]); + /* * Backwards-compatible structures for API bumps. */ struct policy_plugin_1_0 { unsigned int type; unsigned int version; - int (*open)(unsigned int version, sudo_conv_t conversation, + int (*open)(unsigned int version, sudo_conv_1_7_t conversation, sudo_printf_t sudo_printf, char * const settings[], char * const user_info[], char * const user_env[]); void (*close)(int exit_status, int error); /* wait status or error */ @@ -49,7 +52,7 @@ struct io_plugin_1_0 { unsigned int type; unsigned int version; - int (*open)(unsigned int version, sudo_conv_t conversation, + int (*open)(unsigned int version, sudo_conv_1_7_t conversation, sudo_printf_t sudo_printf, char * const settings[], char * const user_info[], int argc, char * const argv[], char * const user_env[]); @@ -64,7 +67,7 @@ struct io_plugin_1_1 { unsigned int type; unsigned int version; - int (*open)(unsigned int version, sudo_conv_t conversation, + int (*open)(unsigned int version, sudo_conv_1_7_t conversation, sudo_printf_t sudo_printf, char * const settings[], char * const user_info[], char * const command_info[], int argc, char * const argv[], char * const user_env[]); @@ -84,7 +87,7 @@ TAILQ_ENTRY(plugin_container) entries; struct sudo_conf_debug_file_list *debug_files; const char *name; - const char *path; + char *path; char * const *options; void *handle; int debug_instance; @@ -103,10 +106,12 @@ extern struct plugin_container_list io_plugins; int sudo_conversation(int num_msgs, const struct sudo_conv_message msgs[], + struct sudo_conv_reply replies[], struct sudo_conv_callback *callback); +int sudo_conversation_1_7(int num_msgs, const struct sudo_conv_message msgs[], struct sudo_conv_reply replies[]); int sudo_conversation_printf(int msg_type, const char *fmt, ...); bool sudo_load_plugins(struct plugin_container *policy_plugin, struct plugin_container_list *io_plugins); -#endif /* _SUDO_PLUGIN_INT_H */ +#endif /* SUDO_PLUGIN_INT_H */ diff -Nru sudo-1.8.12/src/sudo_usage.h.in sudo-1.8.16/src/sudo_usage.h.in --- sudo-1.8.12/src/sudo_usage.h.in 2015-02-09 18:40:10.000000000 +0000 +++ sudo-1.8.16/src/sudo_usage.h.in 2015-10-31 23:35:00.000000000 +0000 @@ -16,8 +16,8 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef _SUDO_USAGE_H -#define _SUDO_USAGE_H +#ifndef SUDO_USAGE_H +#define SUDO_USAGE_H /* * Usage strings for sudo. These are here because we @@ -34,4 +34,4 @@ */ #define CONFIGURE_ARGS "@CONFIGURE_ARGS@" -#endif /* _SUDO_USAGE_H */ +#endif /* SUDO_USAGE_H */ diff -Nru sudo-1.8.12/src/tgetpass.c sudo-1.8.16/src/tgetpass.c --- sudo-1.8.12/src/tgetpass.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/src/tgetpass.c 2015-10-31 23:35:24.000000000 +0000 @@ -28,26 +28,14 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include #include @@ -58,15 +46,43 @@ static volatile sig_atomic_t signo[NSIG]; +static bool tty_present(void); static void tgetpass_handler(int); static char *getln(int, char *, size_t, int); static char *sudo_askpass(const char *, const char *); +static int +suspend(int signo, struct sudo_conv_callback *callback) +{ + int rval = 0; + debug_decl(suspend, SUDO_DEBUG_CONV) + + if (callback != NULL && SUDO_API_VERSION_GET_MAJOR(callback->version) != SUDO_CONV_CALLBACK_VERSION_MAJOR) { + sudo_debug_printf(SUDO_DEBUG_WARN|SUDO_DEBUG_LINENO, + "callback major version mismatch, expected %u, got %u", + SUDO_CONV_CALLBACK_VERSION_MAJOR, + SUDO_API_VERSION_GET_MAJOR(callback->version)); + callback = NULL; + } + + if (callback != NULL && callback->on_suspend != NULL) { + if (callback->on_suspend(signo, callback->closure) == -1) + rval = -1; + } + kill(getpid(), signo); + if (callback != NULL && callback->on_resume != NULL) { + if (callback->on_resume(signo, callback->closure) == -1) + rval = -1; + } + debug_return_int(rval); +} + /* * Like getpass(3) but with timeout and echo flags. */ char * -tgetpass(const char *prompt, int timeout, int flags) +tgetpass(const char *prompt, int timeout, int flags, + struct sudo_conv_callback *callback) { sigaction_t sa, savealrm, saveint, savehup, savequit, saveterm; sigaction_t savetstp, savettin, savettou, savepipe; @@ -116,13 +132,23 @@ /* * If we are using a tty but are not the foreground pgrp this will - * generate SIGTTOU, so do it *before* installing the signal handlers. + * return EINTR. We send ourself SIGTTOU bracketed by callbacks. */ if (!ISSET(flags, TGP_ECHO)) { - if (ISSET(flags, TGP_MASK)) - neednl = sudo_term_cbreak(input); - else - neednl = sudo_term_noecho(input); + for (;;) { + if (ISSET(flags, TGP_MASK)) + neednl = sudo_term_cbreak(input); + else + neednl = sudo_term_noecho(input); + if (neednl || errno != EINTR) + break; + /* Received SIGTTOU, suspend the process. */ + if (suspend(SIGTTOU, callback) == -1) { + if (input != STDIN_FILENO) + (void) close(input); + debug_return_ptr(NULL); + } + } } /* @@ -163,9 +189,7 @@ } restore: - /* Restore old tty settings and signals. */ - if (!ISSET(flags, TGP_ECHO)) - sudo_term_restore(input, 1); + /* Restore old signal handlers. */ (void) sigaction(SIGALRM, &savealrm, NULL); (void) sigaction(SIGINT, &saveint, NULL); (void) sigaction(SIGHUP, &savehup, NULL); @@ -174,7 +198,22 @@ (void) sigaction(SIGTSTP, &savetstp, NULL); (void) sigaction(SIGTTIN, &savettin, NULL); (void) sigaction(SIGTTOU, &savettou, NULL); - (void) sigaction(SIGTTOU, &savepipe, NULL); + (void) sigaction(SIGPIPE, &savepipe, NULL); + + /* Restore old tty settings. */ + if (!ISSET(flags, TGP_ECHO)) { + for (;;) { + /* Restore old tty settings if possible. */ + if (sudo_term_restore(input, 1) || errno != EINTR) + break; + /* Received SIGTTOU, suspend the process. */ + signo[SIGTTOU] = 0; + if (suspend(SIGTTOU, callback) == -1) { + pass = NULL; + break; + } + } + } if (input != STDIN_FILENO) (void) close(input); @@ -184,12 +223,15 @@ */ for (i = 0; i < NSIG; i++) { if (signo[i]) { - kill(getpid(), i); switch (i) { case SIGTSTP: case SIGTTIN: case SIGTTOU: - need_restart = 1; + if (suspend(i, callback) == 0) + need_restart = 1; + break; + default: + kill(getpid(), i); break; } } @@ -258,8 +300,13 @@ (void) sigaction(SIGPIPE, &saved_sa_pipe, NULL); /* Wait for child to exit. */ - while (waitpid(child, &status, 0) == -1 && errno == EINTR) - continue; + for (;;) { + pid_t rv = waitpid(child, &status, 0); + if (rv == -1 && errno != EINTR) + break; + if (rv != -1 && !WIFSTOPPED(status)) + break; + } if (pass == NULL) errno = EINTR; /* make cancel button simulate ^C */ @@ -329,13 +376,18 @@ signo[s] = 1; } -int +static bool tty_present(void) { +#if defined(HAVE_STRUCT_KINFO_PROC2_P_TDEV) || defined(HAVE_STRUCT_KINFO_PROC_P_TDEV) || defined(HAVE_STRUCT_KINFO_PROC_KI_TDEV) || defined(HAVE_STRUCT_KINFO_PROC_KP_EPROC_E_TDEV) || defined(HAVE_STRUCT_PSINFO_PR_TTYDEV) || defined(HAVE_PSTAT_GETPROC) || defined(__linux__) + debug_decl(tty_present, SUDO_DEBUG_UTIL) + debug_return_bool(user_details.tty != NULL); +#else int fd; debug_decl(tty_present, SUDO_DEBUG_UTIL) if ((fd = open(_PATH_TTY, O_RDWR|O_NOCTTY)) != -1) close(fd); debug_return_bool(fd != -1); +#endif } diff -Nru sudo-1.8.12/src/ttyname.c sudo-1.8.16/src/ttyname.c --- sudo-1.8.12/src/ttyname.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/src/ttyname.c 2016-03-17 16:13:11.000000000 +0000 @@ -30,45 +30,18 @@ # include #endif #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include #include -#ifdef HAVE_DIRENT_H -# include -# define NAMLEN(dirent) strlen((dirent)->d_name) -#else -# define dirent direct -# define NAMLEN(dirent) (dirent)->d_namlen -# ifdef HAVE_SYS_NDIR_H -# include -# endif -# ifdef HAVE_SYS_DIR_H -# include -# endif -# ifdef HAVE_NDIR_H -# include -# endif -#endif +#include #if defined(HAVE_STRUCT_KINFO_PROC_P_TDEV) || defined (HAVE_STRUCT_KINFO_PROC_KP_EPROC_E_TDEV) || defined(HAVE_STRUCT_KINFO_PROC2_P_TDEV) # include /* for makedev/major/minor */ # include @@ -89,6 +62,12 @@ #include "sudo.h" +#if defined(HAVE_STRUCT_DIRENT_D_NAMLEN) && HAVE_STRUCT_DIRENT_D_NAMLEN +# define NAMLEN(dirent) (dirent)->d_namlen +#else +# define NAMLEN(dirent) strlen((dirent)->d_name) +#endif + /* * How to access the tty device number in struct kinfo_proc. */ @@ -117,48 +96,52 @@ #if defined(sudo_kp_tdev) /* * Like ttyname() but uses a dev_t instead of an open fd. - * Caller is responsible for freeing the returned string. - * The BSD version uses devname() + * Returns name on success and NULL on failure, setting errno. + * The BSD version uses devname(). */ static char * -sudo_ttyname_dev(dev_t tdev) +sudo_ttyname_dev(dev_t tdev, char *name, size_t namelen) { - char *dev, *tty = NULL; + char *dev; debug_decl(sudo_ttyname_dev, SUDO_DEBUG_UTIL) /* Some versions of devname() return NULL on failure, others do not. */ dev = devname(tdev, S_IFCHR); if (dev != NULL && *dev != '?' && *dev != '#') { - if (*dev != '/') { - /* devname() doesn't use the /dev/ prefix, add one... */ - size_t len = sizeof(_PATH_DEV) + strlen(dev); - tty = sudo_emalloc(len); - strlcpy(tty, _PATH_DEV, len); - strlcat(tty, dev, len); - } else { - /* Should not happen but just in case... */ - tty = sudo_estrdup(dev); - } + if (strlcpy(name, _PATH_DEV, namelen) < namelen && + strlcat(name, dev, namelen) < namelen) + debug_return_str(name); + errno = ERANGE; + } else { + /* Not all versions of devname() set errno. */ + errno = ENOENT; } - debug_return_str(tty); + debug_return_str(NULL); } #elif defined(HAVE__TTYNAME_DEV) extern char *_ttyname_dev(dev_t rdev, char *buffer, size_t buflen); /* * Like ttyname() but uses a dev_t instead of an open fd. - * Caller is responsible for freeing the returned string. + * Returns name on success and NULL on failure, setting errno. * This version is just a wrapper around _ttyname_dev(). */ static char * -sudo_ttyname_dev(dev_t tdev) +sudo_ttyname_dev(dev_t tdev, char *name, size_t namelen) { - char buf[TTYNAME_MAX], *tty; + int serrno = errno; debug_decl(sudo_ttyname_dev, SUDO_DEBUG_UTIL) - tty = _ttyname_dev(tdev, buf, sizeof(buf)); + /* + * _ttyname_dev() sets errno to ERANGE if namelen is too small + * but does not modify it if tdev is not found. + */ + errno = ENOENT; + if (_ttyname_dev(tdev, name, namelen) == NULL) + debug_return_str(NULL); + errno = serrno; - debug_return_str(sudo_estrdup(tty)); + debug_return_str(name); } #elif defined(HAVE_STRUCT_PSINFO_PR_TTYDEV) || defined(HAVE_PSTAT_GETPROC) || defined(__linux__) /* @@ -184,30 +167,30 @@ /* * Do a breadth-first scan of dir looking for the specified device. + * Returns name on success and NULL on failure, setting errno. */ static char * -sudo_ttyname_scan(const char *dir, dev_t rdev, bool builtin) +sudo_ttyname_scan(const char *dir, dev_t rdev, bool builtin, char *name, size_t namelen) { - DIR *d = NULL; - char pathbuf[PATH_MAX], **subdirs = NULL, *devname = NULL; - size_t sdlen, d_len, len, num_subdirs = 0, max_subdirs = 0; + size_t sdlen, num_subdirs = 0, max_subdirs = 0; + char pathbuf[PATH_MAX], **subdirs = NULL; + char *rval = NULL; struct dirent *dp; - struct stat sb; unsigned int i; + DIR *d = NULL; debug_decl(sudo_ttyname_scan, SUDO_DEBUG_UTIL) if (dir[0] == '\0' || (d = opendir(dir)) == NULL) goto done; - sudo_debug_printf(SUDO_DEBUG_INFO, "scanning for dev %u in %s", - (unsigned int)rdev, dir); + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "scanning for dev %u in %s", (unsigned int)rdev, dir); sdlen = strlen(dir); if (dir[sdlen - 1] == '/') sdlen--; if (sdlen + 1 >= sizeof(pathbuf)) { - errno = ENAMETOOLONG; - sudo_warn("%.*s/", (int)sdlen, dir); + errno = ERANGE; goto done; } memcpy(pathbuf, dir, sdlen); @@ -215,6 +198,9 @@ pathbuf[sdlen] = '\0'; while ((dp = readdir(d)) != NULL) { + struct stat sb; + size_t d_len, len; + /* Skip anything starting with "." */ if (dp->d_name[0] == '.') continue; @@ -248,65 +234,95 @@ } # if defined(HAVE_STRUCT_DIRENT_D_TYPE) && defined(DTTOIF) /* - * Convert dp->d_type to sb.st_mode to avoid a stat(2) if possible. - * We can't use it for links (since we want to follow them) or - * char devs (since we need st_rdev to compare the device number). + * Avoid excessive stat() calls by checking dp->d_type. */ - if (dp->d_type != DT_UNKNOWN && dp->d_type != DT_LNK && dp->d_type != DT_CHR) - sb.st_mode = DTTOIF(dp->d_type); - else -# endif + switch (dp->d_type) { + case DT_CHR: + case DT_LNK: + case DT_UNKNOWN: + /* Could be a character device, stat() it. */ + if (stat(pathbuf, &sb) == -1) + continue; + break; + case DT_DIR: + /* Directory, no need to stat() it. */ + sb.st_mode = DTTOIF(dp->d_type); + sb.st_rdev = 0; /* quiet ccc-analyzer false positive */ + break; + default: + /* Not a character device, link or directory, skip it. */ + continue; + } +# else if (stat(pathbuf, &sb) == -1) continue; +# endif if (S_ISDIR(sb.st_mode)) { if (!builtin) { /* Add to list of subdirs to search. */ if (num_subdirs + 1 > max_subdirs) { + char **new_subdirs; + + new_subdirs = reallocarray(subdirs, max_subdirs + 64, + sizeof(char *)); + if (new_subdirs == NULL) + goto done; + subdirs = new_subdirs; max_subdirs += 64; - subdirs = sudo_ereallocarray(subdirs, max_subdirs, sizeof(char *)); } - subdirs[num_subdirs++] = sudo_estrdup(pathbuf); + subdirs[num_subdirs] = strdup(pathbuf); + if (subdirs[num_subdirs] == NULL) + goto done; + num_subdirs++; } continue; } if (S_ISCHR(sb.st_mode) && sb.st_rdev == rdev) { - devname = sudo_estrdup(pathbuf); - sudo_debug_printf(SUDO_DEBUG_INFO, "resolved dev %u as %s", - (unsigned int)rdev, pathbuf); + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "resolved dev %u as %s", (unsigned int)rdev, pathbuf); + if (strlcpy(name, pathbuf, namelen) < namelen) { + rval = name; + } else { + sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, + "unable to store %s, have %zu, need %zu", + pathbuf, namelen, strlen(pathbuf) + 1); + errno = ERANGE; + } goto done; } } /* Search subdirs if we didn't find it in the root level. */ - for (i = 0; devname == NULL && i < num_subdirs; i++) - devname = sudo_ttyname_scan(subdirs[i], rdev, false); + for (i = 0; rval == NULL && i < num_subdirs; i++) + rval = sudo_ttyname_scan(subdirs[i], rdev, false, name, namelen); done: if (d != NULL) closedir(d); for (i = 0; i < num_subdirs; i++) - sudo_efree(subdirs[i]); - sudo_efree(subdirs); - debug_return_str(devname); + free(subdirs[i]); + free(subdirs); + debug_return_str(rval); } /* * Like ttyname() but uses a dev_t instead of an open fd. - * Caller is responsible for freeing the returned string. + * Returns name on success and NULL on failure, setting errno. * Generic version. */ static char * -sudo_ttyname_dev(dev_t rdev) +sudo_ttyname_dev(dev_t rdev, char *name, size_t namelen) { + char buf[PATH_MAX], **sd, *devname; + char *rval = NULL; struct stat sb; size_t len; - char buf[PATH_MAX], **sd, *devname, *tty = NULL; debug_decl(sudo_ttyname_dev, SUDO_DEBUG_UTIL) /* * First check search_devs for common tty devices. */ - for (sd = search_devs; tty == NULL && (devname = *sd) != NULL; sd++) { + for (sd = search_devs; (devname = *sd) != NULL; sd++) { len = strlen(devname); if (devname[len - 1] == '/') { if (strcmp(devname, "/dev/pts/") == 0) { @@ -314,19 +330,34 @@ (void)snprintf(buf, sizeof(buf), "%spts/%u", _PATH_DEV, (unsigned int)minor(rdev)); if (stat(buf, &sb) == 0) { - if (S_ISCHR(sb.st_mode) && sb.st_rdev == rdev) - tty = sudo_estrdup(buf); + if (S_ISCHR(sb.st_mode) && sb.st_rdev == rdev) { + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "comparing dev %u to %s: match!", + (unsigned int)rdev, buf); + if (strlcpy(name, buf, namelen) < namelen) + rval = name; + else + errno = ERANGE; + goto done; + } } - sudo_debug_printf(SUDO_DEBUG_INFO, "comparing dev %u to %s: %s", - (unsigned int)rdev, buf, tty ? "yes" : "no"); + sudo_debug_printf(SUDO_DEBUG_INFO|SUDO_DEBUG_LINENO, + "comparing dev %u to %s: no", (unsigned int)rdev, buf); } else { /* Traverse directory */ - tty = sudo_ttyname_scan(devname, rdev, true); + rval = sudo_ttyname_scan(devname, rdev, true, name, namelen); + if (rval != NULL || errno == ENOMEM) + goto done; } } else { if (stat(devname, &sb) == 0) { - if (S_ISCHR(sb.st_mode) && sb.st_rdev == rdev) - tty = sudo_estrdup(devname); + if (S_ISCHR(sb.st_mode) && sb.st_rdev == rdev) { + if (strlcpy(name, devname, namelen) < namelen) + rval = name; + else + errno = ERANGE; + goto done; + } } } } @@ -334,25 +365,25 @@ /* * Not found? Do a breadth-first traversal of /dev/. */ - if (tty == NULL) - tty = sudo_ttyname_scan(_PATH_DEV, rdev, false); + rval = sudo_ttyname_scan(_PATH_DEV, rdev, false, name, namelen); - debug_return_str(tty); +done: + debug_return_str(rval); } #endif #if defined(sudo_kp_tdev) /* - * Return a string from ttyname() containing the tty to which the process is - * attached or NULL if the process has no controlling tty. + * Store the name of the tty to which the process is attached in name. + * Returns name on success and NULL on failure, setting errno. */ char * -get_process_ttyname(void) +get_process_ttyname(char *name, size_t namelen) { - char *tty = NULL; struct sudo_kinfo_proc *ki_proc = NULL; size_t size = sizeof(*ki_proc); - int mib[6], rc; + int mib[6], rc, serrno = errno; + char *rval = NULL; debug_decl(get_process_ttyname, SUDO_DEBUG_UTIL) /* @@ -366,39 +397,47 @@ mib[4] = sizeof(*ki_proc); mib[5] = 1; do { + struct sudo_kinfo_proc *kp; + size += size / 10; - ki_proc = sudo_erealloc(ki_proc, size); + if ((kp = realloc(ki_proc, size)) == NULL) { + rc = -1; + break; /* really out of memory. */ + } + ki_proc = kp; rc = sysctl(mib, sudo_kp_namelen, ki_proc, &size, NULL, 0); } while (rc == -1 && errno == ENOMEM); + errno = ENOENT; if (rc != -1) { if ((dev_t)ki_proc->sudo_kp_tdev != (dev_t)-1) { - tty = sudo_ttyname_dev(ki_proc->sudo_kp_tdev); - if (tty == NULL) { - sudo_debug_printf(SUDO_DEBUG_WARN, + errno = serrno; + rval = sudo_ttyname_dev(ki_proc->sudo_kp_tdev, name, namelen); + if (rval == NULL) { + sudo_debug_printf(SUDO_DEBUG_WARN|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, "unable to map device number %u to name", ki_proc->sudo_kp_tdev); } } } else { - sudo_debug_printf(SUDO_DEBUG_WARN, - "unable to resolve tty via KERN_PROC: %s", strerror(errno)); + sudo_debug_printf(SUDO_DEBUG_WARN|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, + "unable to resolve tty via KERN_PROC"); } - sudo_efree(ki_proc); + free(ki_proc); - debug_return_str(tty); + debug_return_str(rval); } #elif defined(HAVE_STRUCT_PSINFO_PR_TTYDEV) /* - * Return a string from ttyname() containing the tty to which the process is - * attached or NULL if the process has no controlling tty. + * Store the name of the tty to which the process is attached in name. + * Returns name on success and NULL on failure, setting errno. */ char * -get_process_ttyname(void) +get_process_ttyname(char *name, size_t namelen) { - char path[PATH_MAX], *tty = NULL; + char path[PATH_MAX], *rval = NULL; struct psinfo psinfo; ssize_t nread; - int fd; + int fd, serrno = errno; debug_decl(get_process_ttyname, SUDO_DEBUG_UTIL) /* Try to determine the tty from pr_ttydev in /proc/pid/psinfo. */ @@ -409,26 +448,37 @@ if (nread == (ssize_t)sizeof(psinfo)) { dev_t rdev = (dev_t)psinfo.pr_ttydev; #if defined(_AIX) && defined(DEVNO64) - if (psinfo.pr_ttydev & DEVNO64) + if ((psinfo.pr_ttydev & DEVNO64) && sizeof(dev_t) == 4) rdev = makedev(major64(psinfo.pr_ttydev), minor64(psinfo.pr_ttydev)); #endif - if (rdev != (dev_t)-1) - tty = sudo_ttyname_dev(rdev); + if (rdev != (dev_t)-1) { + errno = serrno; + rval = sudo_ttyname_dev(rdev, name, namelen); + goto done; + } } } + errno = ENOENT; - debug_return_str(tty); +done: + if (rval == NULL) + sudo_debug_printf(SUDO_DEBUG_WARN|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, + "unable to resolve tty via %s", path); + + debug_return_str(rval); } #elif defined(__linux__) /* - * Return a string from ttyname() containing the tty to which the process is - * attached or NULL if the process has no controlling tty. + * Store the name of the tty to which the process is attached in name. + * Returns name on success and NULL on failure, setting errno. */ char * -get_process_ttyname(void) +get_process_ttyname(char *name, size_t namelen) { - char path[PATH_MAX], *line = NULL, *tty = NULL; + char path[PATH_MAX], *line = NULL; + char *rval = NULL; size_t linesize = 0; + int serrno = errno; ssize_t len; FILE *fp; debug_decl(get_process_ttyname, SUDO_DEBUG_UTIL) @@ -453,30 +503,39 @@ sudo_debug_printf(SUDO_DEBUG_ERROR|SUDO_DEBUG_LINENO, "%s: tty device %s: %s", path, cp, errstr); } - if (tdev > 0) - tty = sudo_ttyname_dev(tdev); + if (tdev > 0) { + errno = serrno; + rval = sudo_ttyname_dev(tdev, name, namelen); + goto done; + } break; } cp = ep + 1; } } } - sudo_efree(line); } + errno = ENOENT; - debug_return_str(tty); +done: + free(line); + if (rval == NULL) + sudo_debug_printf(SUDO_DEBUG_WARN|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, + "unable to resolve tty via %s", path); + + debug_return_str(rval); } #elif defined(HAVE_PSTAT_GETPROC) /* - * Return a string from ttyname() containing the tty to which the process is - * attached or NULL if the process has no controlling tty. + * Store the name of the tty to which the process is attached in name. + * Returns name on success and NULL on failure, setting errno. */ char * -get_process_ttyname(void) +get_process_ttyname(char *name, size_t namelen) { struct pst_status pstat; - char *tty = NULL; - int rc; + char *rval = NULL; + int rc, serrno = errno; debug_decl(get_process_ttyname, SUDO_DEBUG_UTIL) /* @@ -486,19 +545,28 @@ rc = pstat_getproc(&pstat, sizeof(pstat), (size_t)0, (int)getpid()); if (rc != -1 || errno == EOVERFLOW) { if (pstat.pst_term.psd_major != -1 && pstat.pst_term.psd_minor != -1) { - tty = sudo_ttyname_dev(makedev(pstat.pst_term.psd_major, - pstat.pst_term.psd_minor)); + errno = serrno; + rval = sudo_ttyname_dev(makedev(pstat.pst_term.psd_major, + pstat.pst_term.psd_minor), name, namelen); + goto done; } } - debug_return_str(tty); + errno = ENOENT; + +done: + if (rval == NULL) + sudo_debug_printf(SUDO_DEBUG_WARN|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, + "unable to resolve tty via pstat"); + + debug_return_str(rval); } #else /* - * Return a string from ttyname() containing the tty to which the process is - * attached or NULL if the process has no controlling tty. + * Store the name of the tty to which the process is attached in name. + * Returns name on success and NULL on failure, setting errno. */ char * -get_process_ttyname(void) +get_process_ttyname(char *name, size_t namelen) { char *tty; debug_decl(get_process_ttyname, SUDO_DEBUG_UTIL) @@ -507,7 +575,18 @@ if ((tty = ttyname(STDOUT_FILENO)) == NULL) tty = ttyname(STDERR_FILENO); } + if (tty != NULL) { + if (strlcpy(name, tty, namelen) < namelen) + debug_return_str(name); + errno = ERANGE; + sudo_debug_printf(SUDO_DEBUG_WARN|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, + "unable to store tty from ttyname"); + } else { + sudo_debug_printf(SUDO_DEBUG_WARN|SUDO_DEBUG_LINENO|SUDO_DEBUG_ERRNO, + "unable to resolve tty via ttyname"); + errno = ENOENT; + } - debug_return_str(sudo_estrdup(tty)); + debug_return_str(NULL); } #endif diff -Nru sudo-1.8.12/src/utmp.c sudo-1.8.16/src/utmp.c --- sudo-1.8.12/src/utmp.c 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/src/utmp.c 2015-10-31 23:35:00.000000000 +0000 @@ -20,26 +20,14 @@ #include #include #include -#ifdef STDC_HEADERS -# include -# include -#else -# ifdef HAVE_STDLIB_H -# include -# endif -#endif /* STDC_HEADERS */ +#include #ifdef HAVE_STRING_H -# if defined(HAVE_MEMORY_H) && !defined(STDC_HEADERS) -# include -# endif # include #endif /* HAVE_STRING_H */ #ifdef HAVE_STRINGS_H # include #endif /* HAVE_STRINGS_H */ -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #ifdef TIME_WITH_SYS_TIME # include #endif @@ -126,14 +114,14 @@ struct timeval tv; debug_decl(utmp_settime, SUDO_DEBUG_UTMP) - gettimeofday(&tv, NULL); - + if (gettimeofday(&tv, NULL) == 0) { #if defined(HAVE_STRUCT_UTMP_UT_TV) || defined(HAVE_STRUCT_UTMPX_UT_TV) - ut->ut_tv.tv_sec = tv.tv_sec; - ut->ut_tv.tv_usec = tv.tv_usec; + ut->ut_tv.tv_sec = tv.tv_sec; + ut->ut_tv.tv_usec = tv.tv_usec; #else - ut->ut_time = tv.tv_sec; + ut->ut_time = tv.tv_sec; #endif + } debug_return; } diff -Nru sudo-1.8.12/sudo.pp sudo-1.8.16/sudo.pp --- sudo-1.8.12/sudo.pp 2015-02-09 18:53:54.000000000 +0000 +++ sudo-1.8.16/sudo.pp 2016-03-17 16:13:10.000000000 +0000 @@ -12,7 +12,7 @@ The basic philosophy is to give as few privileges as possible but \ still allow people to get their work done." vendor="Todd C. Miller" - copyright="(c) 1993-1996,1998-2014 Todd C. Miller" + copyright="(c) 1993-1996,1998-2015 Todd C. Miller" sudoedit_man=`echo ${pp_destdir}$mandir/*/sudoedit.*|sed "s:^${pp_destdir}::"` sudoedit_man_target=`basename $sudoedit_man | sed 's/edit//'` @@ -41,10 +41,10 @@ %if [rpm,deb] # Convert patch level into release and remove from version - pp_rpm_release="`expr \( $version : '.*p\([0-9][0-9]*\)' \| 0 \) + 1`" - pp_rpm_version="`expr $version : '\(.*\)p[0-9][0-9]*'`" + pp_rpm_release="`expr \( $version : '.*p\([0-9][0-9]*\)$' \| 0 \) + 1`" + pp_rpm_version="`expr \( $version : '\(.*\)p[0-9][0-9]*$' \| $version \)`" pp_rpm_license="BSD" - pp_rpm_url="http://www.sudo.ws/" + pp_rpm_url="https://www.sudo.ws" pp_rpm_group="Applications/System" pp_rpm_packager="Todd C. Miller " if test -n "$linux_audit"; then @@ -86,7 +86,7 @@ # Add distro info to release osrelease=`echo "$pp_rpm_distro" | sed -e 's/^[^0-9]*\([0-9]\{1,2\}\).*/\1/'` case "$pp_rpm_distro" in - centos*|rhel*) + centos*|rhel*|f[0-9]*) pp_rpm_release="$pp_rpm_release.el${osrelease%%[0-9]}" ;; sles*) @@ -97,7 +97,7 @@ # Uncomment some Defaults in sudoers # Note that the order must match that of sudoers. case "$pp_rpm_distro" in - centos*|rhel*) + centos*|rhel*|f[0-9]*) chmod u+w ${pp_destdir}${sudoersdir}/sudoers /bin/ed - ${pp_destdir}${sudoersdir}/sudoers <<-'EOF' /Locale settings/+1,s/^# // @@ -124,9 +124,13 @@ # For RedHat the doc dir is expected to include version and release case "$pp_rpm_distro" in - centos*|rhel*) - mv ${pp_destdir}/${docdir} ${pp_destdir}/${docdir}-${version}-${pp_rpm_release} - docdir=${docdir}-${version}-${pp_rpm_release} + centos*|rhel*|f[0-9]*) + rhel_docdir="${docdir}-${pp_rpm_version}-${pp_rpm_release}" + if test "`dirname ${exampledir}`" = "${docdir}"; then + exampledir="${rhel_docdir}/`basename ${exampledir}`" + fi + mv "${pp_destdir}/${docdir}" "${pp_destdir}/${rhel_docdir}" + docdir="${rhel_docdir}" ;; esac @@ -161,7 +165,27 @@ EOF fi ;; - sles*) + f[0-9]*) + # XXX - share with rhel + mkdir -p ${pp_destdir}/etc/pam.d + cat > ${pp_destdir}/etc/pam.d/sudo <<-EOF + #%PAM-1.0 + auth include system-auth + account include system-auth + password include system-auth + session optional pam_keyinit.so revoke + session required pam_limits.so + EOF + cat > ${pp_destdir}/etc/pam.d/sudo-i <<-EOF + #%PAM-1.0 + auth include sudo + account include sudo + password include sudo + session optional pam_keyinit.so force revoke + session required pam_limits.so + EOF + ;; + sles*) mkdir -p ${pp_destdir}/etc/pam.d if test $osrelease -lt 10; then cat > ${pp_destdir}/etc/pam.d/sudo <<-EOF @@ -191,6 +215,8 @@ /Locale settings/+1,s/^# // /X11 resource/+1,s/^# // /^# \%sudo/,s/^# // + /^# Defaults secure_path/,s/^# // + /^# Defaults mail_badpass/,s/^# // w q EOF @@ -227,7 +253,8 @@ # Package parent directories when not installing under /usr if test "${prefix}" != "/usr"; then extradirs=`echo ${pp_destdir}/${mandir}/[mc]* | sed "s#${pp_destdir}/##g"` - extradirs="$extradirs `dirname $docdir` `dirname $exampledir` `dirname $rundir` `dirname $vardir`" + extradirs="$extradirs `dirname $docdir` `dirname $rundir` `dirname $vardir`" + test "`dirname $exampledir`" != "$docdir" && extradirs="$extradirs `dirname $exampledir`" test -d ${pp_destdir}${localedir} && extradirs="$extradirs $localedir" for dir in $bindir $sbindir $libexecdir $includedir $extradirs; do while test "$dir" != "/"; do @@ -243,6 +270,7 @@ %fixup [deb] # Add Conflicts, Replaces headers and add libldap depedency as needed. + DEPENDS="%{linux_audit}" if test -z "%{flavor}"; then echo "Conflicts: sudo-ldap" >> %{pp_wrkdir}/%{name}/DEBIAN/control echo "Replaces: sudo-ldap" >> %{pp_wrkdir}/%{name}/DEBIAN/control @@ -250,12 +278,13 @@ echo "Conflicts: sudo" >> %{pp_wrkdir}/%{name}/DEBIAN/control echo "Replaces: sudo" >> %{pp_wrkdir}/%{name}/DEBIAN/control echo "Provides: sudo" >> %{pp_wrkdir}/%{name}/DEBIAN/control - cp -p %{pp_wrkdir}/%{name}/DEBIAN/control %{pp_wrkdir}/%{name}/DEBIAN/control.$$ - sed 's/^\(Depends:.*\) *$/\1, libldap-2.4-2/' %{pp_wrkdir}/%{name}/DEBIAN/control.$$ > %{pp_wrkdir}/%{name}/DEBIAN/control - rm -f %{pp_wrkdir}/%{name}/DEBIAN/control.$$ + DEPENDS="${DEPENDS}, libldap-2.4-2" fi - echo "Homepage: http://www.sudo.ws/sudo/" >> %{pp_wrkdir}/%{name}/DEBIAN/control - echo "Bugs: http://www.sudo.ws/bugs/" >> %{pp_wrkdir}/%{name}/DEBIAN/control + 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.$$ + echo "Homepage: https://www.sudo.ws" >> %{pp_wrkdir}/%{name}/DEBIAN/control + echo "Bugs: https://bugzilla.sudo.ws" >> %{pp_wrkdir}/%{name}/DEBIAN/control %files %if X"$parentdirs" != X"" @@ -272,15 +301,16 @@ $sudoersdir/sudoers.d/ 0750 $sudoers_uid:$sudoers_gid $rundir/ 0711 root: $vardir/ 0711 root: ignore-others + $vardir/lectured/ 0700 root: $docdir/ 0755 $docdir/sudoers2ldif 0755 optional,ignore-others %if [deb] $docdir/LICENSE ignore,ignore-others $docdir/ChangeLog ignore,ignore-others %endif - $docdir/* 0644 - $exampledir/ 0755 - $exampledir/* 0644 + $exampledir/ 0755 ignore-others + $exampledir/* 0644 ignore-others + $docdir/** 0644 $localedir/*/ - optional $localedir/*/LC_MESSAGES/ - optional $localedir/*/LC_MESSAGES/* 0644 optional @@ -399,6 +429,19 @@ ;; esac +%post [rpm,deb] + # Create /usr/lib/tmpfiles.d/sudo.conf if systemd is configured. + if [ -f /usr/lib/tmpfiles.d/systemd.conf ]; then + cat > /usr/lib/tmpfiles.d/sudo.conf <<-EOF + # Create an empty sudo time stamp directory on OSes using systemd. + # Sudo will create the directory itself but this can cause problems + # on systems that have SELinux enabled since the directories will be + # created with the user's security context. + d %{rundir} 0711 root root + D %{rundir}/ts 0700 root root + EOF + fi + %post [aix] # Create /etc/rc.d/rc2.d/S90sudo link if /etc/rc.d exists if [ -d /etc/rc.d ]; then @@ -424,6 +467,9 @@ X"`readlink /etc/sudo-ldap.conf 2>/dev/null`" = X"/etc/ldap/ldap.conf"; then rm -f /etc/sudo-ldap.conf fi + + # Remove systemd tmpfile config + rm -f /usr/lib/tmpfiles.d/sudo.conf %endif %if [rpm] case "%{pp_rpm_distro}" in @@ -431,6 +477,10 @@ # Remove /etc/rc.d/rc2.d/S90sudo link rm -f /etc/rc.d/rc2.d/S90sudo ;; + *) + # Remove systemd tmpfile config + rm -f /usr/lib/tmpfiles.d/sudo.conf + ;; esac %endif %if [aix]